@osdk/client 2.7.0-beta.9 → 2.8.0-beta.1

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 (319) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/build/browser/actions/actions.test.js +9 -8
  3. package/build/browser/actions/actions.test.js.map +1 -1
  4. package/build/browser/fetchMetadata.test.js +9 -0
  5. package/build/browser/fetchMetadata.test.js.map +1 -1
  6. package/build/browser/index.js +1 -1
  7. package/build/browser/index.js.map +1 -1
  8. package/build/browser/intellisense.test.js +1 -1
  9. package/build/browser/intellisense.test.js.map +1 -1
  10. package/build/browser/internal/conversions/modernToLegacyWhereClause.js +14 -9
  11. package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  12. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
  13. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  14. package/build/browser/object/SimpleOsdkProperties.js.map +1 -1
  15. package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
  16. package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.js +3 -0
  17. package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.js.map +1 -1
  18. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +4 -0
  19. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  20. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +85 -3
  21. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  22. package/build/browser/object/convertWireToOsdkObjects.js +4 -4
  23. package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
  24. package/build/browser/object/convertWireToOsdkObjects.test.js +48 -27
  25. package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
  26. package/build/browser/object/fetchPage.js +16 -5
  27. package/build/browser/object/fetchPage.js.map +1 -1
  28. package/build/browser/object/object.test.js +123 -0
  29. package/build/browser/object/object.test.js.map +1 -1
  30. package/build/browser/objectSet/ObjectSet.test.js +6 -6
  31. package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
  32. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +15 -6
  33. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  34. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +49 -3
  35. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  36. package/build/browser/objectSet/createObjectSet.js +1 -1
  37. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  38. package/build/browser/observable/FunctionPayload.js +2 -0
  39. package/build/browser/observable/FunctionPayload.js.map +1 -0
  40. package/build/browser/observable/ObservableClient.js.map +1 -1
  41. package/build/browser/observable/internal/BulkObjectLoader.js +2 -1
  42. package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
  43. package/build/browser/observable/internal/Changes.js +4 -1
  44. package/build/browser/observable/internal/Changes.js.map +1 -1
  45. package/build/browser/observable/internal/KnownCacheKey.js.map +1 -1
  46. package/build/browser/observable/internal/ObservableClientImpl.js +21 -1
  47. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  48. package/build/browser/observable/internal/RidListCanonicalizer.js +30 -0
  49. package/build/browser/observable/internal/RidListCanonicalizer.js.map +1 -0
  50. package/build/browser/observable/internal/RidListCanonicalizer.test.js +50 -0
  51. package/build/browser/observable/internal/RidListCanonicalizer.test.js.map +1 -0
  52. package/build/browser/observable/internal/Store.js +11 -1
  53. package/build/browser/observable/internal/Store.js.map +1 -1
  54. package/build/browser/observable/internal/Store.test.js +58 -4
  55. package/build/browser/observable/internal/Store.test.js.map +1 -1
  56. package/build/browser/observable/internal/actions/ActionApplication.js +11 -7
  57. package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -1
  58. package/build/browser/observable/internal/actions/OptimisticJob.js +1 -1
  59. package/build/browser/observable/internal/actions/OptimisticJob.js.map +1 -1
  60. package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
  61. package/build/browser/observable/internal/base-list/BaseListQuery.js +15 -9
  62. package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
  63. package/build/browser/observable/internal/base-list/createCollectionConnectable.js +4 -2
  64. package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
  65. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js +1 -2
  66. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
  67. package/build/browser/observable/internal/evaluateFilter.js +1 -1
  68. package/build/browser/observable/internal/evaluateFilter.js.map +1 -1
  69. package/build/browser/observable/internal/evaluateFilter.test.js +105 -0
  70. package/build/browser/observable/internal/evaluateFilter.test.js.map +1 -0
  71. package/build/browser/observable/internal/function/FunctionCacheKey.js +26 -0
  72. package/build/browser/observable/internal/function/FunctionCacheKey.js.map +1 -0
  73. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js +151 -0
  74. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -0
  75. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.test.js +186 -0
  76. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.test.js.map +1 -0
  77. package/build/browser/observable/internal/function/FunctionQuery.js +137 -0
  78. package/build/browser/observable/internal/function/FunctionQuery.js.map +1 -0
  79. package/build/browser/observable/internal/function/FunctionQuery.test.js +278 -0
  80. package/build/browser/observable/internal/function/FunctionQuery.test.js.map +1 -0
  81. package/build/browser/observable/internal/function/FunctionsHelper.js +92 -0
  82. package/build/browser/observable/internal/function/FunctionsHelper.js.map +1 -0
  83. package/build/browser/observable/internal/links/SpecificLinkQuery.js +2 -1
  84. package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -1
  85. package/build/browser/observable/internal/list/InterfaceListQuery.js +27 -10
  86. package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
  87. package/build/browser/observable/internal/list/ListCacheKey.js +1 -0
  88. package/build/browser/observable/internal/list/ListCacheKey.js.map +1 -1
  89. package/build/browser/observable/internal/list/ListQuery.js +10 -4
  90. package/build/browser/observable/internal/list/ListQuery.js.map +1 -1
  91. package/build/browser/observable/internal/list/ListQuery.test.js +167 -3
  92. package/build/browser/observable/internal/list/ListQuery.test.js.map +1 -1
  93. package/build/browser/observable/internal/list/ListsHelper.js +6 -3
  94. package/build/browser/observable/internal/list/ListsHelper.js.map +1 -1
  95. package/build/browser/observable/internal/list/ObjectListQuery.js +23 -9
  96. package/build/browser/observable/internal/list/ObjectListQuery.js.map +1 -1
  97. package/build/browser/observable/internal/object/ObjectQuery.js +15 -1
  98. package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -1
  99. package/build/browser/observable/internal/object/ObjectsHelper.js +1 -3
  100. package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
  101. package/build/browser/observable/internal/objectMatchesWhereClause.test.js +11 -1
  102. package/build/browser/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  103. package/build/browser/observable/internal/objectset/ObjectSetQuery.js +6 -2
  104. package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  105. package/build/browser/observable/internal/testUtils.js +8 -5
  106. package/build/browser/observable/internal/testUtils.js.map +1 -1
  107. package/build/browser/observable/internal/utils/rdpFieldOperations.js +6 -3
  108. package/build/browser/observable/internal/utils/rdpFieldOperations.js.map +1 -1
  109. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  110. package/build/browser/queries/applyQuery.js +14 -0
  111. package/build/browser/queries/applyQuery.js.map +1 -1
  112. package/build/browser/queries/queries.test.js +14 -2
  113. package/build/browser/queries/queries.test.js.map +1 -1
  114. package/build/browser/util/UserAgent.js +2 -2
  115. package/build/browser/util/isObjectSpecifiersObject.js.map +1 -1
  116. package/build/browser/util/toDataValue.js +0 -5
  117. package/build/browser/util/toDataValue.js.map +1 -1
  118. package/build/browser/util/toDataValue.test.js +2 -7
  119. package/build/browser/util/toDataValue.test.js.map +1 -1
  120. package/build/cjs/{Client-DaUJl7jZ.d.cts → Client-Cmx6x_V1.d.cts} +1 -1
  121. package/build/cjs/{chunk-IQJTM3KW.cjs → chunk-7543GRIE.cjs} +183 -92
  122. package/build/cjs/chunk-7543GRIE.cjs.map +1 -0
  123. package/build/cjs/{chunk-PARVKNVB.cjs → chunk-VVKEXIIO.cjs} +108 -81
  124. package/build/cjs/chunk-VVKEXIIO.cjs.map +1 -0
  125. package/build/cjs/{createClient-D5G3qzAO.d.cts → createClient-BPK4om7e.d.cts} +1 -1
  126. package/build/cjs/index.cjs +8 -12
  127. package/build/cjs/index.cjs.map +1 -1
  128. package/build/cjs/index.d.cts +3 -3
  129. package/build/cjs/public/internal.cjs +8 -8
  130. package/build/cjs/public/internal.d.cts +1 -1
  131. package/build/cjs/public/unstable-do-not-use.cjs +537 -94
  132. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  133. package/build/cjs/public/unstable-do-not-use.d.cts +75 -4
  134. package/build/esm/actions/actions.test.js +9 -8
  135. package/build/esm/actions/actions.test.js.map +1 -1
  136. package/build/esm/fetchMetadata.test.js +9 -0
  137. package/build/esm/fetchMetadata.test.js.map +1 -1
  138. package/build/esm/index.js +1 -1
  139. package/build/esm/index.js.map +1 -1
  140. package/build/esm/intellisense.test.js +1 -1
  141. package/build/esm/intellisense.test.js.map +1 -1
  142. package/build/esm/internal/conversions/modernToLegacyWhereClause.js +14 -9
  143. package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  144. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
  145. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  146. package/build/esm/object/SimpleOsdkProperties.js.map +1 -1
  147. package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
  148. package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.js +3 -0
  149. package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.js.map +1 -1
  150. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +4 -0
  151. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  152. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +85 -3
  153. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  154. package/build/esm/object/convertWireToOsdkObjects.js +4 -4
  155. package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
  156. package/build/esm/object/convertWireToOsdkObjects.test.js +48 -27
  157. package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
  158. package/build/esm/object/fetchPage.js +16 -5
  159. package/build/esm/object/fetchPage.js.map +1 -1
  160. package/build/esm/object/object.test.js +123 -0
  161. package/build/esm/object/object.test.js.map +1 -1
  162. package/build/esm/objectSet/ObjectSet.test.js +6 -6
  163. package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
  164. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +15 -6
  165. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  166. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +49 -3
  167. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  168. package/build/esm/objectSet/createObjectSet.js +1 -1
  169. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  170. package/build/esm/observable/FunctionPayload.js +2 -0
  171. package/build/esm/observable/FunctionPayload.js.map +1 -0
  172. package/build/esm/observable/ObservableClient.js.map +1 -1
  173. package/build/esm/observable/internal/BulkObjectLoader.js +2 -1
  174. package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
  175. package/build/esm/observable/internal/Changes.js +4 -1
  176. package/build/esm/observable/internal/Changes.js.map +1 -1
  177. package/build/esm/observable/internal/KnownCacheKey.js.map +1 -1
  178. package/build/esm/observable/internal/ObservableClientImpl.js +21 -1
  179. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  180. package/build/esm/observable/internal/RidListCanonicalizer.js +30 -0
  181. package/build/esm/observable/internal/RidListCanonicalizer.js.map +1 -0
  182. package/build/esm/observable/internal/RidListCanonicalizer.test.js +50 -0
  183. package/build/esm/observable/internal/RidListCanonicalizer.test.js.map +1 -0
  184. package/build/esm/observable/internal/Store.js +11 -1
  185. package/build/esm/observable/internal/Store.js.map +1 -1
  186. package/build/esm/observable/internal/Store.test.js +58 -4
  187. package/build/esm/observable/internal/Store.test.js.map +1 -1
  188. package/build/esm/observable/internal/actions/ActionApplication.js +11 -7
  189. package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -1
  190. package/build/esm/observable/internal/actions/OptimisticJob.js +1 -1
  191. package/build/esm/observable/internal/actions/OptimisticJob.js.map +1 -1
  192. package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
  193. package/build/esm/observable/internal/base-list/BaseListQuery.js +15 -9
  194. package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
  195. package/build/esm/observable/internal/base-list/createCollectionConnectable.js +4 -2
  196. package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
  197. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js +1 -2
  198. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
  199. package/build/esm/observable/internal/evaluateFilter.js +1 -1
  200. package/build/esm/observable/internal/evaluateFilter.js.map +1 -1
  201. package/build/esm/observable/internal/evaluateFilter.test.js +105 -0
  202. package/build/esm/observable/internal/evaluateFilter.test.js.map +1 -0
  203. package/build/esm/observable/internal/function/FunctionCacheKey.js +26 -0
  204. package/build/esm/observable/internal/function/FunctionCacheKey.js.map +1 -0
  205. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js +151 -0
  206. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -0
  207. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.test.js +186 -0
  208. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.test.js.map +1 -0
  209. package/build/esm/observable/internal/function/FunctionQuery.js +137 -0
  210. package/build/esm/observable/internal/function/FunctionQuery.js.map +1 -0
  211. package/build/esm/observable/internal/function/FunctionQuery.test.js +278 -0
  212. package/build/esm/observable/internal/function/FunctionQuery.test.js.map +1 -0
  213. package/build/esm/observable/internal/function/FunctionsHelper.js +92 -0
  214. package/build/esm/observable/internal/function/FunctionsHelper.js.map +1 -0
  215. package/build/esm/observable/internal/links/SpecificLinkQuery.js +2 -1
  216. package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -1
  217. package/build/esm/observable/internal/list/InterfaceListQuery.js +27 -10
  218. package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
  219. package/build/esm/observable/internal/list/ListCacheKey.js +1 -0
  220. package/build/esm/observable/internal/list/ListCacheKey.js.map +1 -1
  221. package/build/esm/observable/internal/list/ListQuery.js +10 -4
  222. package/build/esm/observable/internal/list/ListQuery.js.map +1 -1
  223. package/build/esm/observable/internal/list/ListQuery.test.js +167 -3
  224. package/build/esm/observable/internal/list/ListQuery.test.js.map +1 -1
  225. package/build/esm/observable/internal/list/ListsHelper.js +6 -3
  226. package/build/esm/observable/internal/list/ListsHelper.js.map +1 -1
  227. package/build/esm/observable/internal/list/ObjectListQuery.js +23 -9
  228. package/build/esm/observable/internal/list/ObjectListQuery.js.map +1 -1
  229. package/build/esm/observable/internal/object/ObjectQuery.js +15 -1
  230. package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -1
  231. package/build/esm/observable/internal/object/ObjectsHelper.js +1 -3
  232. package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
  233. package/build/esm/observable/internal/objectMatchesWhereClause.test.js +11 -1
  234. package/build/esm/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  235. package/build/esm/observable/internal/objectset/ObjectSetQuery.js +6 -2
  236. package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  237. package/build/esm/observable/internal/testUtils.js +8 -5
  238. package/build/esm/observable/internal/testUtils.js.map +1 -1
  239. package/build/esm/observable/internal/utils/rdpFieldOperations.js +6 -3
  240. package/build/esm/observable/internal/utils/rdpFieldOperations.js.map +1 -1
  241. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  242. package/build/esm/queries/applyQuery.js +14 -0
  243. package/build/esm/queries/applyQuery.js.map +1 -1
  244. package/build/esm/queries/queries.test.js +14 -2
  245. package/build/esm/queries/queries.test.js.map +1 -1
  246. package/build/esm/util/UserAgent.js +2 -2
  247. package/build/esm/util/isObjectSpecifiersObject.js.map +1 -1
  248. package/build/esm/util/toDataValue.js +0 -5
  249. package/build/esm/util/toDataValue.js.map +1 -1
  250. package/build/esm/util/toDataValue.test.js +2 -7
  251. package/build/esm/util/toDataValue.test.js.map +1 -1
  252. package/build/types/index.d.ts +1 -1
  253. package/build/types/index.d.ts.map +1 -1
  254. package/build/types/object/convertWireToOsdkObjects/InternalSymbols.d.ts +2 -0
  255. package/build/types/object/convertWireToOsdkObjects/InternalSymbols.d.ts.map +1 -1
  256. package/build/types/object/convertWireToOsdkObjects.d.ts +4 -4
  257. package/build/types/object/convertWireToOsdkObjects.d.ts.map +1 -1
  258. package/build/types/object/fetchPage.d.ts.map +1 -1
  259. package/build/types/object/object.test.d.ts.map +1 -1
  260. package/build/types/observable/FunctionPayload.d.ts +10 -0
  261. package/build/types/observable/FunctionPayload.d.ts.map +1 -0
  262. package/build/types/observable/ObservableClient.d.ts +73 -1
  263. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  264. package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
  265. package/build/types/observable/internal/Changes.d.ts +5 -3
  266. package/build/types/observable/internal/Changes.d.ts.map +1 -1
  267. package/build/types/observable/internal/KnownCacheKey.d.ts +2 -1
  268. package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -1
  269. package/build/types/observable/internal/RidListCanonicalizer.d.ts +5 -0
  270. package/build/types/observable/internal/RidListCanonicalizer.d.ts.map +1 -0
  271. package/build/types/observable/internal/RidListCanonicalizer.test.d.ts +1 -0
  272. package/build/types/observable/internal/RidListCanonicalizer.test.d.ts.map +1 -0
  273. package/build/types/observable/internal/Store.d.ts +7 -1
  274. package/build/types/observable/internal/Store.d.ts.map +1 -1
  275. package/build/types/observable/internal/Store.test.d.ts.map +1 -1
  276. package/build/types/observable/internal/actions/ActionApplication.d.ts.map +1 -1
  277. package/build/types/observable/internal/actions/OptimisticJob.d.ts.map +1 -1
  278. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts +3 -0
  279. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts.map +1 -1
  280. package/build/types/observable/internal/base-list/BaseListQuery.d.ts +3 -1
  281. package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -1
  282. package/build/types/observable/internal/evaluateFilter.test.d.ts +1 -0
  283. package/build/types/observable/internal/evaluateFilter.test.d.ts.map +1 -0
  284. package/build/types/observable/internal/function/FunctionCacheKey.d.ts +17 -0
  285. package/build/types/observable/internal/function/FunctionCacheKey.d.ts.map +1 -0
  286. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts +16 -0
  287. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts.map +1 -0
  288. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.test.d.ts +1 -0
  289. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.test.d.ts.map +1 -0
  290. package/build/types/observable/internal/function/FunctionQuery.d.ts +40 -0
  291. package/build/types/observable/internal/function/FunctionQuery.d.ts.map +1 -0
  292. package/build/types/observable/internal/function/FunctionQuery.test.d.ts +1 -0
  293. package/build/types/observable/internal/function/FunctionQuery.test.d.ts.map +1 -0
  294. package/build/types/observable/internal/function/FunctionsHelper.d.ts +25 -0
  295. package/build/types/observable/internal/function/FunctionsHelper.d.ts.map +1 -0
  296. package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -1
  297. package/build/types/observable/internal/list/InterfaceListQuery.d.ts +3 -0
  298. package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -1
  299. package/build/types/observable/internal/list/ListCacheKey.d.ts +2 -1
  300. package/build/types/observable/internal/list/ListCacheKey.d.ts.map +1 -1
  301. package/build/types/observable/internal/list/ListQuery.d.ts +1 -1
  302. package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -1
  303. package/build/types/observable/internal/list/ListsHelper.d.ts +3 -1
  304. package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -1
  305. package/build/types/observable/internal/list/ObjectListQuery.d.ts.map +1 -1
  306. package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -1
  307. package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
  308. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +1 -0
  309. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
  310. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  311. package/build/types/observable/internal/utils/rdpFieldOperations.d.ts.map +1 -1
  312. package/build/types/public/unstable-do-not-use.d.ts +2 -1
  313. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  314. package/build/types/queries/applyQuery.d.ts.map +1 -1
  315. package/build/types/util/isObjectSpecifiersObject.d.ts +1 -0
  316. package/build/types/util/isObjectSpecifiersObject.d.ts.map +1 -1
  317. package/package.json +14 -14
  318. package/build/cjs/chunk-IQJTM3KW.cjs.map +0 -1
  319. package/build/cjs/chunk-PARVKNVB.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"createCollectionConnectable.test.js","names":["BehaviorSubject","beforeEach","describe","expect","it","vi","createClientMockHelper","mockObserver","waitForCall","createCollectionConnectable","actualCreateCollectionConnectable","mockEmployee1","$apiName","$primaryKey","$objectType","$title","employeeId","fullName","mockEmployee2","mockEmployee3","mockSubjects","createPayload","mockListCacheKey","client","get","fn","type","otherKeys","params","data","resolvedData","status","isOptimistic","lastUpdated","count","length","objectKey1","undefined","__cacheKey","objectKey2","subjectPayload","cacheKey","value","Date","now","subject","mocked","mockImplementation","connectable","subscription","connect","observer","subscribe","next","toHaveBeenCalledWith","objectContaining","unsubscribe","mockReturnValue","basePayload","mockClear","objectKey3","initialPayload","observer1","observer2","toHaveBeenCalledTimes","not","toHaveBeenCalled","errorThrowingCreatePayload","Error","error","message"],"sources":["createCollectionConnectable.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 type { Employee } from \"@osdk/client.test.ontology\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { ObjectHolder } from \"../../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { Status } from \"../../ObservableClient/common.js\";\nimport type { CacheKey } from \"../CacheKey.js\";\nimport type { ObjectCacheKey } from \"../object/ObjectCacheKey.js\";\nimport type { SubjectPayload } from \"../SubjectPayload.js\";\nimport type { Subjects } from \"../Subjects.js\";\nimport {\n createClientMockHelper,\n mockObserver,\n waitForCall,\n} from \"../testUtils.js\";\nimport { createCollectionConnectable as actualCreateCollectionConnectable } from \"./createCollectionConnectable.js\";\n\n// Test payload type for our collection\ninterface TestPayload {\n data: any[];\n status: Status;\n isOptimistic: boolean;\n lastUpdated: number;\n count: number;\n}\n\n// Mock object instances for testing\nconst mockEmployee1: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 1,\n $objectType: \"Employee\",\n $title: \"Employee 1\",\n employeeId: 1,\n fullName: \"John Doe\",\n} as any;\n\nconst mockEmployee2: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 2,\n $objectType: \"Employee\",\n $title: \"Employee 2\",\n employeeId: 2,\n fullName: \"Jane Smith\",\n} as any;\n\nconst mockEmployee3: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 3,\n $objectType: \"Employee\",\n $title: \"Employee 3\",\n employeeId: 3,\n fullName: \"Bob Johnson\",\n} as any;\n\ndescribe(\"createCollectionConnectable\", () => {\n let mockSubjects: Subjects;\n let createPayload: ReturnType<typeof vi.fn>;\n let mockListCacheKey: CacheKey<any, any, any, any>;\n\n beforeEach(() => {\n const { client } = createClientMockHelper();\n\n mockSubjects = {\n get: vi.fn(),\n } as any;\n\n // Mock cache key for list\n mockListCacheKey = {\n type: \"list\",\n otherKeys: [\"Employee\", {}, {}],\n } as CacheKey<any, any, any, any>;\n\n // Create payload function that mimics real usage\n createPayload = vi.fn((params) => ({\n data: params.resolvedData,\n status: params.status,\n isOptimistic: params.isOptimistic,\n lastUpdated: params.lastUpdated,\n count: params.resolvedData.length,\n }));\n });\n\n describe(\"basic functionality\", () => {\n it(\"should create a connectable observable with resolved data\", async () => {\n // Mock object cache keys\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n // Create subject payload with mock data\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1, objectKey2],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject to return object observables\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n // Connect and subscribe\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // Wait for the observable to emit\n await waitForCall(observer);\n\n // Verify the result\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2],\n status: \"loaded\",\n isOptimistic: false,\n count: 2,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle empty data correctly\", async () => {\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [],\n status: \"loaded\",\n isOptimistic: false,\n count: 0,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle null/undefined data\", async () => {\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: null as any,\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [],\n status: \"loaded\",\n isOptimistic: false,\n count: 0,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"optimistic updates\", () => {\n it(\"should propagate optimistic flag correctly\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loading\",\n lastUpdated: Date.now(),\n isOptimistic: true, // This is an optimistic update\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"loading\",\n isOptimistic: true, // Should preserve optimistic flag\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"status transitions\", () => {\n it(\"should handle different status values\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const basePayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"init\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(basePayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // Wait for initial emission\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"init\",\n isOptimistic: false,\n count: 1,\n }),\n );\n\n observer.next.mockClear();\n\n // Test transition to loading\n subject.next({\n ...basePayload,\n status: \"loading\",\n lastUpdated: Date.now(),\n });\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"loading\",\n isOptimistic: false,\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"multiple objects\", () => {\n it(\"should handle multiple objects in collection\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const objectKey3: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 3, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1, objectKey2, objectKey3],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject for all three objects\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey3) {\n return new BehaviorSubject({\n cacheKey: objectKey3,\n value: mockEmployee3,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2, mockEmployee3],\n status: \"loaded\",\n isOptimistic: false,\n count: 3,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle objects being added/removed from collection\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n // Start with one object\n const initialPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(initialPayload);\n\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // First check - single object\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n observer.next.mockClear();\n\n // Add second object\n subject.next({\n ...initialPayload,\n value: {\n data: [objectKey1, objectKey2],\n },\n lastUpdated: Date.now(),\n });\n\n // Second check - two objects\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2],\n count: 2,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"subscription behavior\", () => {\n it(\"should support multiple subscribers\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer1 = mockObserver<TestPayload>();\n const observer2 = mockObserver<TestPayload>();\n\n connectable.subscribe(observer1);\n connectable.subscribe(observer2);\n\n await waitForCall(observer1);\n await waitForCall(observer2);\n\n // Both observers should receive the data\n expect(observer1.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n expect(observer2.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should use ReplaySubject behavior (last value replayed)\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer1 = mockObserver<TestPayload>();\n\n // Subscribe first observer\n connectable.subscribe(observer1);\n\n await waitForCall(observer1);\n expect(observer1.next).toHaveBeenCalledTimes(1);\n observer1.next.mockClear();\n\n // Subscribe second observer after first has already received data\n const observer2 = mockObserver<TestPayload>();\n connectable.subscribe(observer2);\n\n await waitForCall(observer2);\n\n // Second observer should immediately receive the last value (ReplaySubject behavior)\n expect(observer2.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n // First observer should not receive additional calls\n expect(observer1.next).not.toHaveBeenCalled();\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should handle store.getSubject returning undefined object entry\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject to return undefined entry - this creates an object with undefined value\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: undefined, // This is the key - undefined value\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n // Should handle undefined object entry gracefully by filtering it out\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [undefined], // The function maps the undefined value from the store\n status: \"loaded\",\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle createPayload function throwing errors\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n // Mock createPayload to throw an error\n const errorThrowingCreatePayload = vi.fn(() => {\n throw new Error(\"Test error in createPayload\");\n });\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n errorThrowingCreatePayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer.error);\n\n // Should call the error handler\n expect(observer.error).toHaveBeenCalledWith(\n expect.objectContaining({\n message: \"Test error in createPayload\",\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,eAAe,QAAQ,MAAM;AACtC,SAASC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,QAAQ;AAO7D,SACEC,sBAAsB,EACtBC,YAAY,EACZC,WAAW,QACN,iBAAiB;AACxB,SAASC,2BAA2B,IAAIC,iCAAiC,QAAQ,kCAAkC;;AAEnH;;AASA;AACA,MAAMC,aAAqD,GAAG;EAC5DC,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,UAAU;EACvBC,MAAM,EAAE,YAAY;EACpBC,UAAU,EAAE,CAAC;EACbC,QAAQ,EAAE;AACZ,CAAQ;AAER,MAAMC,aAAqD,GAAG;EAC5DN,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,UAAU;EACvBC,MAAM,EAAE,YAAY;EACpBC,UAAU,EAAE,CAAC;EACbC,QAAQ,EAAE;AACZ,CAAQ;AAER,MAAME,aAAqD,GAAG;EAC5DP,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,UAAU;EACvBC,MAAM,EAAE,YAAY;EACpBC,UAAU,EAAE,CAAC;EACbC,QAAQ,EAAE;AACZ,CAAQ;AAERf,QAAQ,CAAC,6BAA6B,EAAE,MAAM;EAC5C,IAAIkB,YAAsB;EAC1B,IAAIC,aAAuC;EAC3C,IAAIC,gBAA8C;EAElDrB,UAAU,CAAC,MAAM;IACf,MAAM;MAAEsB;IAAO,CAAC,GAAGjB,sBAAsB,CAAC,CAAC;IAE3Cc,YAAY,GAAG;MACbI,GAAG,EAAEnB,EAAE,CAACoB,EAAE,CAAC;IACb,CAAQ;;IAER;IACAH,gBAAgB,GAAG;MACjBI,IAAI,EAAE,MAAM;MACZC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAChC,CAAiC;;IAEjC;IACAN,aAAa,GAAGhB,EAAE,CAACoB,EAAE,CAAEG,MAAM,KAAM;MACjCC,IAAI,EAAED,MAAM,CAACE,YAAY;MACzBC,MAAM,EAAEH,MAAM,CAACG,MAAM;MACrBC,YAAY,EAAEJ,MAAM,CAACI,YAAY;MACjCC,WAAW,EAAEL,MAAM,CAACK,WAAW;MAC/BC,KAAK,EAAEN,MAAM,CAACE,YAAY,CAACK;IAC7B,CAAC,CAAC,CAAC;EACL,CAAC,CAAC;EAEFjC,QAAQ,CAAC,qBAAqB,EAAE,MAAM;IACpCE,EAAE,CAAC,2DAA2D,EAAE,YAAY;MAC1E;MACA,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAMC,UAA0B,GAAG;QACjCb,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;;MAED;MACA,MAAME,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU,EAAEG,UAAU;QAC/B,CAAC;QACDR,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;;MAEnD;MACAnC,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACuB,kBAAkB,CAAEN,QAAa,IAAK;QAChE,IAAIA,QAAQ,KAAKL,UAAU,EAAE;UAC3B,OAAO,IAAIpC,eAAe,CAAC;YACzByC,QAAQ,EAAEL,UAAU;YACpBM,KAAK,EAAE/B,aAAa;YACpBoB,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBZ,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,IAAIS,QAAQ,KAAKF,UAAU,EAAE;UAC3B,OAAO,IAAIvC,eAAe,CAAC;YACzByC,QAAQ,EAAEF,UAAU;YACpBG,KAAK,EAAExB,aAAa;YACpBa,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBZ,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,OAAO,IAAIhC,eAAe,CAACqC,SAAgB,CAAC;MAC9C,CAAC,CAAC;MAEF,MAAMW,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;;MAED;MACA,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;;MAE/B;MACA,MAAM3C,WAAW,CAAC2C,QAAQ,CAAC;;MAE3B;MACAhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,EAAEO,aAAa,CAAC;QACpCa,MAAM,EAAE,QAAQ;QAChBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFpD,EAAE,CAAC,oCAAoC,EAAE,YAAY;MACnD,MAAMoC,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE;QACR,CAAC;QACDE,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;MAEnD,MAAMQ,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAM3C,WAAW,CAAC2C,QAAQ,CAAC;MAE3BhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,EAAE;QACRE,MAAM,EAAE,QAAQ;QAChBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFpD,EAAE,CAAC,mCAAmC,EAAE,YAAY;MAClD,MAAMoC,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE;QACR,CAAC;QACDE,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;MAEnD,MAAMQ,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAM3C,WAAW,CAAC2C,QAAQ,CAAC;MAE3BhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,EAAE;QACRE,MAAM,EAAE,QAAQ;QAChBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFtD,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACnCE,EAAE,CAAC,4CAA4C,EAAE,YAAY;MAC3D,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAME,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,SAAS;QACjBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE,IAAI,CAAE;MACtB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;MAEnDnC,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACiC,eAAe,CACzC,IAAIzD,eAAe,CAAC;QAClByC,QAAQ,EAAEL,UAAU;QACpBM,KAAK,EAAE/B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMgB,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAM3C,WAAW,CAAC2C,QAAQ,CAAC;MAE3BhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBoB,MAAM,EAAE,SAAS;QACjBC,YAAY,EAAE,IAAI;QAAE;QACpBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFtD,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACnCE,EAAE,CAAC,uCAAuC,EAAE,YAAY;MACtD,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAMoB,WAAoD,GAAG;QAC3DjB,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,MAAM;QACdE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAAC0D,WAAW,CAAC;MAEhDrD,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACiC,eAAe,CACzC,IAAIzD,eAAe,CAAC;QAClByC,QAAQ,EAAEL,UAAU;QACpBM,KAAK,EAAE/B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMgB,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;;MAE/B;MACA,MAAM3C,WAAW,CAAC2C,QAAQ,CAAC;MAE3BhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBoB,MAAM,EAAE,MAAM;QACdC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDiB,QAAQ,CAACE,IAAI,CAACM,SAAS,CAAC,CAAC;;MAEzB;MACAd,OAAO,CAACQ,IAAI,CAAC;QACX,GAAGK,WAAW;QACd3B,MAAM,EAAE,SAAS;QACjBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC;MACxB,CAAC,CAAC;MAEF,MAAMpC,WAAW,CAAC2C,QAAQ,CAAC;MAE3BhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBoB,MAAM,EAAE,SAAS;QACjBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFtD,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IACjCE,EAAE,CAAC,8CAA8C,EAAE,YAAY;MAC7D,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAMC,UAA0B,GAAG;QACjCb,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAMsB,UAA0B,GAAG;QACjClC,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAME,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU,EAAEG,UAAU,EAAEqB,UAAU;QAC3C,CAAC;QACD7B,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;;MAEnD;MACAnC,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACuB,kBAAkB,CAAEN,QAAa,IAAK;QAChE,IAAIA,QAAQ,KAAKL,UAAU,EAAE;UAC3B,OAAO,IAAIpC,eAAe,CAAC;YACzByC,QAAQ,EAAEL,UAAU;YACpBM,KAAK,EAAE/B,aAAa;YACpBoB,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBZ,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,IAAIS,QAAQ,KAAKF,UAAU,EAAE;UAC3B,OAAO,IAAIvC,eAAe,CAAC;YACzByC,QAAQ,EAAEF,UAAU;YACpBG,KAAK,EAAExB,aAAa;YACpBa,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBZ,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,IAAIS,QAAQ,KAAKmB,UAAU,EAAE;UAC3B,OAAO,IAAI5D,eAAe,CAAC;YACzByC,QAAQ,EAAEmB,UAAU;YACpBlB,KAAK,EAAEvB,aAAa;YACpBY,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBZ,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,OAAO,IAAIhC,eAAe,CAACqC,SAAgB,CAAC;MAC9C,CAAC,CAAC;MAEF,MAAMW,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAM3C,WAAW,CAAC2C,QAAQ,CAAC;MAE3BhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,EAAEO,aAAa,EAAEC,aAAa,CAAC;QACnDY,MAAM,EAAE,QAAQ;QAChBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFpD,EAAE,CAAC,2DAA2D,EAAE,YAAY;MAC1E,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAMC,UAA0B,GAAG;QACjCb,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;;MAED;MACA,MAAMuB,cAAuD,GAAG;QAC9DpB,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAAC6D,cAAc,CAAC;MAEnDxD,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACuB,kBAAkB,CAAEN,QAAa,IAAK;QAChE,IAAIA,QAAQ,KAAKL,UAAU,EAAE;UAC3B,OAAO,IAAIpC,eAAe,CAAC;YACzByC,QAAQ,EAAEL,UAAU;YACpBM,KAAK,EAAE/B,aAAa;YACpBoB,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBZ,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,IAAIS,QAAQ,KAAKF,UAAU,EAAE;UAC3B,OAAO,IAAIvC,eAAe,CAAC;YACzByC,QAAQ,EAAEF,UAAU;YACpBG,KAAK,EAAExB,aAAa;YACpBa,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBZ,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,OAAO,IAAIhC,eAAe,CAACqC,SAAgB,CAAC;MAC9C,CAAC,CAAC;MAEF,MAAMW,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;;MAE/B;MACA,MAAM3C,WAAW,CAAC2C,QAAQ,CAAC;MAE3BhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBuB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDiB,QAAQ,CAACE,IAAI,CAACM,SAAS,CAAC,CAAC;;MAEzB;MACAd,OAAO,CAACQ,IAAI,CAAC;QACX,GAAGQ,cAAc;QACjBnB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU,EAAEG,UAAU;QAC/B,CAAC;QACDN,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC;MACxB,CAAC,CAAC;;MAEF;MACA,MAAMpC,WAAW,CAAC2C,QAAQ,CAAC;MAE3BhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,EAAEO,aAAa,CAAC;QACpCgB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFtD,QAAQ,CAAC,uBAAuB,EAAE,MAAM;IACtCE,EAAE,CAAC,qCAAqC,EAAE,YAAY;MACpD,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAME,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;MAEnDnC,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACiC,eAAe,CACzC,IAAIzD,eAAe,CAAC;QAClByC,QAAQ,EAAEL,UAAU;QACpBM,KAAK,EAAE/B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMgB,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMY,SAAS,GAAGvD,YAAY,CAAc,CAAC;MAC7C,MAAMwD,SAAS,GAAGxD,YAAY,CAAc,CAAC;MAE7CyC,WAAW,CAACI,SAAS,CAACU,SAAS,CAAC;MAChCd,WAAW,CAACI,SAAS,CAACW,SAAS,CAAC;MAEhC,MAAMvD,WAAW,CAACsD,SAAS,CAAC;MAC5B,MAAMtD,WAAW,CAACuD,SAAS,CAAC;;MAE5B;MACA5D,MAAM,CAAC2D,SAAS,CAACT,IAAI,CAAC,CAACC,oBAAoB,CACzCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBuB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAED/B,MAAM,CAAC4D,SAAS,CAACV,IAAI,CAAC,CAACC,oBAAoB,CACzCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBuB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFpD,EAAE,CAAC,yDAAyD,EAAE,YAAY;MACxE,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAME,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;MAEnDnC,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACiC,eAAe,CACzC,IAAIzD,eAAe,CAAC;QAClByC,QAAQ,EAAEL,UAAU;QACpBM,KAAK,EAAE/B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMgB,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMY,SAAS,GAAGvD,YAAY,CAAc,CAAC;;MAE7C;MACAyC,WAAW,CAACI,SAAS,CAACU,SAAS,CAAC;MAEhC,MAAMtD,WAAW,CAACsD,SAAS,CAAC;MAC5B3D,MAAM,CAAC2D,SAAS,CAACT,IAAI,CAAC,CAACW,qBAAqB,CAAC,CAAC,CAAC;MAC/CF,SAAS,CAACT,IAAI,CAACM,SAAS,CAAC,CAAC;;MAE1B;MACA,MAAMI,SAAS,GAAGxD,YAAY,CAAc,CAAC;MAC7CyC,WAAW,CAACI,SAAS,CAACW,SAAS,CAAC;MAEhC,MAAMvD,WAAW,CAACuD,SAAS,CAAC;;MAE5B;MACA5D,MAAM,CAAC4D,SAAS,CAACV,IAAI,CAAC,CAACC,oBAAoB,CACzCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBuB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;;MAED;MACA/B,MAAM,CAAC2D,SAAS,CAACT,IAAI,CAAC,CAACY,GAAG,CAACC,gBAAgB,CAAC,CAAC;MAE7CjB,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFtD,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IAC/BE,EAAE,CAAC,iEAAiE,EAAE,YAAY;MAChF,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAME,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;;MAEnD;MACAnC,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACiC,eAAe,CACzC,IAAIzD,eAAe,CAAC;QAClByC,QAAQ,EAAEL,UAAU;QACpBM,KAAK,EAAEL,SAAS;QAAE;QAClBN,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMgB,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZC,aACF,CAAC;MAED,MAAM4B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAM3C,WAAW,CAAC2C,QAAQ,CAAC;;MAE3B;MACAhD,MAAM,CAACgD,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtB1B,IAAI,EAAE,CAACQ,SAAS,CAAC;QAAE;QACnBN,MAAM,EAAE,QAAQ;QAChBG,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDe,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFpD,EAAE,CAAC,sDAAsD,EAAE,YAAY;MACrE,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,EAAEU,SAAS,CAAC;QACrCC,UAAU,EAAE,CAAC;MACf,CAAC;MAED,MAAME,cAAuD,GAAG;QAC9DC,QAAQ,EAAEnB,gBAAgB;QAC1BoB,KAAK,EAAE;UACLb,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAC;MAED,MAAMa,OAAO,GAAG,IAAI7C,eAAe,CAACwC,cAAc,CAAC;MAEnDnC,EAAE,CAACyC,MAAM,CAAC1B,YAAY,CAACI,GAAG,CAAC,CAACiC,eAAe,CACzC,IAAIzD,eAAe,CAAC;QAClByC,QAAQ,EAAEL,UAAU;QACpBM,KAAK,EAAE/B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEU,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBZ,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;;MAED;MACA,MAAMmC,0BAA0B,GAAG9D,EAAE,CAACoB,EAAE,CAAC,MAAM;QAC7C,MAAM,IAAI2C,KAAK,CAAC,6BAA6B,CAAC;MAChD,CAAC,CAAC;MAEF,MAAMpB,WAAW,GAAGtC,iCAAiC,CACnDmC,OAAO,EACPzB,YAAY,EACZ+C,0BACF,CAAC;MAED,MAAMlB,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAG5C,YAAY,CAAc,CAAC;MAE5CyC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAM3C,WAAW,CAAC2C,QAAQ,CAACkB,KAAK,CAAC;;MAEjC;MACAlE,MAAM,CAACgD,QAAQ,CAACkB,KAAK,CAAC,CAACf,oBAAoB,CACzCnD,MAAM,CAACoD,gBAAgB,CAAC;QACtBe,OAAO,EAAE;MACX,CAAC,CACH,CAAC;MAEDrB,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"createCollectionConnectable.test.js","names":["BehaviorSubject","beforeEach","describe","expect","it","vi","createClientMockHelper","mockObserver","waitForCall","createCollectionConnectable","actualCreateCollectionConnectable","mockEmployee1","$apiName","$primaryKey","$objectType","$title","employeeId","fullName","mockEmployee2","mockEmployee3","mockSubjects","createPayload","mockListCacheKey","client","get","fn","type","otherKeys","params","data","resolvedData","status","isOptimistic","lastUpdated","count","length","objectKey1","undefined","__cacheKey","objectKey2","subjectPayload","cacheKey","value","Date","now","subject","mocked","mockImplementation","connectable","subscription","connect","observer","subscribe","next","toHaveBeenCalledWith","objectContaining","unsubscribe","mockReturnValue","basePayload","mockClear","objectKey3","initialPayload","observer1","observer2","toHaveBeenCalledTimes","not","toHaveBeenCalled","errorThrowingCreatePayload","Error","error","message"],"sources":["createCollectionConnectable.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 type { Employee } from \"@osdk/client.test.ontology\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { ObjectHolder } from \"../../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { Status } from \"../../ObservableClient/common.js\";\nimport type { CacheKey } from \"../CacheKey.js\";\nimport type { ObjectCacheKey } from \"../object/ObjectCacheKey.js\";\nimport type { SubjectPayload } from \"../SubjectPayload.js\";\nimport type { Subjects } from \"../Subjects.js\";\nimport {\n createClientMockHelper,\n mockObserver,\n waitForCall,\n} from \"../testUtils.js\";\nimport { createCollectionConnectable as actualCreateCollectionConnectable } from \"./createCollectionConnectable.js\";\n\n// Test payload type for our collection\ninterface TestPayload {\n data: any[];\n status: Status;\n isOptimistic: boolean;\n lastUpdated: number;\n count: number;\n}\n\n// Mock object instances for testing\nconst mockEmployee1: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 1,\n $objectType: \"Employee\",\n $title: \"Employee 1\",\n employeeId: 1,\n fullName: \"John Doe\",\n} as any;\n\nconst mockEmployee2: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 2,\n $objectType: \"Employee\",\n $title: \"Employee 2\",\n employeeId: 2,\n fullName: \"Jane Smith\",\n} as any;\n\nconst mockEmployee3: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 3,\n $objectType: \"Employee\",\n $title: \"Employee 3\",\n employeeId: 3,\n fullName: \"Bob Johnson\",\n} as any;\n\ndescribe(\"createCollectionConnectable\", () => {\n let mockSubjects: Subjects;\n let createPayload: ReturnType<typeof vi.fn>;\n let mockListCacheKey: CacheKey<any, any, any, any>;\n\n beforeEach(() => {\n const { client } = createClientMockHelper();\n\n mockSubjects = {\n get: vi.fn(),\n } as any;\n\n // Mock cache key for list\n mockListCacheKey = {\n type: \"list\",\n otherKeys: [\"Employee\", {}, {}],\n } as CacheKey<any, any, any, any>;\n\n // Create payload function that mimics real usage\n createPayload = vi.fn((params) => ({\n data: params.resolvedData,\n status: params.status,\n isOptimistic: params.isOptimistic,\n lastUpdated: params.lastUpdated,\n count: params.resolvedData.length,\n }));\n });\n\n describe(\"basic functionality\", () => {\n it(\"should create a connectable observable with resolved data\", async () => {\n // Mock object cache keys\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n // Create subject payload with mock data\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1, objectKey2],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject to return object observables\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n // Connect and subscribe\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // Wait for the observable to emit\n await waitForCall(observer);\n\n // Verify the result\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2],\n status: \"loaded\",\n isOptimistic: false,\n count: 2,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle empty data correctly\", async () => {\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [],\n status: \"loaded\",\n isOptimistic: false,\n count: 0,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle null/undefined data\", async () => {\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: null as any,\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [],\n status: \"loaded\",\n isOptimistic: false,\n count: 0,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"optimistic updates\", () => {\n it(\"should propagate optimistic flag correctly\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loading\",\n lastUpdated: Date.now(),\n isOptimistic: true, // This is an optimistic update\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"loading\",\n isOptimistic: true, // Should preserve optimistic flag\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"status transitions\", () => {\n it(\"should handle different status values\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const basePayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"init\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(basePayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // Wait for initial emission\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"init\",\n isOptimistic: false,\n count: 1,\n }),\n );\n\n observer.next.mockClear();\n\n // Test transition to loading\n subject.next({\n ...basePayload,\n status: \"loading\",\n lastUpdated: Date.now(),\n });\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"loading\",\n isOptimistic: false,\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"multiple objects\", () => {\n it(\"should handle multiple objects in collection\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const objectKey3: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 3, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1, objectKey2, objectKey3],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject for all three objects\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey3) {\n return new BehaviorSubject({\n cacheKey: objectKey3,\n value: mockEmployee3,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2, mockEmployee3],\n status: \"loaded\",\n isOptimistic: false,\n count: 3,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle objects being added/removed from collection\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n // Start with one object\n const initialPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(initialPayload);\n\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // First check - single object\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n observer.next.mockClear();\n\n // Add second object\n subject.next({\n ...initialPayload,\n value: {\n data: [objectKey1, objectKey2],\n },\n lastUpdated: Date.now(),\n });\n\n // Second check - two objects\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2],\n count: 2,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"subscription behavior\", () => {\n it(\"should support multiple subscribers\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer1 = mockObserver<TestPayload>();\n const observer2 = mockObserver<TestPayload>();\n\n connectable.subscribe(observer1);\n connectable.subscribe(observer2);\n\n await waitForCall(observer1);\n await waitForCall(observer2);\n\n // Both observers should receive the data\n expect(observer1.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n expect(observer2.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should use ReplaySubject behavior (last value replayed)\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer1 = mockObserver<TestPayload>();\n\n // Subscribe first observer\n connectable.subscribe(observer1);\n\n await waitForCall(observer1);\n expect(observer1.next).toHaveBeenCalledTimes(1);\n observer1.next.mockClear();\n\n // Subscribe second observer after first has already received data\n const observer2 = mockObserver<TestPayload>();\n connectable.subscribe(observer2);\n\n await waitForCall(observer2);\n\n // Second observer should immediately receive the last value (ReplaySubject behavior)\n expect(observer2.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n // First observer should not receive additional calls\n expect(observer1.next).not.toHaveBeenCalled();\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should handle store.getSubject returning undefined object entry\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject to return undefined entry - this creates an object with undefined value\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: undefined, // This is the key - undefined value\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n // Should handle undefined object entry gracefully\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [undefined],\n status: \"loaded\",\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle createPayload function throwing errors\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1, undefined],\n __cacheKey: {} as ObjectCacheKey[\"__cacheKey\"],\n };\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n // Mock createPayload to throw an error\n const errorThrowingCreatePayload = vi.fn(() => {\n throw new Error(\"Test error in createPayload\");\n });\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n errorThrowingCreatePayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer.error);\n\n // Should call the error handler\n expect(observer.error).toHaveBeenCalledWith(\n expect.objectContaining({\n message: \"Test error in createPayload\",\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -35,7 +35,7 @@ export function evaluateFilter(f, realValue, expected, strict) {
35
35
  case "$ne":
36
36
  return realValue !== expected;
37
37
  case "$in":
38
- return expected.$in.includes(realValue);
38
+ return Array.isArray(expected) && expected.includes(realValue);
39
39
  case "$isNull":
40
40
  return realValue == null;
41
41
  case "$startsWith":
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateFilter.js","names":["invariant","evaluateFilter","f","realValue","expected","strict","$in","includes","startsWith","process","env","NODE_ENV"],"sources":["evaluateFilter.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 invariant from \"tiny-invariant\";\n\n/**\n * Evaluates a where clause filter against a value.\n * This is a runtime evaluation function that handles different property types.\n */\nexport function evaluateFilter(\n f: PossibleWhereClauseFilters,\n realValue: any,\n expected: any,\n strict: boolean,\n): boolean {\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(expected);\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"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,OAAOA,SAAS,MAAM,gBAAgB;;AAEtC;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAC5BC,CAA6B,EAC7BC,SAAc,EACdC,QAAa,EACbC,MAAe,EACN;EACT,QAAQH,CAAC;IACP,KAAK,KAAK;MACR,OAAOC,SAAS,KAAKC,QAAQ;IAC/B,KAAK,KAAK;MACR,OAAOD,SAAS,GAAGC,QAAQ;IAC7B,KAAK,KAAK;MACR,OAAOD,SAAS,GAAGC,QAAQ;IAC7B,KAAK,MAAM;MACT,OAAOD,SAAS,IAAIC,QAAQ;IAC9B,KAAK,MAAM;MACT,OAAOD,SAAS,IAAIC,QAAQ;IAC9B,KAAK,KAAK;MACR,OAAOD,SAAS,KAAKC,QAAQ;IAC/B,KAAK,KAAK;MACR,OAAOA,QAAQ,CAACE,GAAG,CAACC,QAAQ,CAACJ,SAAS,CAAC;IACzC,KAAK,SAAS;MACZ,OAAOA,SAAS,IAAI,IAAI;IAC1B,KAAK,aAAa;MAChB,OAAOA,SAAS,CAACK,UAAU,CAACJ,QAAQ,CAAC;IACvC,KAAK,WAAW;IAChB,KAAK,mBAAmB;IACxB,KAAK,0BAA0B;IAC/B,KAAK,kBAAkB;IACvB,KAAK,aAAa;IAClB,KAAK,SAAS;MACZ;MACA;MACA,OAAO,CAACC,MAAM;IAEhB;MACE;MACA;MACA,IAAII,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;QAEzCF,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAAX,SAAS,QAAQ,wBAAwBE,CAAC,EAAE,IAA5CF,SAAS;MACX;MACA,OAAO,CAACK,MAAM;EAClB;AACF","ignoreList":[]}
1
+ {"version":3,"file":"evaluateFilter.js","names":["invariant","evaluateFilter","f","realValue","expected","strict","Array","isArray","includes","startsWith","process","env","NODE_ENV"],"sources":["evaluateFilter.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 invariant from \"tiny-invariant\";\n\n/**\n * Evaluates a where clause filter against a value.\n * This is a runtime evaluation function that handles different property types.\n */\nexport function evaluateFilter(\n f: PossibleWhereClauseFilters,\n realValue: any,\n expected: any,\n strict: boolean,\n): boolean {\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 Array.isArray(expected) && expected.includes(realValue);\n case \"$isNull\":\n return realValue == null;\n case \"$startsWith\":\n return realValue.startsWith(expected);\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"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,OAAOA,SAAS,MAAM,gBAAgB;;AAEtC;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAC5BC,CAA6B,EAC7BC,SAAc,EACdC,QAAa,EACbC,MAAe,EACN;EACT,QAAQH,CAAC;IACP,KAAK,KAAK;MACR,OAAOC,SAAS,KAAKC,QAAQ;IAC/B,KAAK,KAAK;MACR,OAAOD,SAAS,GAAGC,QAAQ;IAC7B,KAAK,KAAK;MACR,OAAOD,SAAS,GAAGC,QAAQ;IAC7B,KAAK,MAAM;MACT,OAAOD,SAAS,IAAIC,QAAQ;IAC9B,KAAK,MAAM;MACT,OAAOD,SAAS,IAAIC,QAAQ;IAC9B,KAAK,KAAK;MACR,OAAOD,SAAS,KAAKC,QAAQ;IAC/B,KAAK,KAAK;MACR,OAAOE,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,IAAIA,QAAQ,CAACI,QAAQ,CAACL,SAAS,CAAC;IAChE,KAAK,SAAS;MACZ,OAAOA,SAAS,IAAI,IAAI;IAC1B,KAAK,aAAa;MAChB,OAAOA,SAAS,CAACM,UAAU,CAACL,QAAQ,CAAC;IACvC,KAAK,WAAW;IAChB,KAAK,mBAAmB;IACxB,KAAK,0BAA0B;IAC/B,KAAK,kBAAkB;IACvB,KAAK,aAAa;IAClB,KAAK,SAAS;MACZ;MACA;MACA,OAAO,CAACC,MAAM;IAEhB;MACE;MACA;MACA,IAAIK,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;QAEzCF,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAAZ,SAAS,QAAQ,wBAAwBE,CAAC,EAAE,IAA5CF,SAAS;MACX;MACA,OAAO,CAACK,MAAM;EAClB;AACF","ignoreList":[]}
@@ -0,0 +1,105 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { describe, expect, it } from "vitest";
18
+ import { evaluateFilter } from "./evaluateFilter.js";
19
+ describe("evaluateFilter", () => {
20
+ describe("$in filter", () => {
21
+ it("returns true when value is in the array", () => {
22
+ expect(evaluateFilter("$in", 5, [1, 5, 10], true)).toBe(true);
23
+ expect(evaluateFilter("$in", "active", ["active", "pending"], true)).toBe(true);
24
+ });
25
+ it("returns false when value is not in the array", () => {
26
+ expect(evaluateFilter("$in", 7, [1, 5, 10], true)).toBe(false);
27
+ expect(evaluateFilter("$in", "deleted", ["active", "pending"], true)).toBe(false);
28
+ });
29
+ it("handles empty arrays", () => {
30
+ expect(evaluateFilter("$in", 5, [], true)).toBe(false);
31
+ });
32
+ it("handles undefined expected value gracefully", () => {
33
+ expect(evaluateFilter("$in", 5, undefined, true)).toBe(false);
34
+ });
35
+ it("handles null expected value gracefully", () => {
36
+ expect(evaluateFilter("$in", 5, null, true)).toBe(false);
37
+ });
38
+ it("handles non-array expected value gracefully", () => {
39
+ expect(evaluateFilter("$in", 5, {
40
+ $in: [1, 5, 10]
41
+ }, true)).toBe(false);
42
+ });
43
+ });
44
+ describe("comparison filters", () => {
45
+ it("$eq returns true for equal values", () => {
46
+ expect(evaluateFilter("$eq", 5, 5, true)).toBe(true);
47
+ expect(evaluateFilter("$eq", "test", "test", true)).toBe(true);
48
+ });
49
+ it("$eq returns false for unequal values", () => {
50
+ expect(evaluateFilter("$eq", 5, 6, true)).toBe(false);
51
+ });
52
+ it("$ne returns true for unequal values", () => {
53
+ expect(evaluateFilter("$ne", 5, 6, true)).toBe(true);
54
+ });
55
+ it("$gt returns true when value is greater", () => {
56
+ expect(evaluateFilter("$gt", 10, 5, true)).toBe(true);
57
+ expect(evaluateFilter("$gt", 5, 10, true)).toBe(false);
58
+ });
59
+ it("$lt returns true when value is less", () => {
60
+ expect(evaluateFilter("$lt", 5, 10, true)).toBe(true);
61
+ expect(evaluateFilter("$lt", 10, 5, true)).toBe(false);
62
+ });
63
+ it("$gte returns true when value is greater or equal", () => {
64
+ expect(evaluateFilter("$gte", 10, 5, true)).toBe(true);
65
+ expect(evaluateFilter("$gte", 5, 5, true)).toBe(true);
66
+ expect(evaluateFilter("$gte", 4, 5, true)).toBe(false);
67
+ });
68
+ it("$lte returns true when value is less or equal", () => {
69
+ expect(evaluateFilter("$lte", 5, 10, true)).toBe(true);
70
+ expect(evaluateFilter("$lte", 5, 5, true)).toBe(true);
71
+ expect(evaluateFilter("$lte", 6, 5, true)).toBe(false);
72
+ });
73
+ });
74
+ describe("string filters", () => {
75
+ it("$startsWith returns true when string starts with prefix", () => {
76
+ expect(evaluateFilter("$startsWith", "hello world", "hello", true)).toBe(true);
77
+ expect(evaluateFilter("$startsWith", "hello world", "world", true)).toBe(false);
78
+ });
79
+ });
80
+ describe("null checks", () => {
81
+ it("$isNull returns true for null values", () => {
82
+ expect(evaluateFilter("$isNull", null, true, true)).toBe(true);
83
+ expect(evaluateFilter("$isNull", undefined, true, true)).toBe(true);
84
+ });
85
+ it("$isNull returns false for non-null values", () => {
86
+ expect(evaluateFilter("$isNull", "value", true, true)).toBe(false);
87
+ expect(evaluateFilter("$isNull", 0, true, true)).toBe(false);
88
+ });
89
+ });
90
+ describe("strict vs loose mode", () => {
91
+ it("$contains returns false in strict mode", () => {
92
+ expect(evaluateFilter("$contains", "hello world", "world", true)).toBe(false);
93
+ });
94
+ it("$contains returns true in loose mode", () => {
95
+ expect(evaluateFilter("$contains", "hello world", "world", false)).toBe(true);
96
+ });
97
+ it("$intersects returns false in strict mode", () => {
98
+ expect(evaluateFilter("$intersects", {}, {}, true)).toBe(false);
99
+ });
100
+ it("$intersects returns true in loose mode", () => {
101
+ expect(evaluateFilter("$intersects", {}, {}, false)).toBe(true);
102
+ });
103
+ });
104
+ });
105
+ //# sourceMappingURL=evaluateFilter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluateFilter.test.js","names":["describe","expect","it","evaluateFilter","toBe","undefined","$in"],"sources":["evaluateFilter.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 { describe, expect, it } from \"vitest\";\nimport { evaluateFilter } from \"./evaluateFilter.js\";\n\ndescribe(\"evaluateFilter\", () => {\n describe(\"$in filter\", () => {\n it(\"returns true when value is in the array\", () => {\n expect(evaluateFilter(\"$in\", 5, [1, 5, 10], true)).toBe(true);\n expect(evaluateFilter(\"$in\", \"active\", [\"active\", \"pending\"], true)).toBe(\n true,\n );\n });\n\n it(\"returns false when value is not in the array\", () => {\n expect(evaluateFilter(\"$in\", 7, [1, 5, 10], true)).toBe(false);\n expect(evaluateFilter(\"$in\", \"deleted\", [\"active\", \"pending\"], true))\n .toBe(\n false,\n );\n });\n\n it(\"handles empty arrays\", () => {\n expect(evaluateFilter(\"$in\", 5, [], true)).toBe(false);\n });\n\n it(\"handles undefined expected value gracefully\", () => {\n expect(evaluateFilter(\"$in\", 5, undefined, true)).toBe(false);\n });\n\n it(\"handles null expected value gracefully\", () => {\n expect(evaluateFilter(\"$in\", 5, null, true)).toBe(false);\n });\n\n it(\"handles non-array expected value gracefully\", () => {\n expect(evaluateFilter(\"$in\", 5, { $in: [1, 5, 10] }, true)).toBe(false);\n });\n });\n\n describe(\"comparison filters\", () => {\n it(\"$eq returns true for equal values\", () => {\n expect(evaluateFilter(\"$eq\", 5, 5, true)).toBe(true);\n expect(evaluateFilter(\"$eq\", \"test\", \"test\", true)).toBe(true);\n });\n\n it(\"$eq returns false for unequal values\", () => {\n expect(evaluateFilter(\"$eq\", 5, 6, true)).toBe(false);\n });\n\n it(\"$ne returns true for unequal values\", () => {\n expect(evaluateFilter(\"$ne\", 5, 6, true)).toBe(true);\n });\n\n it(\"$gt returns true when value is greater\", () => {\n expect(evaluateFilter(\"$gt\", 10, 5, true)).toBe(true);\n expect(evaluateFilter(\"$gt\", 5, 10, true)).toBe(false);\n });\n\n it(\"$lt returns true when value is less\", () => {\n expect(evaluateFilter(\"$lt\", 5, 10, true)).toBe(true);\n expect(evaluateFilter(\"$lt\", 10, 5, true)).toBe(false);\n });\n\n it(\"$gte returns true when value is greater or equal\", () => {\n expect(evaluateFilter(\"$gte\", 10, 5, true)).toBe(true);\n expect(evaluateFilter(\"$gte\", 5, 5, true)).toBe(true);\n expect(evaluateFilter(\"$gte\", 4, 5, true)).toBe(false);\n });\n\n it(\"$lte returns true when value is less or equal\", () => {\n expect(evaluateFilter(\"$lte\", 5, 10, true)).toBe(true);\n expect(evaluateFilter(\"$lte\", 5, 5, true)).toBe(true);\n expect(evaluateFilter(\"$lte\", 6, 5, true)).toBe(false);\n });\n });\n\n describe(\"string filters\", () => {\n it(\"$startsWith returns true when string starts with prefix\", () => {\n expect(evaluateFilter(\"$startsWith\", \"hello world\", \"hello\", true)).toBe(\n true,\n );\n expect(evaluateFilter(\"$startsWith\", \"hello world\", \"world\", true)).toBe(\n false,\n );\n });\n });\n\n describe(\"null checks\", () => {\n it(\"$isNull returns true for null values\", () => {\n expect(evaluateFilter(\"$isNull\", null, true, true)).toBe(true);\n expect(evaluateFilter(\"$isNull\", undefined, true, true)).toBe(true);\n });\n\n it(\"$isNull returns false for non-null values\", () => {\n expect(evaluateFilter(\"$isNull\", \"value\", true, true)).toBe(false);\n expect(evaluateFilter(\"$isNull\", 0, true, true)).toBe(false);\n });\n });\n\n describe(\"strict vs loose mode\", () => {\n it(\"$contains returns false in strict mode\", () => {\n expect(evaluateFilter(\"$contains\", \"hello world\", \"world\", true)).toBe(\n false,\n );\n });\n\n it(\"$contains returns true in loose mode\", () => {\n expect(evaluateFilter(\"$contains\", \"hello world\", \"world\", false)).toBe(\n true,\n );\n });\n\n it(\"$intersects returns false in strict mode\", () => {\n expect(evaluateFilter(\"$intersects\", {}, {}, true)).toBe(false);\n });\n\n it(\"$intersects returns true in loose mode\", () => {\n expect(evaluateFilter(\"$intersects\", {}, {}, false)).toBe(true);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ // Index constants for accessing otherKeys array elements
18
+ export const API_NAME_IDX = 0;
19
+ export const VERSION_IDX = 1;
20
+ export const PARAMS_IDX = 2;
21
+
22
+ /**
23
+ * Cache values use `unknown` because FunctionQuery handles any QueryDefinition at runtime.
24
+ * Concrete typing is preserved at the API layer via generics and cast at output.
25
+ */
26
+ //# sourceMappingURL=FunctionCacheKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FunctionCacheKey.js","names":["API_NAME_IDX","VERSION_IDX","PARAMS_IDX"],"sources":["FunctionCacheKey.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 { CacheKey } from \"../CacheKey.js\";\nimport type { Canonical } from \"../Canonical.js\";\nimport type { CanonicalFunctionParams } from \"./FunctionParamsCanonicalizer.js\";\nimport type { FunctionQuery } from \"./FunctionQuery.js\";\n\n// Index constants for accessing otherKeys array elements\nexport const API_NAME_IDX = 0;\nexport const VERSION_IDX = 1;\nexport const PARAMS_IDX = 2;\n\n/**\n * Cache values use `unknown` because FunctionQuery handles any QueryDefinition at runtime.\n * Concrete typing is preserved at the API layer via generics and cast at output.\n */\nexport interface FunctionCacheValue {\n result: unknown;\n executedAt: number;\n error?: Error;\n}\n\nexport interface FunctionCacheKey extends\n CacheKey<\n \"function\",\n FunctionCacheValue,\n FunctionQuery,\n [\n apiName: string,\n version: string | undefined,\n canonicalParams: Canonical<CanonicalFunctionParams> | undefined,\n ]\n >\n{}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA,OAAO,MAAMA,YAAY,GAAG,CAAC;AAC7B,OAAO,MAAMC,WAAW,GAAG,CAAC;AAC5B,OAAO,MAAMC,UAAU,GAAG,CAAC;;AAE3B;AACA;AACA;AACA","ignoreList":[]}
@@ -0,0 +1,151 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { Trie } from "@wry/trie";
18
+ import { getWireObjectSet, isObjectSet } from "../../../objectSet/createObjectSet.js";
19
+ import { isObjectSpecifiersObject } from "../../../util/isObjectSpecifiersObject.js";
20
+ // Path markers use "$:" prefix. User data with this prefix is unlikely but could
21
+ // theoretically cause collisions if it matches the exact marker sequence.
22
+ function isPrimitiveValue(value) {
23
+ if (value == null) return true;
24
+ const t = typeof value;
25
+ return t === "string" || t === "number" || t === "boolean" || t === "bigint";
26
+ }
27
+ export class FunctionParamsCanonicalizer {
28
+ #inputCache = new WeakMap();
29
+ #trie = new Trie(false);
30
+ #canonicalByMarker = new WeakMap();
31
+ canonicalize(params) {
32
+ if (params == null) {
33
+ return undefined;
34
+ }
35
+ if (this.#inputCache.has(params)) {
36
+ return this.#inputCache.get(params);
37
+ }
38
+ const seen = new WeakSet();
39
+ const path = [];
40
+ const canonicalValue = this.#encodeAndBuild(params, path, seen);
41
+ const marker = this.#trie.lookupArray(path);
42
+ let canonical = this.#canonicalByMarker.get(marker);
43
+ if (canonical === undefined) {
44
+ canonical = canonicalValue;
45
+ this.#canonicalByMarker.set(marker, canonical);
46
+ }
47
+ this.#inputCache.set(params, canonical);
48
+ return canonical;
49
+ }
50
+ #encodeAndBuild(value, path, seen) {
51
+ if (value == null) {
52
+ path.push(value);
53
+ return value;
54
+ }
55
+ if (isPrimitiveValue(value)) {
56
+ path.push(value);
57
+ return value;
58
+ }
59
+
60
+ // Poor man's circular reference detection, we should improve this if this turns into a problem
61
+ if (seen.has(value)) {
62
+ throw new Error("Circular reference in function parameters");
63
+ }
64
+ seen.add(value);
65
+ if (value instanceof Date) {
66
+ const iso = value.toISOString();
67
+ path.push("$:date", iso);
68
+ return iso;
69
+ }
70
+ if (Array.isArray(value)) {
71
+ path.push("$:array");
72
+ const arr = value.map(item => this.#encodeAndBuild(item, path, seen));
73
+ path.push("$:array_end");
74
+ return arr;
75
+ }
76
+ if (value instanceof Set) {
77
+ path.push("$:set");
78
+ const sorted = this.#sortSetValues(Array.from(value));
79
+ const arr = sorted.map(item => this.#encodeAndBuild(item, path, seen));
80
+ path.push("$:set_end");
81
+ return arr;
82
+ }
83
+ if (value instanceof Map) {
84
+ path.push("$:map");
85
+ const sorted = this.#sortMapEntries(Array.from(value.entries()));
86
+ const arr = sorted.map(([k, v]) => [this.#encodeAndBuild(k, path, seen), this.#encodeAndBuild(v, path, seen)]);
87
+ path.push("$:map_end");
88
+ return arr;
89
+ }
90
+ if (isObjectSpecifiersObject(value)) {
91
+ const objectType = value.$objectType ?? value.$apiName;
92
+ path.push("$:osdk", objectType, value.$primaryKey);
93
+ return {
94
+ $apiName: objectType,
95
+ $primaryKey: value.$primaryKey
96
+ };
97
+ }
98
+ if (isObjectSet(value)) {
99
+ const wire = getWireObjectSet(value);
100
+ path.push("$:objectset", wire);
101
+ return wire;
102
+ }
103
+ const obj = value;
104
+ path.push("$:object");
105
+ const canonical = {};
106
+ for (const key of Object.keys(obj).sort()) {
107
+ path.push(key);
108
+ canonical[key] = this.#encodeAndBuild(obj[key], path, seen);
109
+ }
110
+ path.push("$:object_end");
111
+ return canonical;
112
+ }
113
+ #comparePrimitives(a, b) {
114
+ const ta = typeof a;
115
+ const tb = typeof b;
116
+ if (ta !== tb) return ta.localeCompare(tb);
117
+ if (ta === "string") return a.localeCompare(b);
118
+ if (ta === "number") {
119
+ const an = a;
120
+ const bn = b;
121
+ if (Number.isNaN(an) && Number.isNaN(bn)) return 0;
122
+ if (Number.isNaN(an)) return 1;
123
+ if (Number.isNaN(bn)) return -1;
124
+ return an - bn;
125
+ }
126
+ if (ta === "boolean") return (a ? 1 : 0) - (b ? 1 : 0);
127
+ if (ta === "bigint") {
128
+ const ab = a;
129
+ const bb = b;
130
+ return ab < bb ? -1 : ab > bb ? 1 : 0;
131
+ }
132
+ return 0;
133
+ }
134
+ #sortSetValues(items) {
135
+ return items.slice().sort((a, b) => {
136
+ if (isPrimitiveValue(a) && isPrimitiveValue(b)) {
137
+ return this.#comparePrimitives(a, b);
138
+ }
139
+ return JSON.stringify(a).localeCompare(JSON.stringify(b));
140
+ });
141
+ }
142
+ #sortMapEntries(entries) {
143
+ return entries.slice().sort(([a], [b]) => {
144
+ if (isPrimitiveValue(a) && isPrimitiveValue(b)) {
145
+ return this.#comparePrimitives(a, b);
146
+ }
147
+ return JSON.stringify(a).localeCompare(JSON.stringify(b));
148
+ });
149
+ }
150
+ }
151
+ //# sourceMappingURL=FunctionParamsCanonicalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FunctionParamsCanonicalizer.js","names":["Trie","getWireObjectSet","isObjectSet","isObjectSpecifiersObject","isPrimitiveValue","value","t","FunctionParamsCanonicalizer","inputCache","WeakMap","trie","canonicalByMarker","canonicalize","params","undefined","has","get","seen","WeakSet","path","canonicalValue","encodeAndBuild","marker","lookupArray","canonical","set","#encodeAndBuild","push","Error","add","Date","iso","toISOString","Array","isArray","arr","map","item","Set","sorted","sortSetValues","from","Map","sortMapEntries","entries","k","v","objectType","$objectType","$apiName","$primaryKey","wire","obj","key","Object","keys","sort","comparePrimitives","#comparePrimitives","a","b","ta","tb","localeCompare","an","bn","Number","isNaN","ab","bb","#sortSetValues","items","slice","JSON","stringify","#sortMapEntries"],"sources":["FunctionParamsCanonicalizer.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 { ObjectSet as WireObjectSet } from \"@osdk/foundry.ontologies\";\nimport { Trie } from \"@wry/trie\";\nimport {\n getWireObjectSet,\n isObjectSet,\n} from \"../../../objectSet/createObjectSet.js\";\nimport { isObjectSpecifiersObject } from \"../../../util/isObjectSpecifiersObject.js\";\nimport type { Canonical } from \"../Canonical.js\";\n\nexport type CanonicalFunctionParams = Record<string, CanonicalValue>;\n\ntype PrimitiveValue = string | number | boolean | bigint | null | undefined;\n\ntype OsdkObjectRef = { $apiName: string; $primaryKey: string | number };\n\ntype CanonicalValue =\n | PrimitiveValue\n | OsdkObjectRef\n | WireObjectSet\n | CanonicalValue[]\n | [CanonicalValue, CanonicalValue][]\n | { [key: string]: CanonicalValue };\n\ntype PathElement = PrimitiveValue | WireObjectSet;\n\n// Path markers use \"$:\" prefix. User data with this prefix is unlikely but could\n// theoretically cause collisions if it matches the exact marker sequence.\nfunction isPrimitiveValue(value: unknown): value is PrimitiveValue {\n if (value == null) return true;\n const t = typeof value;\n return t === \"string\" || t === \"number\" || t === \"boolean\" || t === \"bigint\";\n}\n\nexport class FunctionParamsCanonicalizer {\n #inputCache = new WeakMap<\n Record<string, unknown>,\n Canonical<CanonicalFunctionParams>\n >();\n #trie = new Trie<object>(false);\n #canonicalByMarker = new WeakMap<\n object,\n Canonical<CanonicalFunctionParams>\n >();\n\n public canonicalize(\n params: Record<string, unknown> | undefined | null,\n ): Canonical<CanonicalFunctionParams> | undefined {\n if (params == null) {\n return undefined;\n }\n\n if (this.#inputCache.has(params)) {\n return this.#inputCache.get(params);\n }\n\n const seen = new WeakSet<object>();\n const path: PathElement[] = [];\n const canonicalValue = this.#encodeAndBuild(\n params,\n path,\n seen,\n ) as CanonicalFunctionParams;\n\n const marker = this.#trie.lookupArray(path);\n let canonical = this.#canonicalByMarker.get(marker);\n if (canonical === undefined) {\n canonical = canonicalValue as Canonical<CanonicalFunctionParams>;\n this.#canonicalByMarker.set(marker, canonical);\n }\n\n this.#inputCache.set(params, canonical);\n return canonical;\n }\n\n #encodeAndBuild(\n value: unknown,\n path: PathElement[],\n seen: WeakSet<object>,\n ): CanonicalValue {\n if (value == null) {\n path.push(value);\n return value;\n }\n\n if (isPrimitiveValue(value)) {\n path.push(value);\n return value;\n }\n\n // Poor man's circular reference detection, we should improve this if this turns into a problem\n if (seen.has(value as object)) {\n throw new Error(\"Circular reference in function parameters\");\n }\n seen.add(value as object);\n\n if (value instanceof Date) {\n const iso = value.toISOString();\n path.push(\"$:date\", iso);\n return iso;\n }\n\n if (Array.isArray(value)) {\n path.push(\"$:array\");\n const arr = value.map(item => this.#encodeAndBuild(item, path, seen));\n path.push(\"$:array_end\");\n return arr;\n }\n\n if (value instanceof Set) {\n path.push(\"$:set\");\n const sorted = this.#sortSetValues(Array.from(value));\n const arr = sorted.map(item => this.#encodeAndBuild(item, path, seen));\n path.push(\"$:set_end\");\n return arr;\n }\n\n if (value instanceof Map) {\n path.push(\"$:map\");\n const sorted = this.#sortMapEntries(Array.from(value.entries()));\n const arr: [CanonicalValue, CanonicalValue][] = sorted.map(([k, v]) => [\n this.#encodeAndBuild(k, path, seen),\n this.#encodeAndBuild(v, path, seen),\n ]);\n path.push(\"$:map_end\");\n return arr;\n }\n\n if (isObjectSpecifiersObject(value)) {\n const objectType = value.$objectType ?? value.$apiName;\n path.push(\"$:osdk\", objectType, value.$primaryKey);\n return { $apiName: objectType, $primaryKey: value.$primaryKey };\n }\n\n if (isObjectSet(value)) {\n const wire = getWireObjectSet(value);\n path.push(\"$:objectset\", wire);\n return wire;\n }\n\n const obj = value as Record<string, unknown>;\n path.push(\"$:object\");\n const canonical: Record<string, CanonicalValue> = {};\n for (const key of Object.keys(obj).sort()) {\n path.push(key);\n canonical[key] = this.#encodeAndBuild(obj[key], path, seen);\n }\n path.push(\"$:object_end\");\n return canonical;\n }\n\n #comparePrimitives(a: PrimitiveValue, b: PrimitiveValue): number {\n const ta = typeof a;\n const tb = typeof b;\n if (ta !== tb) return ta.localeCompare(tb);\n if (ta === \"string\") return (a as string).localeCompare(b as string);\n if (ta === \"number\") {\n const an = a as number;\n const bn = b as number;\n if (Number.isNaN(an) && Number.isNaN(bn)) return 0;\n if (Number.isNaN(an)) return 1;\n if (Number.isNaN(bn)) return -1;\n return an - bn;\n }\n if (ta === \"boolean\") return (a ? 1 : 0) - (b ? 1 : 0);\n if (ta === \"bigint\") {\n const ab = a as bigint;\n const bb = b as bigint;\n return ab < bb ? -1 : ab > bb ? 1 : 0;\n }\n return 0;\n }\n\n #sortSetValues<T>(items: T[]): T[] {\n return items.slice().sort((a, b) => {\n if (isPrimitiveValue(a) && isPrimitiveValue(b)) {\n return this.#comparePrimitives(a, b);\n }\n return JSON.stringify(a).localeCompare(JSON.stringify(b));\n });\n }\n\n #sortMapEntries<K, V>(entries: [K, V][]): [K, V][] {\n return entries.slice().sort(([a], [b]) => {\n if (isPrimitiveValue(a) && isPrimitiveValue(b)) {\n return this.#comparePrimitives(a, b);\n }\n return JSON.stringify(a).localeCompare(JSON.stringify(b));\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}