@osdk/client 2.7.0-beta.9 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/CHANGELOG.md +236 -0
  2. package/build/browser/MinimalClientContext.js.map +1 -1
  3. package/build/browser/actions/actions.test.js +9 -8
  4. package/build/browser/actions/actions.test.js.map +1 -1
  5. package/build/browser/actions/applyAction.js +0 -4
  6. package/build/browser/actions/applyAction.js.map +1 -1
  7. package/build/browser/createClient.js +1 -2
  8. package/build/browser/createClient.js.map +1 -1
  9. package/build/browser/createMinimalClient.js +0 -1
  10. package/build/browser/createMinimalClient.js.map +1 -1
  11. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +1 -17
  12. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  13. package/build/browser/index.js +1 -1
  14. package/build/browser/index.js.map +1 -1
  15. package/build/browser/internal/conversions/modernToLegacyWhereClause.js +14 -9
  16. package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  17. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
  18. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  19. package/build/browser/object/SimpleOsdkProperties.js.map +1 -1
  20. package/build/browser/object/aggregate.js +0 -1
  21. package/build/browser/object/aggregate.js.map +1 -1
  22. package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
  23. package/build/browser/object/fetchPage.js +0 -2
  24. package/build/browser/object/fetchPage.js.map +1 -1
  25. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +13 -4
  26. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  27. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
  28. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  29. package/build/browser/objectSet/createObjectSet.js +1 -1
  30. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  31. package/build/browser/objectSet/fetchLinksPage.js +0 -1
  32. package/build/browser/objectSet/fetchLinksPage.js.map +1 -1
  33. package/build/browser/observable/FunctionPayload.js +2 -0
  34. package/build/browser/observable/FunctionPayload.js.map +1 -0
  35. package/build/browser/observable/ObservableClient.js.map +1 -1
  36. package/build/browser/observable/internal/BulkObjectLoader.js +2 -1
  37. package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
  38. package/build/browser/observable/internal/Changes.js +4 -1
  39. package/build/browser/observable/internal/Changes.js.map +1 -1
  40. package/build/browser/observable/internal/KnownCacheKey.js.map +1 -1
  41. package/build/browser/observable/internal/ObservableClientImpl.js +21 -1
  42. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  43. package/build/browser/observable/internal/RidListCanonicalizer.js +30 -0
  44. package/build/browser/observable/internal/RidListCanonicalizer.js.map +1 -0
  45. package/build/browser/observable/internal/RidListCanonicalizer.test.js +50 -0
  46. package/build/browser/observable/internal/RidListCanonicalizer.test.js.map +1 -0
  47. package/build/browser/observable/internal/Store.js +11 -1
  48. package/build/browser/observable/internal/Store.js.map +1 -1
  49. package/build/browser/observable/internal/Store.test.js +57 -4
  50. package/build/browser/observable/internal/Store.test.js.map +1 -1
  51. package/build/browser/observable/internal/actions/ActionApplication.js +12 -9
  52. package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -1
  53. package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
  54. package/build/browser/observable/internal/base-list/BaseListQuery.js +15 -9
  55. package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
  56. package/build/browser/observable/internal/base-list/createCollectionConnectable.js +4 -2
  57. package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
  58. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js +1 -2
  59. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
  60. package/build/browser/observable/internal/evaluateFilter.js +1 -1
  61. package/build/browser/observable/internal/evaluateFilter.js.map +1 -1
  62. package/build/browser/observable/internal/evaluateFilter.test.js +105 -0
  63. package/build/browser/observable/internal/evaluateFilter.test.js.map +1 -0
  64. package/build/browser/observable/internal/function/FunctionCacheKey.js +26 -0
  65. package/build/browser/observable/internal/function/FunctionCacheKey.js.map +1 -0
  66. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js +151 -0
  67. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -0
  68. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.test.js +186 -0
  69. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.test.js.map +1 -0
  70. package/build/browser/observable/internal/function/FunctionQuery.js +137 -0
  71. package/build/browser/observable/internal/function/FunctionQuery.js.map +1 -0
  72. package/build/browser/observable/internal/function/FunctionQuery.test.js +278 -0
  73. package/build/browser/observable/internal/function/FunctionQuery.test.js.map +1 -0
  74. package/build/browser/observable/internal/function/FunctionsHelper.js +92 -0
  75. package/build/browser/observable/internal/function/FunctionsHelper.js.map +1 -0
  76. package/build/browser/observable/internal/links/SpecificLinkQuery.js +2 -1
  77. package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -1
  78. package/build/browser/observable/internal/list/InterfaceListQuery.js +27 -10
  79. package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
  80. package/build/browser/observable/internal/list/ListCacheKey.js +1 -0
  81. package/build/browser/observable/internal/list/ListCacheKey.js.map +1 -1
  82. package/build/browser/observable/internal/list/ListQuery.js +10 -4
  83. package/build/browser/observable/internal/list/ListQuery.js.map +1 -1
  84. package/build/browser/observable/internal/list/ListQuery.test.js +167 -3
  85. package/build/browser/observable/internal/list/ListQuery.test.js.map +1 -1
  86. package/build/browser/observable/internal/list/ListsHelper.js +6 -3
  87. package/build/browser/observable/internal/list/ListsHelper.js.map +1 -1
  88. package/build/browser/observable/internal/list/ObjectListQuery.js +23 -9
  89. package/build/browser/observable/internal/list/ObjectListQuery.js.map +1 -1
  90. package/build/browser/observable/internal/object/ObjectQuery.js +15 -1
  91. package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -1
  92. package/build/browser/observable/internal/object/ObjectsHelper.js +1 -3
  93. package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
  94. package/build/browser/observable/internal/objectMatchesWhereClause.test.js +11 -1
  95. package/build/browser/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  96. package/build/browser/observable/internal/objectset/ObjectSetQuery.js +6 -2
  97. package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  98. package/build/browser/observable/internal/testUtils.js +8 -5
  99. package/build/browser/observable/internal/testUtils.js.map +1 -1
  100. package/build/browser/observable/internal/utils/rdpFieldOperations.js +6 -3
  101. package/build/browser/observable/internal/utils/rdpFieldOperations.js.map +1 -1
  102. package/build/browser/ontology/loadActionMetadata.js +1 -3
  103. package/build/browser/ontology/loadActionMetadata.js.map +1 -1
  104. package/build/browser/ontology/loadFullObjectMetadata.js +1 -2
  105. package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
  106. package/build/browser/ontology/loadInterfaceMetadata.js +1 -2
  107. package/build/browser/ontology/loadInterfaceMetadata.js.map +1 -1
  108. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  109. package/build/browser/queries/applyQuery.js +14 -0
  110. package/build/browser/queries/applyQuery.js.map +1 -1
  111. package/build/browser/queries/queries.test.js +14 -2
  112. package/build/browser/queries/queries.test.js.map +1 -1
  113. package/build/browser/util/UserAgent.js +2 -2
  114. package/build/browser/util/UserAgent.js.map +1 -1
  115. package/build/browser/util/isObjectSpecifiersObject.js.map +1 -1
  116. package/build/browser/util/toDataValue.js +0 -5
  117. package/build/browser/util/toDataValue.js.map +1 -1
  118. package/build/browser/util/toDataValue.test.js +2 -7
  119. package/build/browser/util/toDataValue.test.js.map +1 -1
  120. package/build/cjs/{Client-DaUJl7jZ.d.cts → Client-Cmx6x_V1.d.cts} +1 -1
  121. package/build/cjs/{chunk-IQJTM3KW.cjs → chunk-W4BHRZWL.cjs} +79 -82
  122. package/build/cjs/chunk-W4BHRZWL.cjs.map +1 -0
  123. package/build/cjs/{chunk-PARVKNVB.cjs → chunk-Y362HOIZ.cjs} +30 -35
  124. package/build/cjs/chunk-Y362HOIZ.cjs.map +1 -0
  125. package/build/cjs/{createClient-D5G3qzAO.d.cts → createClient-BDmrDOzZ.d.cts} +1 -2
  126. package/build/cjs/index.cjs +8 -12
  127. package/build/cjs/index.cjs.map +1 -1
  128. package/build/cjs/index.d.cts +3 -3
  129. package/build/cjs/public/internal.cjs +8 -8
  130. package/build/cjs/public/internal.d.cts +1 -1
  131. package/build/cjs/public/unstable-do-not-use.cjs +537 -95
  132. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  133. package/build/cjs/public/unstable-do-not-use.d.cts +75 -4
  134. package/build/esm/MinimalClientContext.js.map +1 -1
  135. package/build/esm/actions/actions.test.js +9 -8
  136. package/build/esm/actions/actions.test.js.map +1 -1
  137. package/build/esm/actions/applyAction.js +0 -4
  138. package/build/esm/actions/applyAction.js.map +1 -1
  139. package/build/esm/createClient.js +1 -2
  140. package/build/esm/createClient.js.map +1 -1
  141. package/build/esm/createMinimalClient.js +0 -1
  142. package/build/esm/createMinimalClient.js.map +1 -1
  143. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +1 -17
  144. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  145. package/build/esm/index.js +1 -1
  146. package/build/esm/index.js.map +1 -1
  147. package/build/esm/internal/conversions/modernToLegacyWhereClause.js +14 -9
  148. package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  149. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
  150. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  151. package/build/esm/object/SimpleOsdkProperties.js.map +1 -1
  152. package/build/esm/object/aggregate.js +0 -1
  153. package/build/esm/object/aggregate.js.map +1 -1
  154. package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
  155. package/build/esm/object/fetchPage.js +0 -2
  156. package/build/esm/object/fetchPage.js.map +1 -1
  157. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +13 -4
  158. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  159. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
  160. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  161. package/build/esm/objectSet/createObjectSet.js +1 -1
  162. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  163. package/build/esm/objectSet/fetchLinksPage.js +0 -1
  164. package/build/esm/objectSet/fetchLinksPage.js.map +1 -1
  165. package/build/esm/observable/FunctionPayload.js +2 -0
  166. package/build/esm/observable/FunctionPayload.js.map +1 -0
  167. package/build/esm/observable/ObservableClient.js.map +1 -1
  168. package/build/esm/observable/internal/BulkObjectLoader.js +2 -1
  169. package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
  170. package/build/esm/observable/internal/Changes.js +4 -1
  171. package/build/esm/observable/internal/Changes.js.map +1 -1
  172. package/build/esm/observable/internal/KnownCacheKey.js.map +1 -1
  173. package/build/esm/observable/internal/ObservableClientImpl.js +21 -1
  174. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  175. package/build/esm/observable/internal/RidListCanonicalizer.js +30 -0
  176. package/build/esm/observable/internal/RidListCanonicalizer.js.map +1 -0
  177. package/build/esm/observable/internal/RidListCanonicalizer.test.js +50 -0
  178. package/build/esm/observable/internal/RidListCanonicalizer.test.js.map +1 -0
  179. package/build/esm/observable/internal/Store.js +11 -1
  180. package/build/esm/observable/internal/Store.js.map +1 -1
  181. package/build/esm/observable/internal/Store.test.js +57 -4
  182. package/build/esm/observable/internal/Store.test.js.map +1 -1
  183. package/build/esm/observable/internal/actions/ActionApplication.js +12 -9
  184. package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -1
  185. package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
  186. package/build/esm/observable/internal/base-list/BaseListQuery.js +15 -9
  187. package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
  188. package/build/esm/observable/internal/base-list/createCollectionConnectable.js +4 -2
  189. package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
  190. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js +1 -2
  191. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
  192. package/build/esm/observable/internal/evaluateFilter.js +1 -1
  193. package/build/esm/observable/internal/evaluateFilter.js.map +1 -1
  194. package/build/esm/observable/internal/evaluateFilter.test.js +105 -0
  195. package/build/esm/observable/internal/evaluateFilter.test.js.map +1 -0
  196. package/build/esm/observable/internal/function/FunctionCacheKey.js +26 -0
  197. package/build/esm/observable/internal/function/FunctionCacheKey.js.map +1 -0
  198. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js +151 -0
  199. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -0
  200. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.test.js +186 -0
  201. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.test.js.map +1 -0
  202. package/build/esm/observable/internal/function/FunctionQuery.js +137 -0
  203. package/build/esm/observable/internal/function/FunctionQuery.js.map +1 -0
  204. package/build/esm/observable/internal/function/FunctionQuery.test.js +278 -0
  205. package/build/esm/observable/internal/function/FunctionQuery.test.js.map +1 -0
  206. package/build/esm/observable/internal/function/FunctionsHelper.js +92 -0
  207. package/build/esm/observable/internal/function/FunctionsHelper.js.map +1 -0
  208. package/build/esm/observable/internal/links/SpecificLinkQuery.js +2 -1
  209. package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -1
  210. package/build/esm/observable/internal/list/InterfaceListQuery.js +27 -10
  211. package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
  212. package/build/esm/observable/internal/list/ListCacheKey.js +1 -0
  213. package/build/esm/observable/internal/list/ListCacheKey.js.map +1 -1
  214. package/build/esm/observable/internal/list/ListQuery.js +10 -4
  215. package/build/esm/observable/internal/list/ListQuery.js.map +1 -1
  216. package/build/esm/observable/internal/list/ListQuery.test.js +167 -3
  217. package/build/esm/observable/internal/list/ListQuery.test.js.map +1 -1
  218. package/build/esm/observable/internal/list/ListsHelper.js +6 -3
  219. package/build/esm/observable/internal/list/ListsHelper.js.map +1 -1
  220. package/build/esm/observable/internal/list/ObjectListQuery.js +23 -9
  221. package/build/esm/observable/internal/list/ObjectListQuery.js.map +1 -1
  222. package/build/esm/observable/internal/object/ObjectQuery.js +15 -1
  223. package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -1
  224. package/build/esm/observable/internal/object/ObjectsHelper.js +1 -3
  225. package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
  226. package/build/esm/observable/internal/objectMatchesWhereClause.test.js +11 -1
  227. package/build/esm/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  228. package/build/esm/observable/internal/objectset/ObjectSetQuery.js +6 -2
  229. package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  230. package/build/esm/observable/internal/testUtils.js +8 -5
  231. package/build/esm/observable/internal/testUtils.js.map +1 -1
  232. package/build/esm/observable/internal/utils/rdpFieldOperations.js +6 -3
  233. package/build/esm/observable/internal/utils/rdpFieldOperations.js.map +1 -1
  234. package/build/esm/ontology/loadActionMetadata.js +1 -3
  235. package/build/esm/ontology/loadActionMetadata.js.map +1 -1
  236. package/build/esm/ontology/loadFullObjectMetadata.js +1 -2
  237. package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
  238. package/build/esm/ontology/loadInterfaceMetadata.js +1 -2
  239. package/build/esm/ontology/loadInterfaceMetadata.js.map +1 -1
  240. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  241. package/build/esm/queries/applyQuery.js +14 -0
  242. package/build/esm/queries/applyQuery.js.map +1 -1
  243. package/build/esm/queries/queries.test.js +14 -2
  244. package/build/esm/queries/queries.test.js.map +1 -1
  245. package/build/esm/util/UserAgent.js +2 -2
  246. package/build/esm/util/UserAgent.js.map +1 -1
  247. package/build/esm/util/isObjectSpecifiersObject.js.map +1 -1
  248. package/build/esm/util/toDataValue.js +0 -5
  249. package/build/esm/util/toDataValue.js.map +1 -1
  250. package/build/esm/util/toDataValue.test.js +2 -7
  251. package/build/esm/util/toDataValue.test.js.map +1 -1
  252. package/build/types/MinimalClientContext.d.ts +1 -1
  253. package/build/types/actions/applyAction.d.ts.map +1 -1
  254. package/build/types/createClient.d.ts +0 -1
  255. package/build/types/createClient.d.ts.map +1 -1
  256. package/build/types/index.d.ts +1 -1
  257. package/build/types/index.d.ts.map +1 -1
  258. package/build/types/objectSet/createObjectSet.d.ts +14 -1
  259. package/build/types/objectSet/createObjectSet.d.ts.map +1 -1
  260. package/build/types/objectSet/fetchLinksPage.d.ts +9 -1
  261. package/build/types/objectSet/fetchLinksPage.d.ts.map +1 -1
  262. package/build/types/observable/FunctionPayload.d.ts +10 -0
  263. package/build/types/observable/FunctionPayload.d.ts.map +1 -0
  264. package/build/types/observable/ObservableClient.d.ts +73 -1
  265. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  266. package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
  267. package/build/types/observable/internal/Changes.d.ts +5 -3
  268. package/build/types/observable/internal/Changes.d.ts.map +1 -1
  269. package/build/types/observable/internal/KnownCacheKey.d.ts +2 -1
  270. package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -1
  271. package/build/types/observable/internal/RidListCanonicalizer.d.ts +5 -0
  272. package/build/types/observable/internal/RidListCanonicalizer.d.ts.map +1 -0
  273. package/build/types/observable/internal/RidListCanonicalizer.test.d.ts +1 -0
  274. package/build/types/observable/internal/RidListCanonicalizer.test.d.ts.map +1 -0
  275. package/build/types/observable/internal/Store.d.ts +7 -1
  276. package/build/types/observable/internal/Store.d.ts.map +1 -1
  277. package/build/types/observable/internal/Store.test.d.ts.map +1 -1
  278. package/build/types/observable/internal/actions/ActionApplication.d.ts.map +1 -1
  279. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts +3 -0
  280. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts.map +1 -1
  281. package/build/types/observable/internal/base-list/BaseListQuery.d.ts +3 -1
  282. package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -1
  283. package/build/types/observable/internal/evaluateFilter.test.d.ts +1 -0
  284. package/build/types/observable/internal/evaluateFilter.test.d.ts.map +1 -0
  285. package/build/types/observable/internal/function/FunctionCacheKey.d.ts +17 -0
  286. package/build/types/observable/internal/function/FunctionCacheKey.d.ts.map +1 -0
  287. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts +16 -0
  288. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts.map +1 -0
  289. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.test.d.ts +1 -0
  290. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.test.d.ts.map +1 -0
  291. package/build/types/observable/internal/function/FunctionQuery.d.ts +40 -0
  292. package/build/types/observable/internal/function/FunctionQuery.d.ts.map +1 -0
  293. package/build/types/observable/internal/function/FunctionQuery.test.d.ts +1 -0
  294. package/build/types/observable/internal/function/FunctionQuery.test.d.ts.map +1 -0
  295. package/build/types/observable/internal/function/FunctionsHelper.d.ts +25 -0
  296. package/build/types/observable/internal/function/FunctionsHelper.d.ts.map +1 -0
  297. package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -1
  298. package/build/types/observable/internal/list/InterfaceListQuery.d.ts +3 -0
  299. package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -1
  300. package/build/types/observable/internal/list/ListCacheKey.d.ts +2 -1
  301. package/build/types/observable/internal/list/ListCacheKey.d.ts.map +1 -1
  302. package/build/types/observable/internal/list/ListQuery.d.ts +1 -1
  303. package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -1
  304. package/build/types/observable/internal/list/ListsHelper.d.ts +3 -1
  305. package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -1
  306. package/build/types/observable/internal/list/ObjectListQuery.d.ts.map +1 -1
  307. package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -1
  308. package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
  309. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +1 -0
  310. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
  311. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  312. package/build/types/observable/internal/utils/rdpFieldOperations.d.ts.map +1 -1
  313. package/build/types/public/unstable-do-not-use.d.ts +2 -1
  314. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  315. package/build/types/queries/applyQuery.d.ts.map +1 -1
  316. package/build/types/util/isObjectSpecifiersObject.d.ts +1 -0
  317. package/build/types/util/isObjectSpecifiersObject.d.ts.map +1 -1
  318. package/package.json +11 -12
  319. package/build/cjs/chunk-IQJTM3KW.cjs.map +0 -1
  320. package/build/cjs/chunk-PARVKNVB.cjs.map +0 -1
  321. package/build/cjs/delay-W2TSML2P.cjs +0 -75
  322. package/build/cjs/delay-W2TSML2P.cjs.map +0 -1
@@ -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":[]}
@@ -0,0 +1,186 @@
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 { FunctionParamsCanonicalizer } from "./FunctionParamsCanonicalizer.js";
19
+ describe("FunctionParamsCanonicalizer", () => {
20
+ it("returns same ref for equivalent objects with different key order", () => {
21
+ const c = new FunctionParamsCanonicalizer();
22
+ expect(c.canonicalize({
23
+ x: 1,
24
+ y: 2
25
+ })).toBe(c.canonicalize({
26
+ y: 2,
27
+ x: 1
28
+ }));
29
+ });
30
+ it("returns different refs for different values", () => {
31
+ const c = new FunctionParamsCanonicalizer();
32
+ expect(c.canonicalize({
33
+ a: {
34
+ b: 1
35
+ }
36
+ })).not.toBe(c.canonicalize({
37
+ b: {
38
+ a: 1
39
+ }
40
+ }));
41
+ });
42
+ it("caches by input reference", () => {
43
+ const c = new FunctionParamsCanonicalizer();
44
+ const input = {
45
+ x: 1
46
+ };
47
+ expect(c.canonicalize(input)).toBe(c.canonicalize(input));
48
+ });
49
+ it("returns undefined for null/undefined params", () => {
50
+ const c = new FunctionParamsCanonicalizer();
51
+ expect(c.canonicalize(null)).toBeUndefined();
52
+ expect(c.canonicalize(undefined)).toBeUndefined();
53
+ });
54
+ it("throws on circular references", () => {
55
+ const c = new FunctionParamsCanonicalizer();
56
+ const circular = {
57
+ a: 1
58
+ };
59
+ circular.self = circular;
60
+ expect(() => c.canonicalize(circular)).toThrow("Circular reference");
61
+ });
62
+ it("handles OSDK objects by extracting identity", () => {
63
+ const c = new FunctionParamsCanonicalizer();
64
+ expect(c.canonicalize({
65
+ obj: {
66
+ $apiName: "Foo",
67
+ $primaryKey: 123,
68
+ $objectType: "Foo",
69
+ extra: "a"
70
+ }
71
+ })).toBe(c.canonicalize({
72
+ obj: {
73
+ $apiName: "Foo",
74
+ $primaryKey: 123,
75
+ $objectType: "Foo",
76
+ extra: "b"
77
+ }
78
+ }));
79
+ });
80
+ it("canonicalizes complex nested structures consistently", () => {
81
+ const c = new FunctionParamsCanonicalizer();
82
+
83
+ // Sets sorted
84
+ expect(c.canonicalize({
85
+ s: new Set([3, 1, 2])
86
+ })).toBe(c.canonicalize({
87
+ s: new Set([1, 2, 3])
88
+ }));
89
+
90
+ // Maps sorted by key
91
+ expect(c.canonicalize({
92
+ m: new Map([["b", 2], ["a", 1]])
93
+ })).toBe(c.canonicalize({
94
+ m: new Map([["a", 1], ["b", 2]])
95
+ }));
96
+
97
+ // Arrays preserve order
98
+ expect(c.canonicalize({
99
+ arr: [1, 2, 3]
100
+ })).not.toBe(c.canonicalize({
101
+ arr: [3, 2, 1]
102
+ }));
103
+
104
+ // Dates as ISO strings
105
+ expect(c.canonicalize({
106
+ d: new Date("2024-01-01T00:00:00.000Z")
107
+ })).toBe(c.canonicalize({
108
+ d: new Date("2024-01-01T00:00:00.000Z")
109
+ }));
110
+
111
+ // Deep nesting
112
+ expect(c.canonicalize({
113
+ outer: {
114
+ inner: {
115
+ deep: 1
116
+ }
117
+ }
118
+ })).toBe(c.canonicalize({
119
+ outer: {
120
+ inner: {
121
+ deep: 1
122
+ }
123
+ }
124
+ }));
125
+
126
+ // Type distinction
127
+ expect(c.canonicalize({
128
+ val: 1
129
+ })).not.toBe(c.canonicalize({
130
+ val: "1"
131
+ }));
132
+ });
133
+ it("handles Set with non-primitive values", () => {
134
+ const c = new FunctionParamsCanonicalizer();
135
+ const obj1 = {
136
+ id: 1,
137
+ name: "first"
138
+ };
139
+ const obj2 = {
140
+ id: 2,
141
+ name: "second"
142
+ };
143
+ expect(c.canonicalize({
144
+ s: new Set([obj1, obj2])
145
+ })).toBe(c.canonicalize({
146
+ s: new Set([obj2, obj1])
147
+ }));
148
+ });
149
+ it("handles Map with non-primitive keys", () => {
150
+ const c = new FunctionParamsCanonicalizer();
151
+ const key1 = {
152
+ id: 1
153
+ };
154
+ const key2 = {
155
+ id: 2
156
+ };
157
+ expect(c.canonicalize({
158
+ m: new Map([[key1, "a"], [key2, "b"]])
159
+ })).toBe(c.canonicalize({
160
+ m: new Map([[key2, "b"], [key1, "a"]])
161
+ }));
162
+ });
163
+ it("handles Map with non-primitive values", () => {
164
+ const c = new FunctionParamsCanonicalizer();
165
+ const val1 = {
166
+ data: "first"
167
+ };
168
+ const val2 = {
169
+ data: "second"
170
+ };
171
+ expect(c.canonicalize({
172
+ m: new Map([["a", val1], ["b", val2]])
173
+ })).toBe(c.canonicalize({
174
+ m: new Map([["b", val2], ["a", val1]])
175
+ }));
176
+ });
177
+ it("distinguishes null from undefined", () => {
178
+ const c = new FunctionParamsCanonicalizer();
179
+ expect(c.canonicalize({
180
+ val: null
181
+ })).not.toBe(c.canonicalize({
182
+ val: undefined
183
+ }));
184
+ });
185
+ });
186
+ //# sourceMappingURL=FunctionParamsCanonicalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FunctionParamsCanonicalizer.test.js","names":["describe","expect","it","FunctionParamsCanonicalizer","c","canonicalize","x","y","toBe","a","b","not","input","toBeUndefined","undefined","circular","self","toThrow","obj","$apiName","$primaryKey","$objectType","extra","s","Set","m","Map","arr","d","Date","outer","inner","deep","val","obj1","id","name","obj2","key1","key2","val1","data","val2"],"sources":["FunctionParamsCanonicalizer.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 { FunctionParamsCanonicalizer } from \"./FunctionParamsCanonicalizer.js\";\n\ndescribe(\"FunctionParamsCanonicalizer\", () => {\n it(\"returns same ref for equivalent objects with different key order\", () => {\n const c = new FunctionParamsCanonicalizer();\n expect(c.canonicalize({ x: 1, y: 2 })).toBe(c.canonicalize({ y: 2, x: 1 }));\n });\n\n it(\"returns different refs for different values\", () => {\n const c = new FunctionParamsCanonicalizer();\n expect(c.canonicalize({ a: { b: 1 } })).not.toBe(\n c.canonicalize({ b: { a: 1 } }),\n );\n });\n\n it(\"caches by input reference\", () => {\n const c = new FunctionParamsCanonicalizer();\n const input = { x: 1 };\n expect(c.canonicalize(input)).toBe(c.canonicalize(input));\n });\n\n it(\"returns undefined for null/undefined params\", () => {\n const c = new FunctionParamsCanonicalizer();\n expect(c.canonicalize(null)).toBeUndefined();\n expect(c.canonicalize(undefined)).toBeUndefined();\n });\n\n it(\"throws on circular references\", () => {\n const c = new FunctionParamsCanonicalizer();\n const circular: Record<string, unknown> = { a: 1 };\n circular.self = circular;\n expect(() => c.canonicalize(circular)).toThrow(\"Circular reference\");\n });\n\n it(\"handles OSDK objects by extracting identity\", () => {\n const c = new FunctionParamsCanonicalizer();\n const obj1 = {\n $apiName: \"Foo\",\n $primaryKey: 123,\n $objectType: \"Foo\",\n extra: \"a\",\n };\n const obj2 = {\n $apiName: \"Foo\",\n $primaryKey: 123,\n $objectType: \"Foo\",\n extra: \"b\",\n };\n expect(c.canonicalize({ obj: obj1 })).toBe(c.canonicalize({ obj: obj2 }));\n });\n\n it(\"canonicalizes complex nested structures consistently\", () => {\n const c = new FunctionParamsCanonicalizer();\n\n // Sets sorted\n expect(c.canonicalize({ s: new Set([3, 1, 2]) }))\n .toBe(c.canonicalize({ s: new Set([1, 2, 3]) }));\n\n // Maps sorted by key\n expect(c.canonicalize({ m: new Map([[\"b\", 2], [\"a\", 1]]) }))\n .toBe(c.canonicalize({ m: new Map([[\"a\", 1], [\"b\", 2]]) }));\n\n // Arrays preserve order\n expect(c.canonicalize({ arr: [1, 2, 3] }))\n .not.toBe(c.canonicalize({ arr: [3, 2, 1] }));\n\n // Dates as ISO strings\n expect(c.canonicalize({ d: new Date(\"2024-01-01T00:00:00.000Z\") }))\n .toBe(c.canonicalize({ d: new Date(\"2024-01-01T00:00:00.000Z\") }));\n\n // Deep nesting\n expect(c.canonicalize({ outer: { inner: { deep: 1 } } }))\n .toBe(c.canonicalize({ outer: { inner: { deep: 1 } } }));\n\n // Type distinction\n expect(c.canonicalize({ val: 1 })).not.toBe(c.canonicalize({ val: \"1\" }));\n });\n\n it(\"handles Set with non-primitive values\", () => {\n const c = new FunctionParamsCanonicalizer();\n const obj1 = { id: 1, name: \"first\" };\n const obj2 = { id: 2, name: \"second\" };\n expect(c.canonicalize({ s: new Set([obj1, obj2]) }))\n .toBe(c.canonicalize({ s: new Set([obj2, obj1]) }));\n });\n\n it(\"handles Map with non-primitive keys\", () => {\n const c = new FunctionParamsCanonicalizer();\n const key1 = { id: 1 };\n const key2 = { id: 2 };\n expect(c.canonicalize({ m: new Map([[key1, \"a\"], [key2, \"b\"]]) }))\n .toBe(c.canonicalize({ m: new Map([[key2, \"b\"], [key1, \"a\"]]) }));\n });\n\n it(\"handles Map with non-primitive values\", () => {\n const c = new FunctionParamsCanonicalizer();\n const val1 = { data: \"first\" };\n const val2 = { data: \"second\" };\n expect(c.canonicalize({ m: new Map([[\"a\", val1], [\"b\", val2]]) }))\n .toBe(c.canonicalize({ m: new Map([[\"b\", val2], [\"a\", val1]]) }));\n });\n\n it(\"distinguishes null from undefined\", () => {\n const c = new FunctionParamsCanonicalizer();\n expect(c.canonicalize({ val: null }))\n .not.toBe(c.canonicalize({ val: undefined }));\n });\n});\n"],"mappings":"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","ignoreList":[]}