@osdk/client 2.2.0-beta.2 → 2.2.0-beta.21

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 (483) hide show
  1. package/CHANGELOG.md +282 -0
  2. package/build/browser/Client.js.map +1 -1
  3. package/build/browser/MinimalClientContext.js.map +1 -1
  4. package/build/browser/__unstable/ConjureSupport.js.map +1 -1
  5. package/build/browser/actions/ActionValidationError.js +1 -1
  6. package/build/browser/actions/ActionValidationError.js.map +1 -1
  7. package/build/browser/actions/actions.test.js +226 -87
  8. package/build/browser/actions/actions.test.js.map +1 -1
  9. package/build/browser/actions/applyAction.js +28 -16
  10. package/build/browser/actions/applyAction.js.map +1 -1
  11. package/build/browser/createClient.js +19 -8
  12. package/build/browser/createClient.js.map +1 -1
  13. package/build/browser/createClient.test.js +14 -6
  14. package/build/browser/createClient.test.js.map +1 -1
  15. package/build/browser/createMinimalClient.js +2 -2
  16. package/build/browser/createMinimalClient.js.map +1 -1
  17. package/build/browser/createMinimalClientHelper.js +25 -0
  18. package/build/browser/createMinimalClientHelper.js.map +1 -0
  19. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +36 -13
  20. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  21. package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js +133 -0
  22. package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -1
  23. package/build/browser/derivedProperties/derivedPropertyDefinitionFactory.js +94 -0
  24. package/build/browser/derivedProperties/derivedPropertyDefinitionFactory.js.map +1 -0
  25. package/build/browser/fetchMetadata.test.js +11 -9
  26. package/build/browser/fetchMetadata.test.js.map +1 -1
  27. package/build/browser/index.js +1 -0
  28. package/build/browser/index.js.map +1 -1
  29. package/build/browser/intellisense.test.helpers/showsObjectPropertyJsdoc.js +25 -0
  30. package/build/browser/intellisense.test.helpers/showsObjectPropertyJsdoc.js.map +1 -0
  31. package/build/browser/intellisense.test.js +17 -1
  32. package/build/browser/intellisense.test.js.map +1 -1
  33. package/build/browser/internal/conversions/modernToLegacyGroupByClause.js +7 -0
  34. package/build/browser/internal/conversions/modernToLegacyGroupByClause.js.map +1 -1
  35. package/build/browser/internal/conversions/modernToLegacyWhereClause.js +1 -1
  36. package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  37. package/build/browser/logger/BaseLogger.js +59 -0
  38. package/build/browser/logger/BaseLogger.js.map +1 -0
  39. package/build/browser/logger/BrowserLogger.js +67 -0
  40. package/build/browser/logger/BrowserLogger.js.map +1 -0
  41. package/build/browser/logger/MinimalLogger.js +39 -0
  42. package/build/browser/logger/MinimalLogger.js.map +1 -0
  43. package/build/browser/logger/MinimalLogger.test.js +60 -0
  44. package/build/browser/logger/MinimalLogger.test.js.map +1 -0
  45. package/build/browser/logger/TestLogger.js +56 -0
  46. package/build/browser/logger/TestLogger.js.map +1 -0
  47. package/build/browser/object/AttachmentUpload.js +3 -0
  48. package/build/browser/object/AttachmentUpload.js.map +1 -1
  49. package/build/browser/object/SimpleOsdkProperties.js +2 -0
  50. package/build/browser/object/SimpleOsdkProperties.js.map +1 -0
  51. package/build/browser/object/aggregate.test.js +12 -2
  52. package/build/browser/object/aggregate.test.js.map +1 -1
  53. package/build/browser/object/attachment.test.js +20 -7
  54. package/build/browser/object/attachment.test.js.map +1 -1
  55. package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js +2 -0
  56. package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -0
  57. package/build/browser/object/convertWireToOsdkObjects/InterfaceHolder.js.map +1 -1
  58. package/build/browser/object/convertWireToOsdkObjects/ObjectHolder.js.map +1 -1
  59. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +29 -0
  60. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  61. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +53 -35
  62. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  63. package/build/browser/object/convertWireToOsdkObjects/getDollarAs.js.map +1 -1
  64. package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
  65. package/build/browser/object/convertWireToOsdkObjects.js +10 -11
  66. package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
  67. package/build/browser/object/convertWireToOsdkObjects.test.js +46 -36
  68. package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
  69. package/build/browser/object/fetchPage.js +17 -4
  70. package/build/browser/object/fetchPage.js.map +1 -1
  71. package/build/browser/object/fetchPage.test.js +56 -2
  72. package/build/browser/object/fetchPage.test.js.map +1 -1
  73. package/build/browser/object/geotimeseriesreference.test.js +56 -134
  74. package/build/browser/object/geotimeseriesreference.test.js.map +1 -1
  75. package/build/browser/object/media.test.js +19 -14
  76. package/build/browser/object/media.test.js.map +1 -1
  77. package/build/browser/object/object.test.js +182 -66
  78. package/build/browser/object/object.test.js.map +1 -1
  79. package/build/browser/object/timeseries.test.js +119 -85
  80. package/build/browser/object/timeseries.test.js.map +1 -1
  81. package/build/browser/objectSet/InterfaceObjectSet.test.js +37 -17
  82. package/build/browser/objectSet/InterfaceObjectSet.test.js.map +1 -1
  83. package/build/browser/objectSet/ObjectSet.test.js +212 -114
  84. package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
  85. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +20 -16
  86. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  87. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +21 -12
  88. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  89. package/build/browser/objectSet/createObjectSet.js +2 -1
  90. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  91. package/build/browser/observable/ListPayload.js.map +1 -1
  92. package/build/browser/observable/ObjectPayload.js.map +1 -1
  93. package/build/browser/observable/ObservableClient.js.map +1 -1
  94. package/build/browser/observable/OptimisticBuilder.js.map +1 -1
  95. package/build/browser/observable/internal/ActionApplication.js +102 -0
  96. package/build/browser/observable/internal/ActionApplication.js.map +1 -0
  97. package/build/browser/observable/internal/BulkObjectLoader.js +93 -0
  98. package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -0
  99. package/build/browser/observable/internal/BulkObjectLoader.test.js +112 -0
  100. package/build/browser/observable/internal/BulkObjectLoader.test.js.map +1 -0
  101. package/build/browser/observable/internal/CacheKey.js +38 -1
  102. package/build/browser/observable/internal/CacheKey.js.map +1 -1
  103. package/build/browser/observable/internal/CacheKeys.js +4 -4
  104. package/build/browser/observable/internal/CacheKeys.js.map +1 -1
  105. package/build/browser/observable/internal/Changes.js +58 -0
  106. package/build/browser/observable/internal/Changes.js.map +1 -0
  107. package/build/browser/observable/internal/Layer.js +6 -3
  108. package/build/browser/observable/internal/Layer.js.map +1 -1
  109. package/build/browser/observable/internal/ListQuery.js +495 -129
  110. package/build/browser/observable/internal/ListQuery.js.map +1 -1
  111. package/build/browser/observable/internal/ObjectQuery.js +40 -14
  112. package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
  113. package/build/browser/observable/internal/ObservableClientImpl.js +4 -12
  114. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  115. package/build/browser/observable/internal/OptimisticJob.js +30 -29
  116. package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
  117. package/build/browser/observable/internal/OrderByCanonicalizer.js +73 -0
  118. package/build/browser/observable/internal/OrderByCanonicalizer.js.map +1 -0
  119. package/build/browser/observable/internal/OrderByCanonicalizer.test.js +78 -0
  120. package/build/browser/observable/internal/OrderByCanonicalizer.test.js.map +1 -0
  121. package/build/browser/observable/internal/Query.js +79 -6
  122. package/build/browser/observable/internal/Query.js.map +1 -1
  123. package/build/browser/observable/internal/RefCounts.js +7 -2
  124. package/build/browser/observable/internal/RefCounts.js.map +1 -1
  125. package/build/browser/observable/internal/SimpleWhereClause.js +2 -0
  126. package/build/browser/observable/internal/SimpleWhereClause.js.map +1 -0
  127. package/build/browser/observable/internal/Store.js +140 -190
  128. package/build/browser/observable/internal/Store.js.map +1 -1
  129. package/build/browser/observable/internal/Store.test.js +666 -300
  130. package/build/browser/observable/internal/Store.test.js.map +1 -1
  131. package/build/browser/observable/internal/WhereClauseCanonicalizer.js +11 -3
  132. package/build/browser/observable/internal/WhereClauseCanonicalizer.js.map +1 -1
  133. package/build/browser/observable/internal/objectMatchesWhereClause.js +0 -4
  134. package/build/browser/observable/internal/objectMatchesWhereClause.js.map +1 -1
  135. package/build/browser/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  136. package/build/browser/observable/internal/testUtils.js +222 -19
  137. package/build/browser/observable/internal/testUtils.js.map +1 -1
  138. package/build/browser/ontology/StandardOntologyProvider.test.js +17 -16
  139. package/build/browser/ontology/StandardOntologyProvider.test.js.map +1 -1
  140. package/build/browser/ontology/loadFullObjectMetadata.js +0 -1
  141. package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
  142. package/build/browser/public/internal.js +2 -0
  143. package/build/browser/public/internal.js.map +1 -1
  144. package/build/browser/public/unstable-do-not-use.js +1 -0
  145. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  146. package/build/browser/public-utils/osdkConfig.js +49 -0
  147. package/build/browser/public-utils/osdkConfig.js.map +1 -0
  148. package/build/{esm/observable/internal/ChangedObjects.js → browser/public-utils/vite-env.d.ts} +2 -7
  149. package/build/browser/queries/applyQuery.js +34 -2
  150. package/build/browser/queries/applyQuery.js.map +1 -1
  151. package/build/browser/queries/queries.test.js +36 -13
  152. package/build/browser/queries/queries.test.js.map +1 -1
  153. package/build/browser/queries/types.js.map +1 -1
  154. package/build/browser/tsserver.js.map +1 -1
  155. package/build/browser/util/UserAgent.js +1 -1
  156. package/build/browser/util/UserAgent.js.map +1 -1
  157. package/build/browser/util/extractRdpDefinition.js +140 -0
  158. package/build/browser/util/extractRdpDefinition.js.map +1 -0
  159. package/build/browser/util/extractRdpDefinition.test.js +233 -0
  160. package/build/browser/util/extractRdpDefinition.test.js.map +1 -0
  161. package/build/browser/{observable/internal/ChangedObjects.js → util/isPoint.js} +3 -7
  162. package/build/browser/util/isPoint.js.map +1 -0
  163. package/build/browser/util/objectSpecifierUtils.js +48 -0
  164. package/build/browser/util/objectSpecifierUtils.js.map +1 -0
  165. package/build/browser/util/objectSpecifierUtils.test.js +42 -0
  166. package/build/browser/util/objectSpecifierUtils.test.js.map +1 -0
  167. package/build/browser/util/toDataValue.js +14 -2
  168. package/build/browser/util/toDataValue.js.map +1 -1
  169. package/build/browser/util/toDataValue.test.js +37 -16
  170. package/build/browser/util/toDataValue.test.js.map +1 -1
  171. package/build/browser/util/toDataValueQueries.js +25 -2
  172. package/build/browser/util/toDataValueQueries.js.map +1 -1
  173. package/build/cjs/{Client-C8K3E1vH.d.cts → Client-CgL2LKN9.d.cts} +7 -8
  174. package/build/cjs/{chunk-T5UE6BI7.cjs → chunk-33GHS3X4.cjs} +256 -80
  175. package/build/cjs/chunk-33GHS3X4.cjs.map +1 -0
  176. package/build/cjs/{chunk-X7WGNFZ4.cjs → chunk-37QC7LR3.cjs} +173 -34
  177. package/build/cjs/chunk-37QC7LR3.cjs.map +1 -0
  178. package/build/cjs/chunk-T4NIFYZS.cjs +14 -0
  179. package/build/cjs/chunk-T4NIFYZS.cjs.map +1 -0
  180. package/build/cjs/index.cjs +298 -177
  181. package/build/cjs/index.cjs.map +1 -1
  182. package/build/cjs/index.d.cts +14 -22
  183. package/build/cjs/public/internal.cjs +61 -7
  184. package/build/cjs/public/internal.cjs.map +1 -1
  185. package/build/cjs/public/internal.d.cts +50 -3
  186. package/build/cjs/public/unstable-do-not-use.cjs +1181 -527
  187. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  188. package/build/cjs/public/unstable-do-not-use.d.cts +44 -25
  189. package/build/esm/Client.js.map +1 -1
  190. package/build/esm/MinimalClientContext.js.map +1 -1
  191. package/build/esm/__unstable/ConjureSupport.js.map +1 -1
  192. package/build/esm/actions/ActionValidationError.js +1 -1
  193. package/build/esm/actions/ActionValidationError.js.map +1 -1
  194. package/build/esm/actions/actions.test.js +226 -87
  195. package/build/esm/actions/actions.test.js.map +1 -1
  196. package/build/esm/actions/applyAction.js +28 -16
  197. package/build/esm/actions/applyAction.js.map +1 -1
  198. package/build/esm/createClient.js +19 -8
  199. package/build/esm/createClient.js.map +1 -1
  200. package/build/esm/createClient.test.js +14 -6
  201. package/build/esm/createClient.test.js.map +1 -1
  202. package/build/esm/createMinimalClient.js +2 -2
  203. package/build/esm/createMinimalClient.js.map +1 -1
  204. package/build/esm/createMinimalClientHelper.js +25 -0
  205. package/build/esm/createMinimalClientHelper.js.map +1 -0
  206. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +36 -13
  207. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  208. package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js +133 -0
  209. package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -1
  210. package/build/esm/derivedProperties/derivedPropertyDefinitionFactory.js +94 -0
  211. package/build/esm/derivedProperties/derivedPropertyDefinitionFactory.js.map +1 -0
  212. package/build/esm/fetchMetadata.test.js +11 -9
  213. package/build/esm/fetchMetadata.test.js.map +1 -1
  214. package/build/esm/index.js +1 -0
  215. package/build/esm/index.js.map +1 -1
  216. package/build/esm/intellisense.test.helpers/showsObjectPropertyJsdoc.js +25 -0
  217. package/build/esm/intellisense.test.helpers/showsObjectPropertyJsdoc.js.map +1 -0
  218. package/build/esm/intellisense.test.js +17 -1
  219. package/build/esm/intellisense.test.js.map +1 -1
  220. package/build/esm/internal/conversions/modernToLegacyGroupByClause.js +7 -0
  221. package/build/esm/internal/conversions/modernToLegacyGroupByClause.js.map +1 -1
  222. package/build/esm/internal/conversions/modernToLegacyWhereClause.js +1 -1
  223. package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  224. package/build/esm/logger/BaseLogger.js +59 -0
  225. package/build/esm/logger/BaseLogger.js.map +1 -0
  226. package/build/esm/logger/BrowserLogger.js +67 -0
  227. package/build/esm/logger/BrowserLogger.js.map +1 -0
  228. package/build/esm/logger/MinimalLogger.js +39 -0
  229. package/build/esm/logger/MinimalLogger.js.map +1 -0
  230. package/build/esm/logger/MinimalLogger.test.js +60 -0
  231. package/build/esm/logger/MinimalLogger.test.js.map +1 -0
  232. package/build/esm/logger/TestLogger.js +56 -0
  233. package/build/esm/logger/TestLogger.js.map +1 -0
  234. package/build/esm/object/AttachmentUpload.js +3 -0
  235. package/build/esm/object/AttachmentUpload.js.map +1 -1
  236. package/build/esm/object/SimpleOsdkProperties.js +2 -0
  237. package/build/esm/object/SimpleOsdkProperties.js.map +1 -0
  238. package/build/esm/object/aggregate.test.js +12 -2
  239. package/build/esm/object/aggregate.test.js.map +1 -1
  240. package/build/esm/object/attachment.test.js +20 -7
  241. package/build/esm/object/attachment.test.js.map +1 -1
  242. package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js +2 -0
  243. package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -0
  244. package/build/esm/object/convertWireToOsdkObjects/InterfaceHolder.js.map +1 -1
  245. package/build/esm/object/convertWireToOsdkObjects/ObjectHolder.js.map +1 -1
  246. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +29 -0
  247. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  248. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +53 -35
  249. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  250. package/build/esm/object/convertWireToOsdkObjects/getDollarAs.js.map +1 -1
  251. package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
  252. package/build/esm/object/convertWireToOsdkObjects.js +10 -11
  253. package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
  254. package/build/esm/object/convertWireToOsdkObjects.test.js +46 -36
  255. package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
  256. package/build/esm/object/fetchPage.js +17 -4
  257. package/build/esm/object/fetchPage.js.map +1 -1
  258. package/build/esm/object/fetchPage.test.js +56 -2
  259. package/build/esm/object/fetchPage.test.js.map +1 -1
  260. package/build/esm/object/geotimeseriesreference.test.js +56 -134
  261. package/build/esm/object/geotimeseriesreference.test.js.map +1 -1
  262. package/build/esm/object/media.test.js +19 -14
  263. package/build/esm/object/media.test.js.map +1 -1
  264. package/build/esm/object/object.test.js +182 -66
  265. package/build/esm/object/object.test.js.map +1 -1
  266. package/build/esm/object/timeseries.test.js +119 -85
  267. package/build/esm/object/timeseries.test.js.map +1 -1
  268. package/build/esm/objectSet/InterfaceObjectSet.test.js +37 -17
  269. package/build/esm/objectSet/InterfaceObjectSet.test.js.map +1 -1
  270. package/build/esm/objectSet/ObjectSet.test.js +212 -114
  271. package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
  272. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +20 -16
  273. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  274. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +21 -12
  275. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  276. package/build/esm/objectSet/createObjectSet.js +2 -1
  277. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  278. package/build/esm/observable/ListPayload.js.map +1 -1
  279. package/build/esm/observable/ObjectPayload.js.map +1 -1
  280. package/build/esm/observable/ObservableClient.js.map +1 -1
  281. package/build/esm/observable/OptimisticBuilder.js.map +1 -1
  282. package/build/esm/observable/internal/ActionApplication.js +102 -0
  283. package/build/esm/observable/internal/ActionApplication.js.map +1 -0
  284. package/build/esm/observable/internal/BulkObjectLoader.js +93 -0
  285. package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -0
  286. package/build/esm/observable/internal/BulkObjectLoader.test.js +112 -0
  287. package/build/esm/observable/internal/BulkObjectLoader.test.js.map +1 -0
  288. package/build/esm/observable/internal/CacheKey.js +38 -1
  289. package/build/esm/observable/internal/CacheKey.js.map +1 -1
  290. package/build/esm/observable/internal/CacheKeys.js +4 -4
  291. package/build/esm/observable/internal/CacheKeys.js.map +1 -1
  292. package/build/esm/observable/internal/Changes.js +58 -0
  293. package/build/esm/observable/internal/Changes.js.map +1 -0
  294. package/build/esm/observable/internal/Layer.js +6 -3
  295. package/build/esm/observable/internal/Layer.js.map +1 -1
  296. package/build/esm/observable/internal/ListQuery.js +495 -129
  297. package/build/esm/observable/internal/ListQuery.js.map +1 -1
  298. package/build/esm/observable/internal/ObjectQuery.js +40 -14
  299. package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
  300. package/build/esm/observable/internal/ObservableClientImpl.js +4 -12
  301. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  302. package/build/esm/observable/internal/OptimisticJob.js +30 -29
  303. package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
  304. package/build/esm/observable/internal/OrderByCanonicalizer.js +73 -0
  305. package/build/esm/observable/internal/OrderByCanonicalizer.js.map +1 -0
  306. package/build/esm/observable/internal/OrderByCanonicalizer.test.js +78 -0
  307. package/build/esm/observable/internal/OrderByCanonicalizer.test.js.map +1 -0
  308. package/build/esm/observable/internal/Query.js +79 -6
  309. package/build/esm/observable/internal/Query.js.map +1 -1
  310. package/build/esm/observable/internal/RefCounts.js +7 -2
  311. package/build/esm/observable/internal/RefCounts.js.map +1 -1
  312. package/build/esm/observable/internal/SimpleWhereClause.js +2 -0
  313. package/build/esm/observable/internal/SimpleWhereClause.js.map +1 -0
  314. package/build/esm/observable/internal/Store.js +140 -190
  315. package/build/esm/observable/internal/Store.js.map +1 -1
  316. package/build/esm/observable/internal/Store.test.js +666 -300
  317. package/build/esm/observable/internal/Store.test.js.map +1 -1
  318. package/build/esm/observable/internal/WhereClauseCanonicalizer.js +11 -3
  319. package/build/esm/observable/internal/WhereClauseCanonicalizer.js.map +1 -1
  320. package/build/esm/observable/internal/objectMatchesWhereClause.js +0 -4
  321. package/build/esm/observable/internal/objectMatchesWhereClause.js.map +1 -1
  322. package/build/esm/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  323. package/build/esm/observable/internal/testUtils.js +222 -19
  324. package/build/esm/observable/internal/testUtils.js.map +1 -1
  325. package/build/esm/ontology/StandardOntologyProvider.test.js +17 -16
  326. package/build/esm/ontology/StandardOntologyProvider.test.js.map +1 -1
  327. package/build/esm/ontology/loadFullObjectMetadata.js +0 -1
  328. package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
  329. package/build/esm/public/internal.js +2 -0
  330. package/build/esm/public/internal.js.map +1 -1
  331. package/build/esm/public/unstable-do-not-use.js +1 -0
  332. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  333. package/build/esm/public-utils/osdkConfig.js +49 -0
  334. package/build/esm/public-utils/osdkConfig.js.map +1 -0
  335. package/build/esm/public-utils/vite-env.d.ts +19 -0
  336. package/build/esm/queries/applyQuery.js +34 -2
  337. package/build/esm/queries/applyQuery.js.map +1 -1
  338. package/build/esm/queries/queries.test.js +36 -13
  339. package/build/esm/queries/queries.test.js.map +1 -1
  340. package/build/esm/queries/types.js.map +1 -1
  341. package/build/esm/tsserver.js.map +1 -1
  342. package/build/esm/util/UserAgent.js +1 -1
  343. package/build/esm/util/UserAgent.js.map +1 -1
  344. package/build/esm/util/extractRdpDefinition.js +140 -0
  345. package/build/esm/util/extractRdpDefinition.js.map +1 -0
  346. package/build/esm/util/extractRdpDefinition.test.js +233 -0
  347. package/build/esm/util/extractRdpDefinition.test.js.map +1 -0
  348. package/build/esm/util/isPoint.js +20 -0
  349. package/build/esm/util/isPoint.js.map +1 -0
  350. package/build/esm/util/objectSpecifierUtils.js +48 -0
  351. package/build/esm/util/objectSpecifierUtils.js.map +1 -0
  352. package/build/esm/util/objectSpecifierUtils.test.js +42 -0
  353. package/build/esm/util/objectSpecifierUtils.test.js.map +1 -0
  354. package/build/esm/util/toDataValue.js +14 -2
  355. package/build/esm/util/toDataValue.js.map +1 -1
  356. package/build/esm/util/toDataValue.test.js +37 -16
  357. package/build/esm/util/toDataValue.test.js.map +1 -1
  358. package/build/esm/util/toDataValueQueries.js +25 -2
  359. package/build/esm/util/toDataValueQueries.js.map +1 -1
  360. package/build/types/Client.d.ts +1 -1
  361. package/build/types/Client.d.ts.map +1 -1
  362. package/build/types/MinimalClientContext.d.ts +1 -1
  363. package/build/types/MinimalClientContext.d.ts.map +1 -1
  364. package/build/types/__unstable/ConjureSupport.d.ts +2 -2
  365. package/build/types/actions/applyAction.d.ts +1 -2
  366. package/build/types/actions/applyAction.d.ts.map +1 -1
  367. package/build/types/createClient.d.ts +1 -1
  368. package/build/types/createClient.d.ts.map +1 -1
  369. package/build/types/createClient.test.d.ts +2 -1
  370. package/build/types/createClient.test.d.ts.map +1 -1
  371. package/build/types/createMinimalClientHelper.d.ts +1 -0
  372. package/build/types/createMinimalClientHelper.d.ts.map +1 -0
  373. package/build/types/derivedProperties/derivedPropertyDefinitionFactory.d.ts +1 -0
  374. package/build/types/derivedProperties/derivedPropertyDefinitionFactory.d.ts.map +1 -0
  375. package/build/types/index.d.ts +5 -5
  376. package/build/types/index.d.ts.map +1 -1
  377. package/build/types/intellisense.test.helpers/showsObjectPropertyJsdoc.d.ts +1 -0
  378. package/build/types/intellisense.test.helpers/showsObjectPropertyJsdoc.d.ts.map +1 -0
  379. package/build/types/logger/BaseLogger.d.ts +33 -0
  380. package/build/types/logger/BaseLogger.d.ts.map +1 -0
  381. package/build/types/logger/BrowserLogger.d.ts +9 -0
  382. package/build/types/logger/BrowserLogger.d.ts.map +1 -0
  383. package/build/types/logger/MinimalLogger.d.ts +9 -0
  384. package/build/types/logger/MinimalLogger.d.ts.map +1 -0
  385. package/build/types/logger/MinimalLogger.test.d.ts +1 -0
  386. package/build/types/logger/MinimalLogger.test.d.ts.map +1 -0
  387. package/build/types/logger/TestLogger.d.ts +14 -0
  388. package/build/types/logger/TestLogger.d.ts.map +1 -0
  389. package/build/types/object/AttachmentUpload.d.ts +3 -0
  390. package/build/types/object/AttachmentUpload.d.ts.map +1 -1
  391. package/build/types/object/SimpleOsdkProperties.d.ts +1 -0
  392. package/build/types/object/SimpleOsdkProperties.d.ts.map +1 -0
  393. package/build/types/object/convertWireToOsdkObjects/BaseHolder.d.ts +1 -0
  394. package/build/types/object/convertWireToOsdkObjects/BaseHolder.d.ts.map +1 -0
  395. package/build/types/object/convertWireToOsdkObjects.d.ts +8 -1
  396. package/build/types/object/convertWireToOsdkObjects.d.ts.map +1 -1
  397. package/build/types/object/fetchPage.d.ts.map +1 -1
  398. package/build/types/object/object.test.d.ts.map +1 -1
  399. package/build/types/objectSet/ObjectSet.test.d.ts.map +1 -1
  400. package/build/types/observable/ListPayload.d.ts +5 -9
  401. package/build/types/observable/ListPayload.d.ts.map +1 -1
  402. package/build/types/observable/ObjectPayload.d.ts +4 -7
  403. package/build/types/observable/ObjectPayload.d.ts.map +1 -1
  404. package/build/types/observable/ObservableClient.d.ts +33 -10
  405. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  406. package/build/types/observable/OptimisticBuilder.d.ts +1 -1
  407. package/build/types/observable/OptimisticBuilder.d.ts.map +1 -1
  408. package/build/types/observable/internal/ActionApplication.d.ts +9 -0
  409. package/build/types/observable/internal/ActionApplication.d.ts.map +1 -0
  410. package/build/types/observable/internal/BulkObjectLoader.d.ts +8 -0
  411. package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -0
  412. package/build/types/observable/internal/BulkObjectLoader.test.d.ts +1 -0
  413. package/build/types/observable/internal/BulkObjectLoader.test.d.ts.map +1 -0
  414. package/build/types/observable/internal/CacheKeys.d.ts +2 -1
  415. package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
  416. package/build/types/observable/internal/Changes.d.ts +15 -0
  417. package/build/types/observable/internal/Changes.d.ts.map +1 -0
  418. package/build/types/observable/internal/Layer.d.ts +2 -1
  419. package/build/types/observable/internal/Layer.d.ts.map +1 -1
  420. package/build/types/observable/internal/ListQuery.d.ts +69 -23
  421. package/build/types/observable/internal/ListQuery.d.ts.map +1 -1
  422. package/build/types/observable/internal/ObjectQuery.d.ts +8 -9
  423. package/build/types/observable/internal/ObjectQuery.d.ts.map +1 -1
  424. package/build/types/observable/internal/OptimisticJob.d.ts +2 -2
  425. package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
  426. package/build/types/observable/internal/OrderByCanonicalizer.d.ts +12 -0
  427. package/build/types/observable/internal/OrderByCanonicalizer.d.ts.map +1 -0
  428. package/build/types/observable/internal/OrderByCanonicalizer.test.d.ts +1 -0
  429. package/build/types/observable/internal/OrderByCanonicalizer.test.d.ts.map +1 -0
  430. package/build/types/observable/internal/Query.d.ts +45 -9
  431. package/build/types/observable/internal/Query.d.ts.map +1 -1
  432. package/build/types/observable/internal/RefCounts.d.ts.map +1 -1
  433. package/build/types/observable/internal/SimpleWhereClause.d.ts +2 -0
  434. package/build/types/observable/internal/SimpleWhereClause.d.ts.map +1 -0
  435. package/build/types/observable/internal/Store.d.ts +34 -30
  436. package/build/types/observable/internal/Store.d.ts.map +1 -1
  437. package/build/types/observable/internal/WhereClauseCanonicalizer.d.ts +2 -1
  438. package/build/types/observable/internal/WhereClauseCanonicalizer.d.ts.map +1 -1
  439. package/build/types/observable/internal/objectMatchesWhereClause.d.ts +4 -2
  440. package/build/types/observable/internal/objectMatchesWhereClause.d.ts.map +1 -1
  441. package/build/types/observable/internal/testUtils.d.ts +48 -9
  442. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  443. package/build/types/public/internal.d.ts +2 -0
  444. package/build/types/public/internal.d.ts.map +1 -1
  445. package/build/types/public/unstable-do-not-use.d.ts +4 -5
  446. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  447. package/build/types/public-utils/osdkConfig.d.ts +8 -0
  448. package/build/types/public-utils/osdkConfig.d.ts.map +1 -0
  449. package/build/types/public-utils/vite-env.d.d.ts +3 -0
  450. package/build/types/public-utils/vite-env.d.d.ts.map +1 -0
  451. package/build/types/queries/applyQuery.d.ts +4 -2
  452. package/build/types/queries/applyQuery.d.ts.map +1 -1
  453. package/build/types/queries/types.d.ts +1 -1
  454. package/build/types/queries/types.d.ts.map +1 -1
  455. package/build/types/tsserver.d.ts +1 -1
  456. package/build/types/tsserver.d.ts.map +1 -1
  457. package/build/types/util/extractRdpDefinition.d.ts +4 -0
  458. package/build/types/util/extractRdpDefinition.d.ts.map +1 -0
  459. package/build/types/util/extractRdpDefinition.test.d.ts +1 -0
  460. package/build/types/util/extractRdpDefinition.test.d.ts.map +1 -0
  461. package/build/types/util/isPoint.d.ts +1 -0
  462. package/build/types/util/isPoint.d.ts.map +1 -0
  463. package/build/types/util/objectSpecifierUtils.d.ts +24 -0
  464. package/build/types/util/objectSpecifierUtils.d.ts.map +1 -0
  465. package/build/types/util/objectSpecifierUtils.test.d.ts +1 -0
  466. package/build/types/util/objectSpecifierUtils.test.d.ts.map +1 -0
  467. package/package.json +20 -16
  468. package/build/browser/Logger.js +0 -2
  469. package/build/browser/Logger.js.map +0 -1
  470. package/build/browser/observable/internal/ChangedObjects.js.map +0 -1
  471. package/build/cjs/chunk-Q7SFCCGT.cjs +0 -11
  472. package/build/cjs/chunk-Q7SFCCGT.cjs.map +0 -1
  473. package/build/cjs/chunk-T5UE6BI7.cjs.map +0 -1
  474. package/build/cjs/chunk-X7WGNFZ4.cjs.map +0 -1
  475. package/build/cjs/graphql-JJX5MZPQ.cjs +0 -10491
  476. package/build/cjs/graphql-JJX5MZPQ.cjs.map +0 -1
  477. package/build/esm/Logger.js +0 -2
  478. package/build/esm/Logger.js.map +0 -1
  479. package/build/esm/observable/internal/ChangedObjects.js.map +0 -1
  480. package/build/types/Logger.d.ts +0 -18
  481. package/build/types/Logger.d.ts.map +0 -1
  482. package/build/types/observable/internal/ChangedObjects.d.ts +0 -7
  483. package/build/types/observable/internal/ChangedObjects.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Store.test.js","names":["$ontologyRid","createOffice","Employee","Todo","apiServer","afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","vitest","createClient","createOptimisticId","Store","applyCustomMatchers","createClientMockHelper","createDefer","expectSingleListCallAndClear","expectSingleObjectCallAndClear","listPayloadContaining","mockListSubCallback","mockSingleSubCallback","objectPayloadContaining","waitForCall","defer","setConfig","fakeTimers","toFake","resetConfig","ANY_INIT_ENTRY","object","undefined","lastUpdated","status","client","cache","employeesAsServerReturns","mutatedEmployees","listen","fetchPage","data","$clone","fullName","slice","close","emp","getObject","$primaryKey","toBeUndefined","result","updateObject","toBe","toEqual","updatedEmpFromCache","not","subFn","observeObject","mode","optimisticId","removeLayer","useFakeTimers","updateList","empSubFn","listSubFn","observeList","optimisticEmployee","truthUpdatedEmployee","toHaveBeenCalled","useRealTimers","toHaveBeenCalledExactlyOnceWith","mockClear","staleEmp","invalidateObject","waitFor","subListFn","resolvedList","invalidateList","invalidateObjectType","subFn1","subFn2","likeEmployee50030","objectContaining","isOptimistic","firstLoad","mock","lastCall","s","toBeGreaterThan","sub","unsubscribe","toHaveBeenCalledTimes","calls","listSub1","mockReset","runOnlyPendingTimers","employeeId","$gt","listSub","pageSize","fetchMore","toHaveBeenCalledWith","mockClient","mockFetchOneOnce","resolve","$apiName","todoSubFn","expectLoadingAndLoaded","loading","loaded","mockApplyActionOnce","addedObjects","objectType","primaryKey","text","actionPromise","applyAction","officeId","fauxObject","$objectType","$title","applyActionResult","optimisticUpdate","ctx","someValue","reject","rejects","toThrow","store","baseObjects","map","i","cacheKeys","obj","getCacheKey","layerIds","batch","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 $ontologyRid,\n createOffice,\n Employee,\n Todo,\n} from \"@osdk/client.test.ontology\";\nimport { apiServer } from \"@osdk/shared.test\";\nimport type { Mock } from \"vitest\";\nimport {\n afterAll,\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n vitest,\n} from \"vitest\";\nimport type { Client } from \"../../Client.js\";\nimport { createClient } from \"../../createClient.js\";\nimport type { Unsubscribable } from \"../ObservableClient.js\";\nimport { createOptimisticId } from \"./OptimisticId.js\";\nimport { Store } from \"./Store.js\";\nimport type { MockClientHelper } from \"./testUtils.js\";\nimport {\n applyCustomMatchers,\n createClientMockHelper,\n createDefer,\n expectSingleListCallAndClear,\n expectSingleObjectCallAndClear,\n listPayloadContaining,\n mockListSubCallback,\n mockSingleSubCallback,\n objectPayloadContaining,\n waitForCall,\n} from \"./testUtils.js\";\n\nconst defer = createDefer();\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\napplyCustomMatchers();\n\ndescribe(Store, () => {\n describe(\"with mock server\", () => {\n let client: Client;\n let cache: Store;\n\n let employeesAsServerReturns: Osdk.Instance<Employee>[];\n let mutatedEmployees: Osdk.Instance<Employee>[];\n\n beforeAll(async () => {\n apiServer.listen();\n client = createClient(\n \"https://stack.palantir.com\",\n $ontologyRid,\n async () => \"myAccessToken\",\n );\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\n afterAll(() => {\n apiServer.close();\n });\n\n beforeEach(() => {\n cache = new Store(client);\n });\n\n afterEach(() => {\n cache = undefined!;\n });\n\n it(\"basic single object works\", async () => {\n const emp = employeesAsServerReturns[0];\n\n // starts empty\n expect(\n cache.getObject(Employee, emp.$primaryKey),\n ).toBeUndefined();\n\n const result = cache.updateObject(Employee, emp);\n expect(emp).toBe(result);\n\n // getting the object now matches the result\n expect(cache.getObject(Employee, emp.$primaryKey)).toEqual(\n result,\n );\n\n const updatedEmpFromCache = cache.updateObject(\n Employee,\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.getObject(Employee, emp.$primaryKey)).toEqual(\n updatedEmpFromCache,\n );\n });\n\n describe(\"optimistic updates\", () => {\n it(\"rolls back objects\", async () => {\n const emp = employeesAsServerReturns[0];\n cache.updateObject(Employee, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\n );\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticId = createOptimisticId();\n // update with an optimistic write\n cache.updateObject(Employee, 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.removeLayer(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n });\n\n it(\"rolls back to an updated real value\", async () => {\n vi.useFakeTimers();\n\n // pre-seed the cache with the \"real\" value\n cache.updateList(Employee, {}, employeesAsServerReturns);\n\n const emp = employeesAsServerReturns[0];\n\n const empSubFn = mockSingleSubCallback();\n defer(\n cache.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n empSubFn,\n ),\n );\n\n expectSingleObjectCallAndClear(empSubFn, emp, \"loaded\");\n\n const listSubFn = mockListSubCallback();\n defer(\n cache.observeList(Employee, {}, { mode: \"offline\" }, listSubFn),\n );\n\n expectSingleListCallAndClear(listSubFn, employeesAsServerReturns);\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n const optimisticId = createOptimisticId();\n\n // update with an optimistic write\n cache.updateObject(Employee, optimisticEmployee, {\n optimisticId,\n });\n\n // expect optimistic write\n expectSingleObjectCallAndClear(empSubFn, optimisticEmployee);\n\n // expect optimistic write to the list\n expectSingleListCallAndClear(\n listSubFn,\n [\n optimisticEmployee,\n ...employeesAsServerReturns.slice(1),\n ],\n );\n\n // write the real update, via the earlier list definition\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n cache.updateList(Employee, {}, [truthUpdatedEmployee]);\n\n // we shouldn't expect an update because the top layer has a value\n expect(empSubFn).not.toHaveBeenCalled();\n\n // we do get an update to the list but we still see the optimistic value\n // for the object\n expectSingleListCallAndClear(listSubFn, [optimisticEmployee]);\n\n // remove the optimistic write\n cache.removeLayer(optimisticId);\n\n // see the object observation get updated\n expectSingleObjectCallAndClear(empSubFn, truthUpdatedEmployee);\n\n // see the list get updated\n expectSingleListCallAndClear(listSubFn, [truthUpdatedEmployee]);\n\n vi.useRealTimers();\n });\n\n it(\"rolls back to an updated real value via list\", async () => {\n const emp = employeesAsServerReturns[0];\n cache.updateObject(Employee, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\n );\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: emp,\n status: \"loaded\",\n }),\n );\n subFn.mockClear();\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n // update with an optimistic write\n const optimisticId = createOptimisticId();\n cache.updateObject(Employee, optimisticEmployee, {\n optimisticId,\n });\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: optimisticEmployee,\n }),\n );\n subFn.mockClear();\n\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n cache.updateObject(Employee, truthUpdatedEmployee);\n\n // we shouldn't expect an update because the top layer has a value\n expect(subFn).not.toHaveBeenCalled();\n\n // remove the optimistic write\n cache.removeLayer(optimisticId);\n\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: truthUpdatedEmployee,\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 cache.updateObject(Employee, staleEmp);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\n );\n\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: staleEmp,\n status: \"loaded\",\n }),\n );\n subFn.mockClear();\n\n // invalidate\n void cache.invalidateObject(Employee, staleEmp.$primaryKey);\n\n await vi.waitFor(() => expect(subFn).toHaveBeenCalled());\n\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: staleEmp,\n status: \"loading\",\n }),\n );\n subFn.mockClear();\n\n await vi.waitFor(() => expect(subFn).toHaveBeenCalled());\n\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: emp,\n }),\n );\n });\n });\n\n describe(\".invalidateList\", () => {\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 cache.updateList(Employee, {}, [staleEmp]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(cache.observeList(Employee, {}, { mode: \"offline\" }, subListFn));\n\n await vi.waitFor(() => expect(subListFn).toHaveBeenCalled());\n expect(subListFn).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: [staleEmp],\n status: \"loaded\",\n }),\n );\n subListFn.mockClear();\n\n cache.invalidateList(Employee, {});\n\n await vi.waitFor(() => expect(subListFn).toHaveBeenCalled());\n expect(subListFn).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: [staleEmp],\n status: \"loading\",\n }),\n );\n subListFn.mockClear();\n\n await vi.waitFor(() => expect(subListFn).toHaveBeenCalled());\n expect(subListFn).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: employeesAsServerReturns,\n }),\n );\n subListFn.mockClear();\n\n await vi.waitFor(() => expect(subFn).toHaveBeenCalled());\n\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n status: \"loaded\",\n object: emp,\n }),\n );\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 cache.updateList(Employee, {}, [staleEmp]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(cache.observeList(Employee, {}, { mode: \"offline\" }, subListFn));\n\n await vi.waitFor(() => expect(subListFn).toHaveBeenCalled());\n expect(subListFn).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: [staleEmp],\n status: \"loaded\",\n }),\n );\n subListFn.mockClear();\n\n cache.invalidateObjectType(Employee);\n\n await vi.waitFor(() => expect(subListFn).toHaveBeenCalled());\n expect(subListFn).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: [staleEmp],\n status: \"loading\",\n }),\n );\n subListFn.mockClear();\n\n await vi.waitFor(() => expect(subListFn).toHaveBeenCalled());\n expect(subListFn).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: employeesAsServerReturns,\n }),\n );\n subListFn.mockClear();\n\n await vi.waitFor(() => expect(subFn).toHaveBeenCalled());\n\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n status: \"loaded\",\n object: emp,\n }),\n );\n });\n });\n\n describe(\".observeObject (force)\", () => {\n const subFn1 = mockSingleSubCallback();\n const subFn2 = mockSingleSubCallback();\n\n beforeEach(async () => {\n subFn1.mockClear();\n subFn2.mockClear();\n });\n\n const likeEmployee50030 = expect.objectContaining({\n $primaryKey: 50030,\n fullName: \"John Doe\",\n });\n\n it(\"fetches and updates twice\", async () => {\n defer(\n cache.observeObject(Employee, 50030, { mode: \"force\" }, subFn1),\n );\n expect(subFn1).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n );\n\n subFn1.mockClear();\n\n await vi.waitFor(() => expect(subFn1).toHaveBeenCalled());\n expect(subFn1).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: likeEmployee50030,\n isOptimistic: false,\n }),\n );\n\n const firstLoad = subFn1.mock.lastCall?.[0]!;\n\n subFn1.mockClear();\n\n defer(\n cache.observeObject(Employee, 50030, { mode: \"force\" }, subFn2),\n );\n expect(subFn1).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({ status: \"loading\" }),\n );\n subFn1.mockClear();\n\n // should be the earlier results\n expect(subFn2).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({ status: \"loading\" }),\n );\n subFn2.mockClear();\n\n // both will be updated\n for (const s of [subFn1, subFn2]) {\n // wait for the result to come in\n await vi.waitFor(() => expect(s).toHaveBeenCalled());\n\n expect(s).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n ...firstLoad,\n lastUpdated: expect.toBeGreaterThan(firstLoad.lastUpdated),\n }),\n );\n\n s.mockClear();\n }\n });\n });\n\n describe(\".observeObject (offline)\", () => {\n const subFn = mockSingleSubCallback();\n let sub: Unsubscribable;\n\n beforeEach(() => {\n subFn.mockClear();\n\n sub = defer(\n cache.observeObject(Employee, 50030, { mode: \"offline\" }, subFn),\n );\n\n expect(subFn).toHaveBeenCalledExactlyOnceWith(objectPayloadContaining({\n status: \"init\",\n object: undefined,\n }));\n subFn.mockClear();\n });\n\n it(\"does basic observation and unsubscribe\", async () => {\n const emp = employeesAsServerReturns[0];\n\n // force an update\n cache.updateObject(Employee, emp);\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({ object: emp }),\n );\n subFn.mockClear();\n\n // force again\n cache.updateObject(Employee, emp.$clone({ fullName: \"new name\" }));\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: expect.objectContaining({ fullName: \"new name\" }),\n }),\n );\n subFn.mockClear();\n\n sub.unsubscribe();\n\n // force again but no subscription update\n cache.updateObject(\n Employee,\n emp.$clone({ fullName: \"new name 2\" }),\n );\n expect(subFn).not.toHaveBeenCalled();\n });\n\n it(\"observes with list update\", async () => {\n const emp = employeesAsServerReturns[0];\n\n // force an update\n cache.updateObject(Employee, emp.$clone({ fullName: \"not the name\" }));\n expect(subFn).toHaveBeenCalledTimes(1);\n\n cache.updateList(Employee, {}, employeesAsServerReturns);\n expect(subFn).toHaveBeenCalledTimes(2);\n\n expect(subFn.mock.calls[1][0]).toEqual(\n objectPayloadContaining({ object: emp }),\n );\n });\n });\n\n describe(\".observeList\", () => {\n const listSub1 = mockListSubCallback();\n\n beforeEach(() => {\n vi.useFakeTimers({});\n listSub1.mockReset();\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n describe(\"mode=force\", () => {\n it(\"initial load\", async () => {\n defer(\n cache.observeList(Employee, {}, { mode: \"force\" }, listSub1),\n );\n vitest.runOnlyPendingTimers();\n await vi.waitFor(() => expect(listSub1).toHaveBeenCalled());\n\n expect(listSub1).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n status: \"loading\",\n resolvedList: [],\n }),\n );\n listSub1.mockClear();\n\n await vi.waitFor(() => expect(listSub1).toHaveBeenCalled());\n\n expect(listSub1).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: employeesAsServerReturns,\n status: \"loaded\",\n }),\n );\n });\n\n it(\"subsequent load\", async () => {\n // Pre-seed with data the server doesn't return\n cache.updateList(Employee, {}, mutatedEmployees);\n\n defer(\n cache.observeList(Employee, {}, { mode: \"force\" }, listSub1),\n );\n\n await vi.waitFor(() => expect(listSub1).toHaveBeenCalled());\n\n expect(listSub1).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: mutatedEmployees,\n status: \"loading\",\n }),\n );\n const firstLoad = listSub1.mock.calls[0][0]!;\n listSub1.mockClear();\n\n await vi.waitFor(() => expect(listSub1).toHaveBeenCalled());\n expect(listSub1).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: employeesAsServerReturns,\n status: \"loaded\",\n lastUpdated: expect.toBeGreaterThan(\n firstLoad.lastUpdated,\n ),\n }),\n );\n listSub1.mockClear();\n });\n });\n\n describe(\"mode = offline\", () => {\n it(\"updates with list updates\", async () => {\n defer(\n cache.observeList(Employee, {}, { mode: \"offline\" }, listSub1),\n );\n expect(listSub1).toHaveBeenCalledTimes(0);\n\n cache.updateList(Employee, {}, employeesAsServerReturns);\n vitest.runOnlyPendingTimers();\n\n expect(listSub1).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({ resolvedList: employeesAsServerReturns }),\n );\n listSub1.mockClear();\n\n // list is just now one object\n cache.updateList(Employee, {}, [employeesAsServerReturns[0]]);\n vitest.runOnlyPendingTimers();\n\n expect(listSub1).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: [employeesAsServerReturns[0]],\n }),\n );\n });\n\n it(\"updates with different list updates\", async () => {\n defer(\n cache.observeList(Employee, {}, { mode: \"offline\" }, listSub1),\n );\n\n expect(listSub1).toHaveBeenCalledTimes(0);\n\n cache.updateList(Employee, {}, employeesAsServerReturns);\n vitest.runOnlyPendingTimers();\n\n expect(listSub1).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({ resolvedList: employeesAsServerReturns }),\n );\n listSub1.mockClear();\n\n // new where === different list\n cache.updateList(\n Employee,\n { employeeId: { $gt: 0 } },\n mutatedEmployees,\n );\n vitest.runOnlyPendingTimers();\n\n // original list updates still\n expect(listSub1).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: mutatedEmployees,\n }),\n );\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.observeList(\n Employee,\n {},\n { mode: \"force\", pageSize: 1 },\n listSub,\n ));\n\n expect(listSub).not.toHaveBeenCalled();\n await vi.waitFor(() => expect(listSub).toHaveBeenCalled());\n\n expect(listSub).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n status: \"loading\",\n }),\n );\n listSub.mockClear();\n await vi.waitFor(() => expect(listSub).toHaveBeenCalled());\n\n expect(listSub).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: employeesAsServerReturns.slice(0, 1),\n status: \"loaded\",\n }),\n );\n const { fetchMore } = listSub.mock.calls[0][0]!;\n listSub.mockClear();\n\n void fetchMore();\n\n await vi.waitFor(() => expect(listSub).toHaveBeenCalledTimes(1));\n expect(listSub).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n resolvedList: employeesAsServerReturns.slice(0, 1),\n status: \"loading\",\n }),\n );\n listSub.mockClear();\n\n await vi.waitFor(() => expect(listSub).toHaveBeenCalledTimes(1));\n expect(listSub).toHaveBeenCalledWith(\n listPayloadContaining({\n resolvedList: employeesAsServerReturns.slice(0, 2),\n status: \"loaded\",\n }),\n );\n });\n });\n });\n\n describe(\"with mock client\", () => {\n let client: Mock<Client> & Client;\n let mockClient: MockClientHelper;\n let cache: Store;\n\n let employeesAsServerReturns: Osdk.Instance<Employee>[];\n let mutatedEmployees: Osdk.Instance<Employee>[];\n\n beforeEach(async () => {\n mockClient = createClientMockHelper();\n client = mockClient.client;\n cache = new Store(client);\n });\n\n describe(\"actions\", () => {\n it(\"properly invalidates objects\", async () => {\n // after the below `observeObject`, the cache will need to load from the server\n mockClient.mockFetchOneOnce().resolve({\n $apiName: \"Todo\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n defer(cache.observeObject(Todo, 0, {}, 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 mockClient.mockApplyActionOnce().resolve({\n addedObjects: [{\n objectType: \"Todo\",\n primaryKey: 0,\n }],\n });\n\n // after we apply the action, the object is invalidated and gets re-requested\n\n mockClient.mockFetchOneOnce<Todo>().resolve({\n $apiName: \"Todo\",\n text: \"hello there kind sir\",\n });\n\n const actionPromise = cache.applyAction(createOffice, {\n officeId: \"whatever\",\n });\n\n await actionPromise;\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 = {\n $apiName: \"Todo\",\n $objectType: \"Todo\",\n $primaryKey: 0,\n $title: \"does not matter\",\n } as Osdk.Instance<Todo>;\n\n // after the below `observeObject`, the cache will need to load from the server\n mockClient.mockFetchOneOnce<Todo>()\n .resolve(fauxObject);\n\n const todoSubFn = mockSingleSubCallback();\n defer(\n cache.observeObject(Todo, 0, {}, 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 // at this point we have an observation properly set up\n const applyActionResult = mockClient.mockApplyActionOnce();\n\n const actionPromise = cache.applyAction(createOffice, {\n officeId: \"whatever\",\n }, {\n optimisticUpdate: (ctx) => {\n ctx.updateObject({ ...fauxObject, someValue: \"optimistic\" });\n },\n });\n\n await waitForCall(todoSubFn, 1);\n expect(todoSubFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: {\n ...fauxObject,\n someValue: \"optimistic\",\n },\n status: \"loading\",\n isOptimistic: true,\n }),\n );\n todoSubFn.mockClear();\n\n // let the action error out\n applyActionResult.reject(\"an error thrown\");\n await expect(actionPromise).rejects.toThrow(\"an error thrown\");\n\n // back to the original object\n await waitForCall(todoSubFn, 1);\n expect(todoSubFn).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n );\n });\n });\n });\n\n describe(\"layers\", () => {\n it(\"properly remove\", () => {\n const store = new Store({} as any);\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>));\n\n const cacheKeys = baseObjects.map((obj) =>\n store.getCacheKey(\"object\", \"Employee\", obj.$primaryKey)\n );\n\n // set the truth\n for (const obj of baseObjects) {\n store.updateObject(\"Employee\", obj);\n }\n\n // expect the truth\n for (const obj of baseObjects) {\n expect(store.getObject(\"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(store.getObject(\"Employee\", baseObjects[i].$primaryKey)).toEqual(\n expect.objectContaining({\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n }),\n );\n }\n\n // remove the first layer\n store.removeLayer(layerIds[0]);\n\n // should have truth object 1 and optimistic object 2\n expect(store.getObject(\"Employee\", 1)).toEqual(\n expect.objectContaining({ $title: \"truth 1\" }),\n );\n expect(store.getObject(\"Employee\", 2)).toEqual(\n expect.objectContaining({ $title: \"optimistic 2\" }),\n );\n\n // remove the second layer\n store.removeLayer(layerIds[1]);\n\n // should have truth objects\n for (const obj of baseObjects) {\n expect(store.getObject(\"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Store.test.js","names":["editTodo","Employee","FooInterface","Todo","ActionTypeBuilder","FauxFoundry","ontologies","startNodeApiServer","stubData","chalk","invariant","afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","vitest","ActionValidationError","createClient","TestLogger","createOptimisticId","runOptimisticJob","invalidateList","Store","applyCustomMatchers","createClientMockHelper","createDefer","expectNoMoreCalls","expectSingleListCallAndClear","expectSingleObjectCallAndClear","getObject","mockListSubCallback","mockSingleSubCallback","objectPayloadContaining","updateList","updateObject","waitForCall","JOHN_DOE_ID","defer","logger","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","registerObject","employeeId","$apiName","fullName","client","cache","employeesAsServerReturns","mutatedEmployees","testSetup","fetchPage","data","$clone","slice","apiServer","close","emp","cacheKey","getCacheKey","$primaryKey","getValue","value","toBeUndefined","result","toBe","toEqual","updatedEmpFromCache","not","subFn","observeObject","mode","optimisticId","removeLayer","type","where","orderBy","empSubFn","listSubFn","observeList","optimisticEmployee","next","toHaveBeenCalled","isOptimistic","truthUpdatedEmployee","staleEmp","invalidateObject","useFakeTimers","useRealTimers","subListFn","invalidateListPromise","pInvalidateComplete","invalidateObjectType","subFn1","subFn2","complete","mockClear","error","likeEmployee50030","objectContaining","toHaveBeenCalledExactlyOnceWith","firstLoad","mock","lastCall","toBeGreaterThan","sub","find","unsubscribe","toHaveBeenCalledTimes","calls","listSub1","ifaceSub","mocked","mockReset","runOnlyPendingTimers","$gt","listSub","pageSize","fetchMore","store","resetHandlers","aBadPropertyThatDoesNotExist","a","expectLoadingAndLoaded","loading","loaded","clear","text","todoSubFn","applyAction","fauxObject","process","env","NODE_ENV","optimisticUpdate","ctx","rejects","toThrow","nextPk","fauxObjectA","fauxObjectB","fauxObjectC","Promise","all","map","fetchOne","noWhereNoOrderBy","noWhereOrderByText","subListUnordered","subListOrdered","optimisticallyMutatedA","pkForOptimistic","optimisticallyCreatedObjectD","removeOptimisticResult","createObject","actionDefinition","crazyAction","crazyActionTypeV2","addParameter","build","batch","idForD","addObject","$title","pActionResult","modifiedObjectA","pkForD","addedObjects","primaryKey","createdObjectD","clientHelper","baseObjects","i","$objectType","cacheKeys","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 Todo,\n} from \"@osdk/client.test.ontology\";\nimport type { SetupServer } from \"@osdk/shared.test\";\nimport {\n ActionTypeBuilder,\n FauxFoundry,\n ontologies,\n startNodeApiServer,\n stubData,\n} from \"@osdk/shared.test\";\nimport chalk from \"chalk\";\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 vitest,\n} from \"vitest\";\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 {\n ObserveListOptions,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { createOptimisticId } from \"./OptimisticId.js\";\nimport { runOptimisticJob } from \"./OptimisticJob.js\";\nimport { invalidateList, Store } from \"./Store.js\";\nimport {\n applyCustomMatchers,\n createClientMockHelper,\n createDefer,\n expectNoMoreCalls,\n expectSingleListCallAndClear,\n expectSingleObjectCallAndClear,\n getObject,\n mockListSubCallback,\n mockSingleSubCallback,\n objectPayloadContaining,\n updateList,\n updateObject,\n waitForCall,\n} from \"./testUtils.js\";\n\nconst JOHN_DOE_ID = 50030;\n\nconst defer = createDefer();\n\nconst logger = new TestLogger();\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 dataStore.registerObject(Employee, {\n employeeId: 1,\n });\n\n dataStore.registerObject(Employee, {\n employeeId: 2,\n });\n\n dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 3,\n });\n\n dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 4,\n });\n\n dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n}\n\ndescribe(Store, () => {\n describe(\"with mock server\", () => {\n let client: Client;\n let cache: Store;\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\n return () => {\n cache = undefined!;\n };\n });\n\n it(\"basic single object works\", async () => {\n const emp = employeesAsServerReturns[0];\n\n const cacheKey = cache.getCacheKey<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.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\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.removeLayer(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.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n empSubFn,\n ),\n );\n\n expectSingleObjectCallAndClear(empSubFn, emp, \"loaded\");\n\n const listSubFn = mockListSubCallback();\n defer(\n cache.observeList({\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.removeLayer(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.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\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.removeLayer(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, truthUpdatedEmployee);\n expectNoMoreCalls(subFn);\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.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\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 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.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.observeList({\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.observeObject(\n Employee,\n emp.$primaryKey,\n { mode: \"offline\" },\n subFn,\n ),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.observeList({\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 await waitForCall(subFn, 1);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\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.observeObject(Employee, JOHN_DOE_ID, { mode: \"force\" }, 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.observeObject(Employee, JOHN_DOE_ID, { mode: \"force\" }, 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.observeObject(\n Employee,\n JOHN_DOE_ID,\n { mode: \"offline\" },\n subFn,\n ),\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(\".observeList\", () => {\n const listSub1 = mockListSubCallback();\n const ifaceSub = mockListSubCallback();\n\n beforeEach(() => {\n vi.useFakeTimers({});\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 afterEach(() => {\n vi.useRealTimers();\n });\n\n describe(\"mode=force\", () => {\n it(\"initial load\", async () => {\n defer(\n cache.observeList({\n type: Employee,\n\n orderBy: {},\n mode: \"force\",\n }, listSub1),\n );\n\n defer(\n cache.observeList({\n type: FooInterface,\n\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n\n vitest.runOnlyPendingTimers();\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.observeList({\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.observeList({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n expect(listSub1.next).toHaveBeenCalledTimes(0);\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n vitest.runOnlyPendingTimers();\n\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // list is just now one object\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n employeesAsServerReturns[0],\n ]);\n vitest.runOnlyPendingTimers();\n\n expectSingleListCallAndClear(listSub1, [employeesAsServerReturns[0]]);\n });\n\n it(\"updates with different list updates\", async () => {\n defer(\n cache.observeList({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n expect(listSub1.next).toHaveBeenCalledTimes(0);\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n vitest.runOnlyPendingTimers();\n\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 vitest.runOnlyPendingTimers();\n\n // original list updates still\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.observeList(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n expect(listSub.next).not.toHaveBeenCalled();\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 });\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 store.observeList({\n type: Employee,\n where: { aBadPropertyThatDoesNotExist: \"aBadValue\" } as any,\n orderBy: {},\n }, sub);\n\n await waitForCall(sub.error, 1);\n\n expect(sub.error).toHaveBeenCalled();\n expect(sub.next).not.toHaveBeenCalled();\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.observeObject(Employee, 0, {}, a));\n defer(store.observeObject(Employee, 1, {}, 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.observeObject(Todo, 0, {}, 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.observeObject(Todo, 0, {}, 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.getCacheKey<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 const subListUnordered = mockListSubCallback();\n const subListOrdered = mockListSubCallback();\n\n beforeEach(() => {\n defer(\n store.observeList({\n ...noWhereNoOrderBy,\n mode: \"offline\",\n }, subListUnordered),\n );\n expect(subListUnordered.next).toHaveBeenCalledTimes(0);\n\n defer(\n store.observeList({\n ...noWhereOrderByText,\n mode: \"offline\",\n }, subListOrdered),\n );\n expect(subListOrdered.next).toHaveBeenCalledTimes(0);\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 } = new 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\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>));\n\n const cacheKeys = baseObjects.map((obj) =>\n store.getCacheKey(\"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.removeLayer(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.removeLayer(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"],"mappings":"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","ignoreList":[]}
@@ -18,6 +18,14 @@ import { Trie } from "@wry/trie";
18
18
  import deepEqual from "fast-deep-equal";
19
19
  import invariant from "tiny-invariant";
20
20
  export class WhereClauseCanonicalizer {
21
+ /**
22
+ * This is a shortcut cache for any WhereClause's that we have
23
+ * seen and already canonicalized. The theory behind this
24
+ * is that well behaving React applications will either `useMemo`
25
+ * their where clause, or store it in state or pass it through as
26
+ * props such that we are likely to get the same WhereClause
27
+ * object multiple times and we can skip unnecessary work.
28
+ */
21
29
  #cache = new WeakMap();
22
30
 
23
31
  /**
@@ -38,14 +46,14 @@ export class WhereClauseCanonicalizer {
38
46
  return this.#cache.get(where);
39
47
  }
40
48
  const keysSet = new Set();
41
- const tmpCanon = this.#toCanon(where, keysSet);
49
+ const calculatedCanon = this.#toCanon(where, keysSet);
42
50
  const cacheKey = this.#trie.lookupArray(Array.from(keysSet).sort());
43
51
  const lookupEntry = this.#existingOptions.get(cacheKey) ?? {
44
52
  options: []
45
53
  };
46
54
  this.#existingOptions.set(cacheKey, lookupEntry);
47
- const canon = lookupEntry.options.find(ref => deepEqual(ref.deref(), tmpCanon))?.deref() ?? tmpCanon;
48
- if (canon === tmpCanon) {
55
+ const canon = lookupEntry.options.find(ref => deepEqual(ref.deref(), calculatedCanon))?.deref() ?? calculatedCanon;
56
+ if (canon === calculatedCanon) {
49
57
  // This means no existing options were found
50
58
  lookupEntry.options.push(new WeakRef(canon));
51
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WhereClauseCanonicalizer.js","names":["Trie","deepEqual","invariant","WhereClauseCanonicalizer","cache","WeakMap","trie","existingOptions","Map","canonicalize","where","has","get","keysSet","Set","tmpCanon","toCanon","cacheKey","lookupArray","Array","from","sort","lookupEntry","options","set","canon","find","ref","deref","push","WeakRef","#toCanon","process","env","NODE_ENV","isArray","$and","Object","keys","length","fromEntries","entries","a","b","localeCompare","map","k","v","add","x"],"sources":["WhereClauseCanonicalizer.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 { ObjectOrInterfaceDefinition, WhereClause } from \"@osdk/api\";\nimport { Trie } from \"@wry/trie\";\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nimport type { Canonical } from \"./Canonical.js\";\n\nexport class WhereClauseCanonicalizer {\n #cache = new WeakMap<WhereClause<any>, Canonical<WhereClause<any>>>();\n\n /**\n * This is a trie that stores the sorted collapsed keys of a where clause to\n * the cache key for canonicalized options. In theory this keeps the number of\n * deepEqual comparisons down to a minimum but its probably overkill.\n */\n #trie = new Trie<object>();\n\n /**\n * This is a cache from the cacheKey provided by `this.#trie` to the potential\n * canonicalized options.\n */\n #existingOptions: Map<object, {\n options: WeakRef<Canonical<WhereClause<any>>>[];\n }> = new Map();\n\n public canonicalize<T extends ObjectOrInterfaceDefinition>(\n where: WhereClause<T>,\n ): Canonical<WhereClause<T>> {\n // fastest shortcut\n if (this.#cache.has(where)) {\n return this.#cache.get(where)! as Canonical<WhereClause<T>>;\n }\n\n const keysSet = new Set<string>();\n const tmpCanon = this.#toCanon(where, keysSet);\n const cacheKey = this.#trie.lookupArray(Array.from(keysSet).sort());\n const lookupEntry = this.#existingOptions.get(cacheKey)\n ?? { options: [] as WeakRef<Canonical<WhereClause<T>>>[] };\n this.#existingOptions.set(cacheKey, lookupEntry);\n\n const canon =\n lookupEntry.options.find((ref) => deepEqual(ref.deref(), tmpCanon))\n ?.deref()\n ?? tmpCanon;\n\n if (canon === tmpCanon) {\n // This means no existing options were found\n lookupEntry.options.push(new WeakRef(canon));\n }\n\n this.#cache.set(where, canon);\n return canon as Canonical<WhereClause<T>>;\n }\n\n #toCanon = <T extends ObjectOrInterfaceDefinition>(\n where: WhereClause<T>,\n set: Set<string> = new Set<string>(),\n ): Canonical<WhereClause<T>> => {\n if (\"$and\" in where) {\n if (process.env.NODE_ENV !== \"production\") {\n invariant(Array.isArray(where.$and), \"expected $and to be an array\");\n invariant(\n Object.keys(where).length === 1,\n \"expected only $and to be present\",\n );\n }\n if ((where as { $and: WhereClause<T>[] }).$and.length === 0) {\n // empty $and is a no-op\n return {} as Canonical<WhereClause<T>>;\n }\n if ((where as { $and: WhereClause<T>[] }).$and.length === 1) {\n return this.#toCanon(\n (where as { $and: WhereClause<T>[] }).$and[0],\n set,\n );\n }\n }\n // This is incomplete for all the cases possible but it gets us started\n\n return Object.fromEntries(\n Object.entries(where)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => {\n set.add(k);\n if (k === \"$and\" || k === \"$or\") {\n return [k, (v as Array<any>).map(x => this.#toCanon(x, set))];\n }\n if (k !== \"$not\" && typeof v === \"object\" && \"$eq\" in v) {\n return [k, v[\"$eq\"]];\n }\n return [k, v];\n }),\n ) as Canonical<WhereClause<T>>;\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"WhereClauseCanonicalizer.js","names":["Trie","deepEqual","invariant","WhereClauseCanonicalizer","cache","WeakMap","trie","existingOptions","Map","canonicalize","where","has","get","keysSet","Set","calculatedCanon","toCanon","cacheKey","lookupArray","Array","from","sort","lookupEntry","options","set","canon","find","ref","deref","push","WeakRef","#toCanon","process","env","NODE_ENV","isArray","$and","Object","keys","length","fromEntries","entries","a","b","localeCompare","map","k","v","add","x"],"sources":["WhereClauseCanonicalizer.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 { ObjectOrInterfaceDefinition, WhereClause } from \"@osdk/api\";\nimport { Trie } from \"@wry/trie\";\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nimport type { Canonical } from \"./Canonical.js\";\nimport type { SimpleWhereClause } from \"./SimpleWhereClause.js\";\n\nexport class WhereClauseCanonicalizer {\n /**\n * This is a shortcut cache for any WhereClause's that we have\n * seen and already canonicalized. The theory behind this\n * is that well behaving React applications will either `useMemo`\n * their where clause, or store it in state or pass it through as\n * props such that we are likely to get the same WhereClause\n * object multiple times and we can skip unnecessary work.\n */\n #cache = new WeakMap<\n WhereClause<any> | SimpleWhereClause,\n Canonical<SimpleWhereClause>\n >();\n\n /**\n * This is a trie that stores the sorted collapsed keys of a where clause to\n * the cache key for canonicalized options. In theory this keeps the number of\n * deepEqual comparisons down to a minimum but its probably overkill.\n */\n #trie = new Trie<object>();\n\n /**\n * This is a cache from the cacheKey provided by `this.#trie` to the potential\n * canonicalized options.\n */\n #existingOptions: Map<object, {\n options: WeakRef<Canonical<SimpleWhereClause>>[];\n }> = new Map();\n\n public canonicalize<T extends ObjectOrInterfaceDefinition>(\n where: WhereClause<T> | SimpleWhereClause,\n ): Canonical<SimpleWhereClause> {\n // fastest shortcut\n if (this.#cache.has(where)) {\n return this.#cache.get(where)!;\n }\n\n const keysSet = new Set<string>();\n const calculatedCanon = this.#toCanon(where, keysSet);\n const cacheKey = this.#trie.lookupArray(Array.from(keysSet).sort());\n const lookupEntry = this.#existingOptions.get(cacheKey)\n ?? { options: [] as WeakRef<Canonical<SimpleWhereClause>>[] };\n this.#existingOptions.set(cacheKey, lookupEntry);\n\n const canon =\n lookupEntry.options.find((ref) => deepEqual(ref.deref(), calculatedCanon))\n ?.deref()\n ?? calculatedCanon;\n\n if (canon === calculatedCanon) {\n // This means no existing options were found\n lookupEntry.options.push(new WeakRef(canon));\n }\n\n this.#cache.set(where, canon);\n return canon;\n }\n\n #toCanon = <T extends ObjectOrInterfaceDefinition>(\n where: WhereClause<T> | SimpleWhereClause,\n set: Set<string> = new Set<string>(),\n ): Canonical<SimpleWhereClause> => {\n if (\"$and\" in where) {\n if (process.env.NODE_ENV !== \"production\") {\n invariant(Array.isArray(where.$and), \"expected $and to be an array\");\n invariant(\n Object.keys(where).length === 1,\n \"expected only $and to be present\",\n );\n }\n if ((where as { $and: SimpleWhereClause[] }).$and.length === 0) {\n // empty $and is a no-op\n return {} as Canonical<SimpleWhereClause>;\n }\n if ((where as { $and: SimpleWhereClause[] }).$and.length === 1) {\n return this.#toCanon(\n (where as { $and: SimpleWhereClause[] }).$and[0],\n set,\n );\n }\n }\n // This is incomplete for all the cases possible but it gets us started\n\n return Object.fromEntries(\n Object.entries(where)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => {\n set.add(k);\n if (k === \"$and\" || k === \"$or\") {\n return [k, (v as Array<any>).map(x => this.#toCanon(x, set))];\n }\n if (k !== \"$not\" && typeof v === \"object\" && \"$eq\" in v) {\n return [k, v[\"$eq\"]];\n }\n return [k, v];\n }),\n ) as Canonical<SimpleWhereClause>;\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -74,12 +74,10 @@ export function objectSortaMatchesWhereClause(o, whereClause, strict) {
74
74
  case "$ne":
75
75
  return realValue !== expected;
76
76
  case "$in":
77
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
78
77
  return expected.$in.includes(realValue);
79
78
  case "$isNull":
80
79
  return realValue == null;
81
80
  case "$startsWith":
82
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
83
81
  return realValue.startsWith(expected);
84
82
  case "$contains":
85
83
  case "$containsAllTerms":
@@ -99,8 +97,6 @@ export function objectSortaMatchesWhereClause(o, whereClause, strict) {
99
97
  return !strict;
100
98
  }
101
99
  }
102
-
103
- // console.log("AAAA", key in o, o[key], filter);
104
100
  if (key in o) {
105
101
  if (o[key] === filter) {
106
102
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"objectMatchesWhereClause.js","names":["deepEqual","invariant","is$and","whereClause","process","env","NODE_ENV","Array","isArray","$and","Object","keys","length","is$or","$or","is$not","objectSortaMatchesWhereClause","o","strict","every","w","some","$not","entries","key","filter","realValue","f","expected","$in","includes","startsWith"],"sources":["objectMatchesWhereClause.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ObjectTypeDefinition,\n Osdk,\n PossibleWhereClauseFilters,\n WhereClause,\n} from \"@osdk/api\";\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\n\nfunction is$and(\n whereClause: WhereClause<ObjectTypeDefinition>,\n): whereClause is { $and: WhereClause<ObjectTypeDefinition>[] } {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$and\" in whereClause) {\n invariant(\n Array.isArray(whereClause.$and),\n \"expected $and to be an array\",\n );\n invariant(\n Object.keys(whereClause).length === 1,\n \"expected only $and to be present\",\n );\n }\n }\n return \"$and\" in whereClause;\n}\n\nfunction is$or(\n whereClause: WhereClause<ObjectTypeDefinition>,\n): whereClause is { $or: WhereClause<ObjectTypeDefinition>[] } {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$or\" in whereClause) {\n invariant(\n Array.isArray(whereClause.$or),\n \"expected $or to be an array\",\n );\n invariant(\n Object.keys(whereClause).length === 1,\n \"expected only $or to be present\",\n );\n }\n }\n return \"$or\" in whereClause;\n}\n\nfunction is$not(\n whereClause: WhereClause<ObjectTypeDefinition>,\n): whereClause is { $not: WhereClause<ObjectTypeDefinition> } {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$not\" in whereClause) {\n invariant(\n Object.keys(whereClause).length === 1,\n \"expected only $not to be present\",\n );\n }\n }\n\n return \"$not\" in whereClause;\n}\n\nexport function objectSortaMatchesWhereClause(\n o: Osdk.Instance<ObjectTypeDefinition>,\n whereClause: WhereClause<ObjectTypeDefinition>,\n strict: boolean,\n): boolean {\n if (deepEqual({}, whereClause)) {\n return true;\n }\n\n if (is$and(whereClause)) {\n return whereClause.$and.every(w =>\n objectSortaMatchesWhereClause(o, w, strict)\n );\n }\n if (is$or(whereClause)) {\n return whereClause.$or.some(w =>\n objectSortaMatchesWhereClause(o, w, strict)\n );\n }\n if (is$not(whereClause)) {\n return !objectSortaMatchesWhereClause(o, whereClause.$not, strict);\n }\n\n return Object.entries(whereClause).every(([key, filter]) => {\n if (typeof filter === \"object\") {\n const realValue = o[key as keyof typeof o];\n const [f] = Object.keys(filter) as Array<PossibleWhereClauseFilters>;\n const expected = (filter as any)[f];\n switch (f) {\n case \"$eq\":\n return realValue === expected;\n case \"$gt\":\n return realValue > expected;\n case \"$lt\":\n return realValue < expected;\n case \"$gte\":\n return realValue >= expected;\n case \"$lte\":\n return realValue <= expected;\n case \"$ne\":\n return realValue !== expected;\n case \"$in\":\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return expected.$in.includes(realValue);\n case \"$isNull\":\n return realValue == null;\n case \"$startsWith\":\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return realValue.startsWith(\n expected,\n );\n case \"$contains\":\n case \"$containsAllTerms\":\n case \"$containsAllTermsInOrder\":\n case \"$containsAnyTerm\":\n case \"$intersects\":\n case \"$within\":\n // for these we will strictly say no and loosely say yes\n // so that they don't change things now but may if reloaded\n return !strict;\n\n default:\n // same thing here as the above cases but we will catch the\n // exhaustive check in dev\n if (process.env.NODE_ENV !== \"production\") {\n const exhaustive: never = f;\n invariant(false, `Unknown where filter ${f}`);\n }\n return !strict;\n }\n }\n\n // console.log(\"AAAA\", key in o, o[key], filter);\n if (key in o) {\n if (o[key as keyof typeof o] === filter) {\n return true;\n }\n }\n return false;\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"objectMatchesWhereClause.js","names":["deepEqual","invariant","is$and","whereClause","process","env","NODE_ENV","Array","isArray","$and","Object","keys","length","is$or","$or","is$not","objectSortaMatchesWhereClause","o","strict","every","w","some","$not","entries","key","filter","realValue","f","expected","$in","includes","startsWith"],"sources":["objectMatchesWhereClause.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 { PossibleWhereClauseFilters } from \"@osdk/api\";\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nimport type { InterfaceHolder } from \"../../object/convertWireToOsdkObjects/InterfaceHolder.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { SimpleWhereClause } from \"./SimpleWhereClause.js\";\n\nfunction is$and(\n whereClause: SimpleWhereClause,\n): whereClause is { $and: SimpleWhereClause[] } {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$and\" in whereClause) {\n invariant(\n Array.isArray(whereClause.$and),\n \"expected $and to be an array\",\n );\n invariant(\n Object.keys(whereClause).length === 1,\n \"expected only $and to be present\",\n );\n }\n }\n return \"$and\" in whereClause;\n}\n\nfunction is$or(\n whereClause: SimpleWhereClause,\n): whereClause is { $or: SimpleWhereClause[] } {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$or\" in whereClause) {\n invariant(\n Array.isArray(whereClause.$or),\n \"expected $or to be an array\",\n );\n invariant(\n Object.keys(whereClause).length === 1,\n \"expected only $or to be present\",\n );\n }\n }\n return \"$or\" in whereClause;\n}\n\nfunction is$not(\n whereClause: SimpleWhereClause,\n): whereClause is { $not: SimpleWhereClause } {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$not\" in whereClause) {\n invariant(\n Object.keys(whereClause).length === 1,\n \"expected only $not to be present\",\n );\n }\n }\n\n return \"$not\" in whereClause;\n}\n\nexport function objectSortaMatchesWhereClause(\n o: ObjectHolder | InterfaceHolder,\n whereClause: SimpleWhereClause,\n strict: boolean,\n): boolean {\n if (deepEqual({}, whereClause)) {\n return true;\n }\n\n if (is$and(whereClause)) {\n return whereClause.$and.every(w =>\n objectSortaMatchesWhereClause(o, w, strict)\n );\n }\n if (is$or(whereClause)) {\n return whereClause.$or.some(w =>\n objectSortaMatchesWhereClause(o, w, strict)\n );\n }\n if (is$not(whereClause)) {\n return !objectSortaMatchesWhereClause(o, whereClause.$not, strict);\n }\n\n return Object.entries(whereClause).every(([key, filter]) => {\n if (typeof filter === \"object\") {\n const realValue: any = o[key as keyof typeof o];\n const [f] = Object.keys(filter) as Array<PossibleWhereClauseFilters>;\n const expected = (filter as any)[f];\n switch (f) {\n case \"$eq\":\n return realValue === expected;\n case \"$gt\":\n return realValue > expected;\n case \"$lt\":\n return realValue < expected;\n case \"$gte\":\n return realValue >= expected;\n case \"$lte\":\n return realValue <= expected;\n case \"$ne\":\n return realValue !== expected;\n case \"$in\":\n return expected.$in.includes(realValue);\n case \"$isNull\":\n return realValue == null;\n case \"$startsWith\":\n return realValue.startsWith(\n expected,\n );\n case \"$contains\":\n case \"$containsAllTerms\":\n case \"$containsAllTermsInOrder\":\n case \"$containsAnyTerm\":\n case \"$intersects\":\n case \"$within\":\n // for these we will strictly say no and loosely say yes\n // so that they don't change things now but may if reloaded\n return !strict;\n\n default:\n // same thing here as the above cases but we will catch the\n // exhaustive check in dev\n if (process.env.NODE_ENV !== \"production\") {\n const exhaustive: never = f;\n invariant(false, `Unknown where filter ${f}`);\n }\n return !strict;\n }\n }\n\n if (key in o) {\n if (o[key as keyof typeof o] === filter) {\n return true;\n }\n }\n return false;\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"objectMatchesWhereClause.test.js","names":["describe","expect","expectTypeOf","it","objectSortaMatchesWhereClause","fauxObject","attachment","undefined","attachment2","attachmentArray","boolean","booleanArray","byte","byteArray","date","dateArray","dateTime","Date","toISOString","dateTimeArray","decimal","decimalArray","double","doubleArray","float","floatArray","geoPoint","type","coordinates","geoPointArray","geoShape","geoShapeArray","id","integer","integerArray","long","longArray","mediaReference","short","shortArray","string","stringArray","objects","whereClauses","booleanTrue","stringStartsWithHi","$startsWith","stringStartsWithBye","mediaReferenceIsNull","$isNull","mediaReferenceNotIsNull","$not","geopointIntersects","$intersects","$bbox","empty","stringStartsWithHiAndBye","$and","stringStartsWithHiOrBye","$or","whereStrictAndNot","whereStrictOrNot","push","cases","toEqualTypeOf","each","instanceName","whereClauseName","strictExpected","nonStrictExpected","instance","whereClause","toBeDefined","toBe"],"sources":["objectMatchesWhereClause.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, WhereClause } from \"@osdk/api\";\nimport type { objectTypeWithAllPropertyTypes } from \"@osdk/client.test.ontology\";\nimport { describe, expect, expectTypeOf, it } from \"vitest\";\nimport { objectSortaMatchesWhereClause } from \"./objectMatchesWhereClause.js\";\n\nconst fauxObject: Osdk.Instance<objectTypeWithAllPropertyTypes> = {\n attachment: undefined,\n attachment2: undefined,\n attachmentArray: [],\n boolean: true,\n booleanArray: [],\n byte: 5,\n byteArray: [],\n date: \"2024-01-01\",\n dateArray: [],\n dateTime: new Date().toISOString(),\n dateTimeArray: [],\n decimal: \"5.3\",\n decimalArray: [],\n double: 5.5,\n doubleArray: [],\n float: 5.6,\n floatArray: [],\n geoPoint: {\n type: \"Point\",\n coordinates: [5, 5],\n },\n geoPointArray: [],\n geoShape: undefined,\n geoShapeArray: [],\n id: 5,\n integer: 6,\n integerArray: [],\n long: \"5\",\n longArray: [],\n mediaReference: undefined,\n short: 5,\n shortArray: [],\n string: \"Hi there\",\n stringArray: [],\n} satisfies objectTypeWithAllPropertyTypes.Props as unknown as Osdk.Instance<\n objectTypeWithAllPropertyTypes\n>;\n\nconst objects = {\n fauxObject,\n};\n\nconst whereClauses = {\n booleanTrue: {\n boolean: true,\n },\n stringStartsWithHi: {\n string: {\n $startsWith: \"Hi\",\n },\n },\n stringStartsWithBye: {\n string: {\n $startsWith: \"Bye\",\n },\n },\n mediaReferenceIsNull: {\n mediaReference: { $isNull: true },\n },\n mediaReferenceNotIsNull: {\n $not: {\n mediaReference: { $isNull: true },\n },\n },\n geopointIntersects: {\n geoPoint: {\n $intersects: {\n $bbox: [5, 3, 3, 2],\n },\n },\n },\n empty: {},\n stringStartsWithHiAndBye: {\n $and: [] as WhereClause<objectTypeWithAllPropertyTypes>[],\n },\n stringStartsWithHiOrBye: {\n $or: [] as WhereClause<objectTypeWithAllPropertyTypes>[],\n },\n whereStrictAndNot: {\n $and: [] as WhereClause<objectTypeWithAllPropertyTypes>[],\n },\n whereStrictOrNot: {\n $or: [] as WhereClause<objectTypeWithAllPropertyTypes>[],\n },\n} satisfies Record<\n string,\n WhereClause<objectTypeWithAllPropertyTypes>\n>;\n\nwhereClauses.stringStartsWithHiAndBye.$and.push(\n whereClauses.stringStartsWithHi,\n whereClauses.stringStartsWithBye,\n);\n\nwhereClauses.stringStartsWithHiOrBye.$or.push(\n whereClauses.stringStartsWithHi,\n whereClauses.stringStartsWithBye,\n);\n\nwhereClauses.whereStrictAndNot.$and.push(\n whereClauses.stringStartsWithHi,\n whereClauses.geopointIntersects,\n);\n\nwhereClauses.whereStrictOrNot.$or.push(\n whereClauses.stringStartsWithHi,\n whereClauses.geopointIntersects,\n);\n\nconst cases = [\n [\"fauxObject\", \"empty\", true, true],\n [\"fauxObject\", \"booleanTrue\", true, true],\n [\"fauxObject\", \"stringStartsWithHi\", true, true],\n [\"fauxObject\", \"stringStartsWithBye\", false, false],\n [\"fauxObject\", \"mediaReferenceIsNull\", true, true],\n [\"fauxObject\", \"mediaReferenceNotIsNull\", false, false],\n [\"fauxObject\", \"geopointIntersects\", false, true],\n [\"fauxObject\", \"stringStartsWithHiAndBye\", false, false],\n [\"fauxObject\", \"stringStartsWithHiOrBye\", true, true],\n [\"fauxObject\", \"whereStrictAndNot\", false, true],\n [\"fauxObject\", \"whereStrictOrNot\", true, true],\n] satisfies Array<\n [keyof typeof objects, keyof typeof whereClauses, boolean, boolean]\n>;\n\ntype usedWhereClauses = typeof cases[number][1];\ntype unusedWhereClauses = Exclude<keyof typeof whereClauses, usedWhereClauses>;\nexpectTypeOf<never>().toEqualTypeOf<unusedWhereClauses>;\n\ndescribe(objectSortaMatchesWhereClause, () => {\n it.each<[keyof typeof objects, keyof typeof whereClauses, boolean, boolean]>(\n cases,\n )(\n \"%s | %s ==> { strict: %s, loose: %s }\",\n (instanceName, whereClauseName, strictExpected, nonStrictExpected) => {\n const instance = objects[instanceName];\n const whereClause = whereClauses[whereClauseName] as WhereClause<\n objectTypeWithAllPropertyTypes\n >;\n expect(instance).toBeDefined();\n expect(whereClause).toBeDefined();\n expect(objectSortaMatchesWhereClause(instance, whereClause, true)).toBe(\n strictExpected,\n );\n\n expect(objectSortaMatchesWhereClause(instance, whereClause, false))\n .toBe(nonStrictExpected);\n },\n );\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"objectMatchesWhereClause.test.js","names":["describe","expect","expectTypeOf","it","objectSortaMatchesWhereClause","fauxObject","attachment","undefined","attachment2","attachmentArray","boolean","booleanArray","byte","byteArray","date","dateArray","dateTime","Date","toISOString","dateTimeArray","decimal","decimalArray","double","doubleArray","float","floatArray","geoPoint","type","coordinates","geoPointArray","geoShape","geoShapeArray","id","integer","integerArray","long","longArray","mediaReference","short","shortArray","string","stringArray","objects","whereClauses","booleanTrue","stringStartsWithHi","$startsWith","stringStartsWithBye","mediaReferenceIsNull","$isNull","mediaReferenceNotIsNull","$not","geopointIntersects","$intersects","$bbox","empty","stringStartsWithHiAndBye","$and","stringStartsWithHiOrBye","$or","whereStrictAndNot","whereStrictOrNot","push","cases","toEqualTypeOf","each","instanceName","whereClauseName","strictExpected","nonStrictExpected","instance","whereClause","toBeDefined","toBe"],"sources":["objectMatchesWhereClause.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, WhereClause } from \"@osdk/api\";\nimport type { objectTypeWithAllPropertyTypes } from \"@osdk/client.test.ontology\";\nimport { describe, expect, expectTypeOf, it } from \"vitest\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport { objectSortaMatchesWhereClause } from \"./objectMatchesWhereClause.js\";\n\nconst fauxObject: Osdk.Instance<objectTypeWithAllPropertyTypes> = {\n attachment: undefined,\n attachment2: undefined,\n attachmentArray: [],\n boolean: true,\n booleanArray: [],\n byte: 5,\n byteArray: [],\n date: \"2024-01-01\",\n dateArray: [],\n dateTime: new Date().toISOString(),\n dateTimeArray: [],\n decimal: \"5.3\",\n decimalArray: [],\n double: 5.5,\n doubleArray: [],\n float: 5.6,\n floatArray: [],\n geoPoint: {\n type: \"Point\",\n coordinates: [5, 5],\n },\n geoPointArray: [],\n geoShape: undefined,\n geoShapeArray: [],\n id: 5,\n integer: 6,\n integerArray: [],\n long: \"5\",\n longArray: [],\n mediaReference: undefined,\n short: 5,\n shortArray: [],\n string: \"Hi there\",\n stringArray: [],\n} satisfies objectTypeWithAllPropertyTypes.Props as unknown as Osdk.Instance<\n objectTypeWithAllPropertyTypes\n>;\n\nconst objects = {\n fauxObject,\n};\n\nconst whereClauses = {\n booleanTrue: {\n boolean: true,\n },\n stringStartsWithHi: {\n string: {\n $startsWith: \"Hi\",\n },\n },\n stringStartsWithBye: {\n string: {\n $startsWith: \"Bye\",\n },\n },\n mediaReferenceIsNull: {\n mediaReference: { $isNull: true },\n },\n mediaReferenceNotIsNull: {\n $not: {\n mediaReference: { $isNull: true },\n },\n },\n geopointIntersects: {\n geoPoint: {\n $intersects: {\n $bbox: [5, 3, 3, 2],\n },\n },\n },\n empty: {},\n stringStartsWithHiAndBye: {\n $and: [] as WhereClause<objectTypeWithAllPropertyTypes>[],\n },\n stringStartsWithHiOrBye: {\n $or: [] as WhereClause<objectTypeWithAllPropertyTypes>[],\n },\n whereStrictAndNot: {\n $and: [] as WhereClause<objectTypeWithAllPropertyTypes>[],\n },\n whereStrictOrNot: {\n $or: [] as WhereClause<objectTypeWithAllPropertyTypes>[],\n },\n} satisfies Record<\n string,\n WhereClause<objectTypeWithAllPropertyTypes>\n>;\n\nwhereClauses.stringStartsWithHiAndBye.$and.push(\n whereClauses.stringStartsWithHi,\n whereClauses.stringStartsWithBye,\n);\n\nwhereClauses.stringStartsWithHiOrBye.$or.push(\n whereClauses.stringStartsWithHi,\n whereClauses.stringStartsWithBye,\n);\n\nwhereClauses.whereStrictAndNot.$and.push(\n whereClauses.stringStartsWithHi,\n whereClauses.geopointIntersects,\n);\n\nwhereClauses.whereStrictOrNot.$or.push(\n whereClauses.stringStartsWithHi,\n whereClauses.geopointIntersects,\n);\n\nconst cases = [\n [\"fauxObject\", \"empty\", true, true],\n [\"fauxObject\", \"booleanTrue\", true, true],\n [\"fauxObject\", \"stringStartsWithHi\", true, true],\n [\"fauxObject\", \"stringStartsWithBye\", false, false],\n [\"fauxObject\", \"mediaReferenceIsNull\", true, true],\n [\"fauxObject\", \"mediaReferenceNotIsNull\", false, false],\n [\"fauxObject\", \"geopointIntersects\", false, true],\n [\"fauxObject\", \"stringStartsWithHiAndBye\", false, false],\n [\"fauxObject\", \"stringStartsWithHiOrBye\", true, true],\n [\"fauxObject\", \"whereStrictAndNot\", false, true],\n [\"fauxObject\", \"whereStrictOrNot\", true, true],\n] satisfies Array<\n [keyof typeof objects, keyof typeof whereClauses, boolean, boolean]\n>;\n\ntype usedWhereClauses = typeof cases[number][1];\ntype unusedWhereClauses = Exclude<keyof typeof whereClauses, usedWhereClauses>;\nexpectTypeOf<never>().toEqualTypeOf<unusedWhereClauses>;\n\ndescribe(objectSortaMatchesWhereClause, () => {\n it.each<[keyof typeof objects, keyof typeof whereClauses, boolean, boolean]>(\n cases,\n )(\n \"%s | %s ==> { strict: %s, loose: %s }\",\n (instanceName, whereClauseName, strictExpected, nonStrictExpected) => {\n const instance = objects[instanceName] as unknown as ObjectHolder<\n typeof objects[typeof instanceName]\n >;\n const whereClause = whereClauses[whereClauseName] as WhereClause<\n objectTypeWithAllPropertyTypes\n >;\n expect(instance).toBeDefined();\n expect(whereClause).toBeDefined();\n expect(objectSortaMatchesWhereClause(instance, whereClause, true)).toBe(\n strictExpected,\n );\n\n expect(objectSortaMatchesWhereClause(instance, whereClause, false))\n .toBe(nonStrictExpected);\n },\n );\n});\n"],"mappings":"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","ignoreList":[]}