@itwin/core-backend 5.1.0-dev.9 → 5.2.0-dev.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 (441) hide show
  1. package/CHANGELOG.md +112 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +1 -1
  3. package/lib/cjs/BackendHubAccess.js +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BisCoreSchema.d.ts.map +1 -1
  6. package/lib/cjs/BisCoreSchema.js +4 -2
  7. package/lib/cjs/BisCoreSchema.js.map +1 -1
  8. package/lib/cjs/BriefcaseManager.d.ts +10 -2
  9. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  10. package/lib/cjs/BriefcaseManager.js +16 -0
  11. package/lib/cjs/BriefcaseManager.js.map +1 -1
  12. package/lib/cjs/Category.d.ts +4 -4
  13. package/lib/cjs/Category.js +4 -4
  14. package/lib/cjs/Category.js.map +1 -1
  15. package/lib/cjs/ChangesetECAdaptor.d.ts +67 -8
  16. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  17. package/lib/cjs/ChangesetECAdaptor.js +248 -33
  18. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  19. package/lib/cjs/ClassRegistry.d.ts +9 -1
  20. package/lib/cjs/ClassRegistry.d.ts.map +1 -1
  21. package/lib/cjs/ClassRegistry.js +9 -1
  22. package/lib/cjs/ClassRegistry.js.map +1 -1
  23. package/lib/cjs/CloudSqlite.js +1 -1
  24. package/lib/cjs/CloudSqlite.js.map +1 -1
  25. package/lib/cjs/CodeSpecs.d.ts +1 -1
  26. package/lib/cjs/CodeSpecs.js +1 -1
  27. package/lib/cjs/CodeSpecs.js.map +1 -1
  28. package/lib/cjs/DisplayStyle.d.ts +4 -4
  29. package/lib/cjs/DisplayStyle.js +3 -3
  30. package/lib/cjs/DisplayStyle.js.map +1 -1
  31. package/lib/cjs/ECDb.d.ts +4 -4
  32. package/lib/cjs/ECDb.d.ts.map +1 -1
  33. package/lib/cjs/ECDb.js +4 -4
  34. package/lib/cjs/ECDb.js.map +1 -1
  35. package/lib/cjs/ECSqlStatement.d.ts +15 -6
  36. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  37. package/lib/cjs/ECSqlStatement.js +19 -4
  38. package/lib/cjs/ECSqlStatement.js.map +1 -1
  39. package/lib/cjs/Element.d.ts +54 -51
  40. package/lib/cjs/Element.d.ts.map +1 -1
  41. package/lib/cjs/Element.js +67 -52
  42. package/lib/cjs/Element.js.map +1 -1
  43. package/lib/cjs/ElementAspect.d.ts +8 -8
  44. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  45. package/lib/cjs/ElementAspect.js +8 -8
  46. package/lib/cjs/ElementAspect.js.map +1 -1
  47. package/lib/cjs/Entity.d.ts +10 -7
  48. package/lib/cjs/Entity.d.ts.map +1 -1
  49. package/lib/cjs/Entity.js +35 -13
  50. package/lib/cjs/Entity.js.map +1 -1
  51. package/lib/cjs/ExportGraphics.d.ts +54 -8
  52. package/lib/cjs/ExportGraphics.d.ts.map +1 -1
  53. package/lib/cjs/ExportGraphics.js +158 -59
  54. package/lib/cjs/ExportGraphics.js.map +1 -1
  55. package/lib/cjs/GeographicCRSServices.d.ts +6 -2
  56. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  57. package/lib/cjs/GeographicCRSServices.js +1 -1
  58. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  59. package/lib/cjs/IModelDb.d.ts +37 -26
  60. package/lib/cjs/IModelDb.d.ts.map +1 -1
  61. package/lib/cjs/IModelDb.js +124 -47
  62. package/lib/cjs/IModelDb.js.map +1 -1
  63. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  64. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  65. package/lib/cjs/IModelElementCloneContext.js +1 -1
  66. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  67. package/lib/cjs/IModelHost.d.ts +2 -3
  68. package/lib/cjs/IModelHost.d.ts.map +1 -1
  69. package/lib/cjs/IModelHost.js +2 -3
  70. package/lib/cjs/IModelHost.js.map +1 -1
  71. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +36 -0
  72. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -0
  73. package/lib/cjs/IModelIncrementalSchemaLocater.js +69 -0
  74. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -0
  75. package/lib/cjs/LocalHub.d.ts.map +1 -1
  76. package/lib/cjs/LocalHub.js +6 -4
  77. package/lib/cjs/LocalHub.js.map +1 -1
  78. package/lib/cjs/Material.d.ts +4 -3
  79. package/lib/cjs/Material.d.ts.map +1 -1
  80. package/lib/cjs/Material.js +5 -5
  81. package/lib/cjs/Material.js.map +1 -1
  82. package/lib/cjs/Model.d.ts +22 -22
  83. package/lib/cjs/Model.js +22 -22
  84. package/lib/cjs/Model.js.map +1 -1
  85. package/lib/cjs/Relationship.d.ts +3 -0
  86. package/lib/cjs/Relationship.d.ts.map +1 -1
  87. package/lib/cjs/Relationship.js +15 -0
  88. package/lib/cjs/Relationship.js.map +1 -1
  89. package/lib/cjs/SQLiteDb.d.ts +1 -1
  90. package/lib/cjs/SQLiteDb.js +1 -1
  91. package/lib/cjs/SQLiteDb.js.map +1 -1
  92. package/lib/cjs/Schema.d.ts +25 -0
  93. package/lib/cjs/Schema.d.ts.map +1 -1
  94. package/lib/cjs/Schema.js +25 -0
  95. package/lib/cjs/Schema.js.map +1 -1
  96. package/lib/cjs/SqliteStatement.d.ts +1 -1
  97. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  98. package/lib/cjs/SqliteStatement.js +1 -1
  99. package/lib/cjs/SqliteStatement.js.map +1 -1
  100. package/lib/cjs/Texture.d.ts +1 -1
  101. package/lib/cjs/Texture.js +1 -1
  102. package/lib/cjs/Texture.js.map +1 -1
  103. package/lib/cjs/TxnManager.d.ts +4 -4
  104. package/lib/cjs/TxnManager.js +1 -1
  105. package/lib/cjs/TxnManager.js.map +1 -1
  106. package/lib/cjs/ViewDefinition.d.ts +40 -14
  107. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  108. package/lib/cjs/ViewDefinition.js +42 -14
  109. package/lib/cjs/ViewDefinition.js.map +1 -1
  110. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +61 -0
  111. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -0
  112. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +110 -0
  113. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -0
  114. package/lib/cjs/annotations/FrameGeometry.d.ts +51 -0
  115. package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -0
  116. package/lib/cjs/annotations/FrameGeometry.js +249 -0
  117. package/lib/cjs/annotations/FrameGeometry.js.map +1 -0
  118. package/lib/cjs/annotations/LeaderGeometry.d.ts +53 -0
  119. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -0
  120. package/lib/cjs/annotations/LeaderGeometry.js +184 -0
  121. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -0
  122. package/lib/cjs/annotations/TextAnnotationElement.d.ts +204 -0
  123. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -0
  124. package/lib/cjs/annotations/TextAnnotationElement.js +411 -0
  125. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -0
  126. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +33 -0
  127. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  128. package/lib/cjs/annotations/TextAnnotationGeometry.js +137 -0
  129. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -0
  130. package/lib/cjs/annotations/TextBlockGeometry.d.ts +16 -0
  131. package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -0
  132. package/lib/cjs/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +28 -70
  133. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -0
  134. package/lib/cjs/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +69 -22
  135. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -0
  136. package/lib/cjs/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +174 -49
  137. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -0
  138. package/lib/cjs/core-backend.d.ts +7 -3
  139. package/lib/cjs/core-backend.d.ts.map +1 -1
  140. package/lib/cjs/core-backend.js +27 -6
  141. package/lib/cjs/core-backend.js.map +1 -1
  142. package/lib/cjs/internal/ElementLRUCache.d.ts +23 -0
  143. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
  144. package/lib/cjs/internal/ElementLRUCache.js +167 -3
  145. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  146. package/lib/cjs/internal/Symbols.d.ts +1 -0
  147. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  148. package/lib/cjs/internal/Symbols.js +2 -1
  149. package/lib/cjs/internal/Symbols.js.map +1 -1
  150. package/lib/cjs/internal/annotations/fields.d.ts +22 -0
  151. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -0
  152. package/lib/cjs/internal/annotations/fields.js +237 -0
  153. package/lib/cjs/internal/annotations/fields.js.map +1 -0
  154. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  155. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +1 -1
  156. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  157. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  158. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  159. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  160. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  161. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  162. package/lib/cjs/workspace/Workspace.d.ts +0 -1
  163. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  164. package/lib/cjs/workspace/Workspace.js.map +1 -1
  165. package/lib/esm/BackendHubAccess.d.ts +1 -1
  166. package/lib/esm/BackendHubAccess.js +1 -1
  167. package/lib/esm/BackendHubAccess.js.map +1 -1
  168. package/lib/esm/BisCoreSchema.d.ts.map +1 -1
  169. package/lib/esm/BisCoreSchema.js +4 -2
  170. package/lib/esm/BisCoreSchema.js.map +1 -1
  171. package/lib/esm/BriefcaseManager.d.ts +10 -2
  172. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  173. package/lib/esm/BriefcaseManager.js +17 -1
  174. package/lib/esm/BriefcaseManager.js.map +1 -1
  175. package/lib/esm/Category.d.ts +4 -4
  176. package/lib/esm/Category.js +4 -4
  177. package/lib/esm/Category.js.map +1 -1
  178. package/lib/esm/ChangesetECAdaptor.d.ts +67 -8
  179. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  180. package/lib/esm/ChangesetECAdaptor.js +248 -33
  181. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  182. package/lib/esm/ClassRegistry.d.ts +9 -1
  183. package/lib/esm/ClassRegistry.d.ts.map +1 -1
  184. package/lib/esm/ClassRegistry.js +9 -1
  185. package/lib/esm/ClassRegistry.js.map +1 -1
  186. package/lib/esm/CloudSqlite.js +1 -1
  187. package/lib/esm/CloudSqlite.js.map +1 -1
  188. package/lib/esm/CodeSpecs.d.ts +1 -1
  189. package/lib/esm/CodeSpecs.js +1 -1
  190. package/lib/esm/CodeSpecs.js.map +1 -1
  191. package/lib/esm/DisplayStyle.d.ts +4 -4
  192. package/lib/esm/DisplayStyle.js +3 -3
  193. package/lib/esm/DisplayStyle.js.map +1 -1
  194. package/lib/esm/ECDb.d.ts +4 -4
  195. package/lib/esm/ECDb.d.ts.map +1 -1
  196. package/lib/esm/ECDb.js +4 -4
  197. package/lib/esm/ECDb.js.map +1 -1
  198. package/lib/esm/ECSqlStatement.d.ts +15 -6
  199. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  200. package/lib/esm/ECSqlStatement.js +19 -4
  201. package/lib/esm/ECSqlStatement.js.map +1 -1
  202. package/lib/esm/Element.d.ts +54 -51
  203. package/lib/esm/Element.d.ts.map +1 -1
  204. package/lib/esm/Element.js +67 -52
  205. package/lib/esm/Element.js.map +1 -1
  206. package/lib/esm/ElementAspect.d.ts +8 -8
  207. package/lib/esm/ElementAspect.d.ts.map +1 -1
  208. package/lib/esm/ElementAspect.js +8 -8
  209. package/lib/esm/ElementAspect.js.map +1 -1
  210. package/lib/esm/Entity.d.ts +10 -7
  211. package/lib/esm/Entity.d.ts.map +1 -1
  212. package/lib/esm/Entity.js +36 -14
  213. package/lib/esm/Entity.js.map +1 -1
  214. package/lib/esm/ExportGraphics.d.ts +54 -8
  215. package/lib/esm/ExportGraphics.d.ts.map +1 -1
  216. package/lib/esm/ExportGraphics.js +156 -58
  217. package/lib/esm/ExportGraphics.js.map +1 -1
  218. package/lib/esm/GeographicCRSServices.d.ts +6 -2
  219. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  220. package/lib/esm/GeographicCRSServices.js +1 -1
  221. package/lib/esm/GeographicCRSServices.js.map +1 -1
  222. package/lib/esm/IModelDb.d.ts +37 -26
  223. package/lib/esm/IModelDb.d.ts.map +1 -1
  224. package/lib/esm/IModelDb.js +128 -51
  225. package/lib/esm/IModelDb.js.map +1 -1
  226. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  227. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  228. package/lib/esm/IModelElementCloneContext.js +1 -1
  229. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  230. package/lib/esm/IModelHost.d.ts +2 -3
  231. package/lib/esm/IModelHost.d.ts.map +1 -1
  232. package/lib/esm/IModelHost.js +2 -3
  233. package/lib/esm/IModelHost.js.map +1 -1
  234. package/lib/esm/IModelIncrementalSchemaLocater.d.ts +36 -0
  235. package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -0
  236. package/lib/esm/IModelIncrementalSchemaLocater.js +65 -0
  237. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -0
  238. package/lib/esm/LocalHub.d.ts.map +1 -1
  239. package/lib/esm/LocalHub.js +6 -4
  240. package/lib/esm/LocalHub.js.map +1 -1
  241. package/lib/esm/Material.d.ts +4 -3
  242. package/lib/esm/Material.d.ts.map +1 -1
  243. package/lib/esm/Material.js +5 -5
  244. package/lib/esm/Material.js.map +1 -1
  245. package/lib/esm/Model.d.ts +22 -22
  246. package/lib/esm/Model.js +22 -22
  247. package/lib/esm/Model.js.map +1 -1
  248. package/lib/esm/Relationship.d.ts +3 -0
  249. package/lib/esm/Relationship.d.ts.map +1 -1
  250. package/lib/esm/Relationship.js +15 -0
  251. package/lib/esm/Relationship.js.map +1 -1
  252. package/lib/esm/SQLiteDb.d.ts +1 -1
  253. package/lib/esm/SQLiteDb.js +1 -1
  254. package/lib/esm/SQLiteDb.js.map +1 -1
  255. package/lib/esm/Schema.d.ts +25 -0
  256. package/lib/esm/Schema.d.ts.map +1 -1
  257. package/lib/esm/Schema.js +25 -0
  258. package/lib/esm/Schema.js.map +1 -1
  259. package/lib/esm/SqliteStatement.d.ts +1 -1
  260. package/lib/esm/SqliteStatement.d.ts.map +1 -1
  261. package/lib/esm/SqliteStatement.js +1 -1
  262. package/lib/esm/SqliteStatement.js.map +1 -1
  263. package/lib/esm/Texture.d.ts +1 -1
  264. package/lib/esm/Texture.js +1 -1
  265. package/lib/esm/Texture.js.map +1 -1
  266. package/lib/esm/TxnManager.d.ts +4 -4
  267. package/lib/esm/TxnManager.js +1 -1
  268. package/lib/esm/TxnManager.js.map +1 -1
  269. package/lib/esm/ViewDefinition.d.ts +40 -14
  270. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  271. package/lib/esm/ViewDefinition.js +42 -14
  272. package/lib/esm/ViewDefinition.js.map +1 -1
  273. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +61 -0
  274. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -0
  275. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +105 -0
  276. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -0
  277. package/lib/esm/annotations/FrameGeometry.d.ts +51 -0
  278. package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -0
  279. package/lib/esm/annotations/FrameGeometry.js +244 -0
  280. package/lib/esm/annotations/FrameGeometry.js.map +1 -0
  281. package/lib/esm/annotations/LeaderGeometry.d.ts +53 -0
  282. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -0
  283. package/lib/esm/annotations/LeaderGeometry.js +179 -0
  284. package/lib/esm/annotations/LeaderGeometry.js.map +1 -0
  285. package/lib/esm/annotations/TextAnnotationElement.d.ts +204 -0
  286. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -0
  287. package/lib/esm/annotations/TextAnnotationElement.js +405 -0
  288. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -0
  289. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +33 -0
  290. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  291. package/lib/esm/annotations/TextAnnotationGeometry.js +134 -0
  292. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -0
  293. package/lib/esm/annotations/TextBlockGeometry.d.ts +16 -0
  294. package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -0
  295. package/lib/esm/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +28 -70
  296. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -0
  297. package/lib/esm/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +69 -22
  298. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -0
  299. package/lib/esm/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +172 -48
  300. package/lib/esm/annotations/TextBlockLayout.js.map +1 -0
  301. package/lib/esm/core-backend.d.ts +7 -3
  302. package/lib/esm/core-backend.d.ts.map +1 -1
  303. package/lib/esm/core-backend.js +27 -3
  304. package/lib/esm/core-backend.js.map +1 -1
  305. package/lib/esm/internal/ElementLRUCache.d.ts +23 -0
  306. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
  307. package/lib/esm/internal/ElementLRUCache.js +165 -2
  308. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  309. package/lib/esm/internal/Symbols.d.ts +1 -0
  310. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  311. package/lib/esm/internal/Symbols.js +1 -0
  312. package/lib/esm/internal/Symbols.js.map +1 -1
  313. package/lib/esm/internal/annotations/fields.d.ts +22 -0
  314. package/lib/esm/internal/annotations/fields.d.ts.map +1 -0
  315. package/lib/esm/internal/annotations/fields.js +231 -0
  316. package/lib/esm/internal/annotations/fields.js.map +1 -0
  317. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  318. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +1 -1
  319. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  320. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  321. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  322. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  323. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  324. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  325. package/lib/esm/test/AnnotationTestUtils.d.ts +15 -0
  326. package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -0
  327. package/lib/esm/test/AnnotationTestUtils.js +41 -0
  328. package/lib/esm/test/AnnotationTestUtils.js.map +1 -0
  329. package/lib/esm/test/ElementLRUCache.test.js +224 -1
  330. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  331. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  332. package/lib/esm/test/IModelTestUtils.js +1 -0
  333. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  334. package/lib/esm/test/TestUtils.d.ts +1 -1
  335. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  336. package/lib/esm/test/TestUtils.js +1 -1
  337. package/lib/esm/test/TestUtils.js.map +1 -1
  338. package/lib/esm/test/annotations/Fields.test.d.ts +2 -0
  339. package/lib/esm/test/annotations/Fields.test.d.ts.map +1 -0
  340. package/lib/esm/test/annotations/Fields.test.js +576 -0
  341. package/lib/esm/test/annotations/Fields.test.js.map +1 -0
  342. package/lib/esm/test/annotations/FrameGeometry.test.d.ts +2 -0
  343. package/lib/esm/test/annotations/FrameGeometry.test.d.ts.map +1 -0
  344. package/lib/esm/test/annotations/FrameGeometry.test.js +86 -0
  345. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -0
  346. package/lib/esm/test/annotations/LeaderGeometry.test.d.ts +2 -0
  347. package/lib/esm/test/annotations/LeaderGeometry.test.d.ts.map +1 -0
  348. package/lib/esm/test/annotations/LeaderGeometry.test.js +256 -0
  349. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -0
  350. package/lib/esm/test/annotations/TextAnnotation.test.js +269 -1047
  351. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  352. package/lib/esm/test/annotations/TextBlock.test.d.ts +2 -0
  353. package/lib/esm/test/annotations/TextBlock.test.d.ts.map +1 -0
  354. package/lib/esm/test/annotations/TextBlock.test.js +1199 -0
  355. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -0
  356. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.d.ts +60 -0
  357. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.d.ts.map +1 -0
  358. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js +69 -0
  359. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -0
  360. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts +1442 -0
  361. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -0
  362. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +817 -0
  363. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -0
  364. package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts +2 -0
  365. package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts.map +1 -0
  366. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +164 -0
  367. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -0
  368. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +22 -32
  369. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  370. package/lib/esm/test/ecdb/ECDb.test.js +29 -8
  371. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  372. package/lib/esm/test/ecdb/ECSqlQuery.test.js +0 -55
  373. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  374. package/lib/esm/test/ecdb/ECSqlStatement.test.js +192 -0
  375. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  376. package/lib/esm/test/hubaccess/ApplyChangeset.test.d.ts +2 -0
  377. package/lib/esm/test/hubaccess/ApplyChangeset.test.d.ts.map +1 -0
  378. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +86 -0
  379. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -0
  380. package/lib/esm/test/imodel/IModel.test.js +313 -5
  381. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  382. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.d.ts +2 -0
  383. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.d.ts.map +1 -0
  384. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +343 -0
  385. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -0
  386. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.d.ts +2 -0
  387. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.d.ts.map +1 -0
  388. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +207 -0
  389. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -0
  390. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts +11 -0
  391. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts.map +1 -0
  392. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js +36 -0
  393. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -0
  394. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts +17 -0
  395. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts.map +1 -0
  396. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js +116 -0
  397. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -0
  398. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +9 -0
  399. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -0
  400. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +20 -0
  401. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -0
  402. package/lib/esm/test/misc/GeoServices.test.js +36 -10
  403. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  404. package/lib/esm/test/schema/ClassRegistry.test.js +104 -2
  405. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  406. package/lib/esm/test/standalone/ChangesetReader.test.js +547 -136
  407. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  408. package/lib/esm/test/standalone/ExportGraphics.test.js +53 -1
  409. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  410. package/lib/esm/test/standalone/GeometryStream.test.js +49 -1
  411. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  412. package/lib/esm/test/standalone/IModelLimits.test.d.ts +2 -0
  413. package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
  414. package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
  415. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
  416. package/lib/esm/test/standalone/RenderMaterialElement.test.js +24 -1
  417. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  418. package/lib/esm/test/standalone/SnapshotDb.test.js +19 -1
  419. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  420. package/lib/esm/workspace/Workspace.d.ts +0 -1
  421. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  422. package/lib/esm/workspace/Workspace.js.map +1 -1
  423. package/package.json +21 -15
  424. package/lib/cjs/TextAnnotationElement.d.ts +0 -54
  425. package/lib/cjs/TextAnnotationElement.d.ts.map +0 -1
  426. package/lib/cjs/TextAnnotationElement.js +0 -94
  427. package/lib/cjs/TextAnnotationElement.js.map +0 -1
  428. package/lib/cjs/TextAnnotationGeometry.d.ts +0 -32
  429. package/lib/cjs/TextAnnotationGeometry.d.ts.map +0 -1
  430. package/lib/cjs/TextAnnotationGeometry.js.map +0 -1
  431. package/lib/cjs/TextAnnotationLayout.d.ts.map +0 -1
  432. package/lib/cjs/TextAnnotationLayout.js.map +0 -1
  433. package/lib/esm/TextAnnotationElement.d.ts +0 -54
  434. package/lib/esm/TextAnnotationElement.d.ts.map +0 -1
  435. package/lib/esm/TextAnnotationElement.js +0 -89
  436. package/lib/esm/TextAnnotationElement.js.map +0 -1
  437. package/lib/esm/TextAnnotationGeometry.d.ts +0 -32
  438. package/lib/esm/TextAnnotationGeometry.d.ts.map +0 -1
  439. package/lib/esm/TextAnnotationGeometry.js.map +0 -1
  440. package/lib/esm/TextAnnotationLayout.d.ts.map +0 -1
  441. package/lib/esm/TextAnnotationLayout.js.map +0 -1
@@ -60,7 +60,7 @@ import { Arc3d, IModelJson, Point3d } from "@itwin/core-geometry";
60
60
  import { assert, expect } from "chai";
61
61
  import * as path from "node:path";
62
62
  import { DrawingCategory } from "../../Category";
63
- import { ChangesetECAdaptor as ECChangesetAdaptor, PartialECChangeUnifier } from "../../ChangesetECAdaptor";
63
+ import { ChangesetECAdaptor as ECChangesetAdaptor, ECChangeUnifierCache, PartialECChangeUnifier } from "../../ChangesetECAdaptor";
64
64
  import { HubMock } from "../../internal/HubMock";
65
65
  import { SnapshotDb } from "../../IModelDb";
66
66
  import { SqliteChangesetReader } from "../../SqliteChangesetReader";
@@ -292,32 +292,24 @@ describe("Changeset Reader API", async () => {
292
292
  };
293
293
  rwIModel.saveChanges("user 1: data");
294
294
  if (true || "test local changes") {
295
- const env_1 = { stack: [], error: void 0, hasError: false };
296
- try {
297
- const reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });
298
- const adaptor = __addDisposableResource(env_1, new ECChangesetAdaptor(reader), false);
299
- const cci = new PartialECChangeUnifier();
300
- while (adaptor.step()) {
301
- cci.appendFrom(adaptor);
302
- }
303
- const changes = Array.from(cci.instances);
295
+ const testChanges = (changes) => {
304
296
  assert.equal(changes.length, 3);
305
- assert.equal(changes[0].ECInstanceId, "0x20000000004");
306
- assert.equal(changes[0].$meta?.classFullName, "TestDomain:Test2dElement");
307
- assert.equal(changes[0].$meta?.op, "Inserted");
297
+ assert.equal(changes[0].ECInstanceId, "0x20000000001");
298
+ assert.equal(changes[0].$meta?.classFullName, "BisCore:DrawingModel");
299
+ assert.equal(changes[0].$meta?.op, "Updated");
308
300
  assert.equal(changes[0].$meta?.stage, "New");
301
+ assert.isNotNull(changes[0].LastMod);
302
+ assert.isNotNull(changes[0].GeometryGuid);
309
303
  assert.equal(changes[1].ECInstanceId, "0x20000000001");
310
304
  assert.equal(changes[1].$meta?.classFullName, "BisCore:DrawingModel");
311
305
  assert.equal(changes[1].$meta?.op, "Updated");
312
- assert.equal(changes[1].$meta?.stage, "New");
313
- assert.isNotNull(changes[1].LastMod);
314
- assert.isNotNull(changes[1].GeometryGuid);
315
- assert.equal(changes[2].ECInstanceId, "0x20000000001");
316
- assert.equal(changes[2].$meta?.classFullName, "BisCore:DrawingModel");
317
- assert.equal(changes[2].$meta?.op, "Updated");
318
- assert.equal(changes[2].$meta?.stage, "Old");
319
- assert.isNull(changes[2].LastMod);
320
- assert.isNull(changes[2].GeometryGuid);
306
+ assert.equal(changes[1].$meta?.stage, "Old");
307
+ assert.isNull(changes[1].LastMod);
308
+ assert.isNull(changes[1].GeometryGuid);
309
+ assert.equal(changes[2].ECInstanceId, "0x20000000004");
310
+ assert.equal(changes[2].$meta?.classFullName, "TestDomain:Test2dElement");
311
+ assert.equal(changes[2].$meta?.op, "Inserted");
312
+ assert.equal(changes[2].$meta?.stage, "New");
321
313
  const el = changes.filter((x) => x.ECInstanceId === "0x20000000004")[0];
322
314
  assert.equal(el.Rotation, 0);
323
315
  // eslint-disable-next-line @typescript-eslint/naming-convention
@@ -357,15 +349,45 @@ describe("Changeset Reader API", async () => {
357
349
  1,
358
350
  ],
359
351
  stage: "New",
360
- fallbackClassId: undefined,
361
352
  });
353
+ };
354
+ if (true || "test with InMemoryInstanceCache") {
355
+ const env_1 = { stack: [], error: void 0, hasError: false };
356
+ try {
357
+ const reader = __addDisposableResource(env_1, SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true }), false);
358
+ const adaptor = __addDisposableResource(env_1, new ECChangesetAdaptor(reader), false);
359
+ const pcu = __addDisposableResource(env_1, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache()), false);
360
+ while (adaptor.step()) {
361
+ pcu.appendFrom(adaptor);
362
+ }
363
+ testChanges(Array.from(pcu.instances));
364
+ }
365
+ catch (e_1) {
366
+ env_1.error = e_1;
367
+ env_1.hasError = true;
368
+ }
369
+ finally {
370
+ __disposeResources(env_1);
371
+ }
362
372
  }
363
- catch (e_1) {
364
- env_1.error = e_1;
365
- env_1.hasError = true;
366
- }
367
- finally {
368
- __disposeResources(env_1);
373
+ if (true || "test with SqliteBackedInstanceCache") {
374
+ const env_2 = { stack: [], error: void 0, hasError: false };
375
+ try {
376
+ const reader = __addDisposableResource(env_2, SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true }), false);
377
+ const adaptor = __addDisposableResource(env_2, new ECChangesetAdaptor(reader), false);
378
+ const pcu = __addDisposableResource(env_2, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel)), false);
379
+ while (adaptor.step()) {
380
+ pcu.appendFrom(adaptor);
381
+ }
382
+ testChanges(Array.from(pcu.instances));
383
+ }
384
+ catch (e_2) {
385
+ env_2.error = e_2;
386
+ env_2.hasError = true;
387
+ }
388
+ finally {
389
+ __disposeResources(env_2);
390
+ }
369
391
  }
370
392
  }
371
393
  const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, "changesets");
@@ -373,86 +395,144 @@ describe("Changeset Reader API", async () => {
373
395
  await updatedElements();
374
396
  const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });
375
397
  if (true || "updated element") {
376
- const reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });
377
- const adaptor = new ECChangesetAdaptor(reader);
378
- const cci = new PartialECChangeUnifier();
379
- while (adaptor.step()) {
380
- cci.appendFrom(adaptor);
398
+ const testChanges = (changes) => {
399
+ assert.equal(changes.length, 4);
400
+ const classId = getClassIdByName(rwIModel, "Test2dElement");
401
+ // new value
402
+ assert.equal(changes[2].ECInstanceId, "0x20000000004");
403
+ assert.equal(changes[2].ECClassId, classId);
404
+ assert.equal(changes[2].s, "updated property");
405
+ assert.equal(changes[2].$meta?.classFullName, "TestDomain:Test2dElement");
406
+ assert.equal(changes[2].$meta?.op, "Updated");
407
+ assert.equal(changes[2].$meta?.stage, "New");
408
+ // old value
409
+ assert.equal(changes[3].ECInstanceId, "0x20000000004");
410
+ assert.equal(changes[3].ECClassId, classId);
411
+ assert.equal(changes[3].s, "xxxxxxxxx");
412
+ assert.equal(changes[3].$meta?.classFullName, "TestDomain:Test2dElement");
413
+ assert.equal(changes[3].$meta?.op, "Updated");
414
+ assert.equal(changes[3].$meta?.stage, "Old");
415
+ };
416
+ if (true || "test with InMemoryInstanceCache") {
417
+ const env_3 = { stack: [], error: void 0, hasError: false };
418
+ try {
419
+ const reader = __addDisposableResource(env_3, SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true }), false);
420
+ const adaptor = __addDisposableResource(env_3, new ECChangesetAdaptor(reader), false);
421
+ const pcu = __addDisposableResource(env_3, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache()), false);
422
+ while (adaptor.step()) {
423
+ pcu.appendFrom(adaptor);
424
+ }
425
+ testChanges(Array.from(pcu.instances));
426
+ }
427
+ catch (e_3) {
428
+ env_3.error = e_3;
429
+ env_3.hasError = true;
430
+ }
431
+ finally {
432
+ __disposeResources(env_3);
433
+ }
434
+ }
435
+ if (true || "test with SqliteBackedInstanceCache") {
436
+ const env_4 = { stack: [], error: void 0, hasError: false };
437
+ try {
438
+ const reader = __addDisposableResource(env_4, SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true }), false);
439
+ const adaptor = __addDisposableResource(env_4, new ECChangesetAdaptor(reader), false);
440
+ const pcu = __addDisposableResource(env_4, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel)), false);
441
+ while (adaptor.step()) {
442
+ pcu.appendFrom(adaptor);
443
+ }
444
+ testChanges(Array.from(pcu.instances));
445
+ }
446
+ catch (e_4) {
447
+ env_4.error = e_4;
448
+ env_4.hasError = true;
449
+ }
450
+ finally {
451
+ __disposeResources(env_4);
452
+ }
381
453
  }
382
- const changes = Array.from(cci.instances);
383
- assert.equal(changes.length, 4);
384
- const classId = getClassIdByName(rwIModel, "Test2dElement");
385
- // new value
386
- assert.equal(changes[0].ECInstanceId, "0x20000000004");
387
- assert.equal(changes[0].ECClassId, classId);
388
- assert.equal(changes[0].s, "updated property");
389
- assert.equal(changes[0].$meta?.classFullName, "TestDomain:Test2dElement");
390
- assert.equal(changes[0].$meta?.op, "Updated");
391
- assert.equal(changes[0].$meta?.stage, "New");
392
- // old value
393
- assert.equal(changes[1].ECInstanceId, "0x20000000004");
394
- assert.equal(changes[1].ECClassId, classId);
395
- assert.equal(changes[1].s, "xxxxxxxxx");
396
- assert.equal(changes[1].$meta?.classFullName, "TestDomain:Test2dElement");
397
- assert.equal(changes[1].$meta?.op, "Updated");
398
- assert.equal(changes[1].$meta?.stage, "Old");
399
454
  }
400
455
  if (true || "updated element when no classId") {
401
456
  const otherDb = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile("test.bim"));
402
- const reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });
403
- const adaptor = new ECChangesetAdaptor(reader);
404
- const cci = new PartialECChangeUnifier();
405
- while (adaptor.step()) {
406
- cci.appendFrom(adaptor);
457
+ const testChanges = (changes) => {
458
+ assert.equal(changes.length, 4);
459
+ // new value
460
+ assert.equal(changes[2].ECInstanceId, "0x20000000004");
461
+ assert.isUndefined(changes[2].ECClassId);
462
+ assert.isDefined(changes[2].$meta?.fallbackClassId);
463
+ assert.equal(changes[2].$meta?.fallbackClassId, "0x3d");
464
+ assert.isUndefined(changes[2].s);
465
+ assert.equal(changes[2].$meta?.classFullName, "BisCore:GeometricElement2d");
466
+ assert.equal(changes[2].$meta?.op, "Updated");
467
+ assert.equal(changes[2].$meta?.stage, "New");
468
+ // old value
469
+ assert.equal(changes[3].ECInstanceId, "0x20000000004");
470
+ assert.isUndefined(changes[3].ECClassId);
471
+ assert.isDefined(changes[3].$meta?.fallbackClassId);
472
+ assert.equal(changes[3].$meta?.fallbackClassId, "0x3d");
473
+ assert.isUndefined(changes[3].s);
474
+ assert.equal(changes[3].$meta?.classFullName, "BisCore:GeometricElement2d");
475
+ assert.equal(changes[3].$meta?.op, "Updated");
476
+ assert.equal(changes[3].$meta?.stage, "Old");
477
+ };
478
+ if (true || "test with InMemoryInstanceCache") {
479
+ const env_5 = { stack: [], error: void 0, hasError: false };
480
+ try {
481
+ const reader = __addDisposableResource(env_5, SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true }), false);
482
+ const adaptor = __addDisposableResource(env_5, new ECChangesetAdaptor(reader), false);
483
+ const pcu = __addDisposableResource(env_5, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache()), false);
484
+ while (adaptor.step()) {
485
+ pcu.appendFrom(adaptor);
486
+ }
487
+ testChanges(Array.from(pcu.instances));
488
+ }
489
+ catch (e_5) {
490
+ env_5.error = e_5;
491
+ env_5.hasError = true;
492
+ }
493
+ finally {
494
+ __disposeResources(env_5);
495
+ }
496
+ }
497
+ if (true || "test with SqliteBackedInstanceCache") {
498
+ const env_6 = { stack: [], error: void 0, hasError: false };
499
+ try {
500
+ const reader = __addDisposableResource(env_6, SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true }), false);
501
+ const adaptor = __addDisposableResource(env_6, new ECChangesetAdaptor(reader), false);
502
+ const pcu = __addDisposableResource(env_6, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel)), false);
503
+ while (adaptor.step()) {
504
+ pcu.appendFrom(adaptor);
505
+ }
506
+ testChanges(Array.from(pcu.instances));
507
+ }
508
+ catch (e_6) {
509
+ env_6.error = e_6;
510
+ env_6.hasError = true;
511
+ }
512
+ finally {
513
+ __disposeResources(env_6);
514
+ }
407
515
  }
408
- const changes = Array.from(cci.instances);
409
- assert.equal(changes.length, 4);
410
- // new value
411
- assert.equal(changes[0].ECInstanceId, "0x20000000004");
412
- assert.isUndefined(changes[0].ECClassId);
413
- assert.isDefined(changes[0].$meta?.fallbackClassId);
414
- assert.equal(changes[0].$meta?.fallbackClassId, "0x3d");
415
- assert.isUndefined(changes[0].s);
416
- assert.equal(changes[0].$meta?.classFullName, "BisCore:GeometricElement2d");
417
- assert.equal(changes[0].$meta?.op, "Updated");
418
- assert.equal(changes[0].$meta?.stage, "New");
419
- // old value
420
- assert.equal(changes[1].ECInstanceId, "0x20000000004");
421
- assert.isUndefined(changes[1].ECClassId);
422
- assert.isDefined(changes[1].$meta?.fallbackClassId);
423
- assert.equal(changes[1].$meta?.fallbackClassId, "0x3d");
424
- assert.isUndefined(changes[1].s);
425
- assert.equal(changes[1].$meta?.classFullName, "BisCore:GeometricElement2d");
426
- assert.equal(changes[1].$meta?.op, "Updated");
427
- assert.equal(changes[1].$meta?.stage, "Old");
428
516
  }
429
517
  if (true || "test changeset file") {
430
- const env_2 = { stack: [], error: void 0, hasError: false };
431
- try {
432
- const reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });
433
- const adaptor = __addDisposableResource(env_2, new ECChangesetAdaptor(reader), false);
434
- const cci = new PartialECChangeUnifier();
435
- while (adaptor.step()) {
436
- cci.appendFrom(adaptor);
437
- }
438
- const changes = Array.from(cci.instances);
518
+ const testChanges = (changes) => {
439
519
  assert.equal(changes.length, 3);
440
- assert.equal(changes[0].ECInstanceId, "0x20000000004");
441
- assert.equal(changes[0].$meta?.classFullName, "TestDomain:Test2dElement");
442
- assert.equal(changes[0].$meta?.op, "Inserted");
520
+ assert.equal(changes[0].ECInstanceId, "0x20000000001");
521
+ assert.equal(changes[0].$meta?.classFullName, "BisCore:DrawingModel");
522
+ assert.equal(changes[0].$meta?.op, "Updated");
443
523
  assert.equal(changes[0].$meta?.stage, "New");
524
+ assert.isNotNull(changes[0].LastMod);
525
+ assert.isNotNull(changes[0].GeometryGuid);
444
526
  assert.equal(changes[1].ECInstanceId, "0x20000000001");
445
527
  assert.equal(changes[1].$meta?.classFullName, "BisCore:DrawingModel");
446
528
  assert.equal(changes[1].$meta?.op, "Updated");
447
- assert.equal(changes[1].$meta?.stage, "New");
448
- assert.isNotNull(changes[1].LastMod);
449
- assert.isNotNull(changes[1].GeometryGuid);
450
- assert.equal(changes[2].ECInstanceId, "0x20000000001");
451
- assert.equal(changes[2].$meta?.classFullName, "BisCore:DrawingModel");
452
- assert.equal(changes[2].$meta?.op, "Updated");
453
- assert.equal(changes[2].$meta?.stage, "Old");
454
- assert.isNull(changes[2].LastMod);
455
- assert.isNull(changes[2].GeometryGuid);
529
+ assert.equal(changes[1].$meta?.stage, "Old");
530
+ assert.isNull(changes[1].LastMod);
531
+ assert.isNull(changes[1].GeometryGuid);
532
+ assert.equal(changes[2].ECInstanceId, "0x20000000004");
533
+ assert.equal(changes[2].$meta?.classFullName, "TestDomain:Test2dElement");
534
+ assert.equal(changes[2].$meta?.op, "Inserted");
535
+ assert.equal(changes[2].$meta?.stage, "New");
456
536
  const el = changes.filter((x) => x.ECInstanceId === "0x20000000004")[0];
457
537
  assert.equal(el.Rotation, 0);
458
538
  // eslint-disable-next-line @typescript-eslint/naming-convention
@@ -492,50 +572,95 @@ describe("Changeset Reader API", async () => {
492
572
  1,
493
573
  ],
494
574
  stage: "New",
495
- fallbackClassId: undefined,
496
575
  });
576
+ };
577
+ if (true || "test with InMemoryInstanceCache") {
578
+ const env_7 = { stack: [], error: void 0, hasError: false };
579
+ try {
580
+ const reader = __addDisposableResource(env_7, SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true }), false);
581
+ const adaptor = __addDisposableResource(env_7, new ECChangesetAdaptor(reader), false);
582
+ const pcu = __addDisposableResource(env_7, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache()), false);
583
+ while (adaptor.step()) {
584
+ pcu.appendFrom(adaptor);
585
+ }
586
+ testChanges(Array.from(pcu.instances));
587
+ }
588
+ catch (e_7) {
589
+ env_7.error = e_7;
590
+ env_7.hasError = true;
591
+ }
592
+ finally {
593
+ __disposeResources(env_7);
594
+ }
497
595
  }
498
- catch (e_2) {
499
- env_2.error = e_2;
500
- env_2.hasError = true;
501
- }
502
- finally {
503
- __disposeResources(env_2);
596
+ if (true || "test with SqliteBackedInstanceCache") {
597
+ const env_8 = { stack: [], error: void 0, hasError: false };
598
+ try {
599
+ const reader = __addDisposableResource(env_8, SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true }), false);
600
+ const adaptor = __addDisposableResource(env_8, new ECChangesetAdaptor(reader), false);
601
+ const pcu = __addDisposableResource(env_8, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel)), false);
602
+ while (adaptor.step()) {
603
+ pcu.appendFrom(adaptor);
604
+ }
605
+ testChanges(Array.from(pcu.instances));
606
+ }
607
+ catch (e_8) {
608
+ env_8.error = e_8;
609
+ env_8.hasError = true;
610
+ }
611
+ finally {
612
+ __disposeResources(env_8);
613
+ }
504
614
  }
505
615
  }
506
616
  if (true || "test ChangesetAdaptor.acceptClass()") {
507
- const env_3 = { stack: [], error: void 0, hasError: false };
508
- try {
509
- const reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });
510
- const adaptor = __addDisposableResource(env_3, new ECChangesetAdaptor(reader), false);
511
- adaptor.acceptClass("TestDomain.Test2dElement");
512
- const cci = new PartialECChangeUnifier();
513
- while (adaptor.step()) {
514
- cci.appendFrom(adaptor);
515
- }
516
- const changes = Array.from(cci.instances);
617
+ const testChanges = (changes) => {
517
618
  assert.equal(changes.length, 1);
518
619
  assert.equal(changes[0].$meta?.classFullName, "TestDomain:Test2dElement");
620
+ };
621
+ if (true || "test with InMemoryInstanceCache") {
622
+ const env_9 = { stack: [], error: void 0, hasError: false };
623
+ try {
624
+ const reader = __addDisposableResource(env_9, SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true }), false);
625
+ const adaptor = __addDisposableResource(env_9, new ECChangesetAdaptor(reader), false);
626
+ adaptor.acceptClass("TestDomain.Test2dElement");
627
+ const pcu = __addDisposableResource(env_9, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache()), false);
628
+ while (adaptor.step()) {
629
+ pcu.appendFrom(adaptor);
630
+ }
631
+ testChanges(Array.from(pcu.instances));
632
+ }
633
+ catch (e_9) {
634
+ env_9.error = e_9;
635
+ env_9.hasError = true;
636
+ }
637
+ finally {
638
+ __disposeResources(env_9);
639
+ }
519
640
  }
520
- catch (e_3) {
521
- env_3.error = e_3;
522
- env_3.hasError = true;
523
- }
524
- finally {
525
- __disposeResources(env_3);
641
+ if (true || "test with SqliteBackedInstanceCache") {
642
+ const env_10 = { stack: [], error: void 0, hasError: false };
643
+ try {
644
+ const reader = __addDisposableResource(env_10, SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true }), false);
645
+ const adaptor = __addDisposableResource(env_10, new ECChangesetAdaptor(reader), false);
646
+ adaptor.acceptClass("TestDomain.Test2dElement");
647
+ const pcu = __addDisposableResource(env_10, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel)), false);
648
+ while (adaptor.step()) {
649
+ pcu.appendFrom(adaptor);
650
+ }
651
+ testChanges(Array.from(pcu.instances));
652
+ }
653
+ catch (e_10) {
654
+ env_10.error = e_10;
655
+ env_10.hasError = true;
656
+ }
657
+ finally {
658
+ __disposeResources(env_10);
659
+ }
526
660
  }
527
661
  }
528
662
  if (true || "test ChangesetAdaptor.adaptor()") {
529
- const env_4 = { stack: [], error: void 0, hasError: false };
530
- try {
531
- const reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });
532
- const adaptor = __addDisposableResource(env_4, new ECChangesetAdaptor(reader), false);
533
- adaptor.acceptOp("Updated");
534
- const cci = new PartialECChangeUnifier();
535
- while (adaptor.step()) {
536
- cci.appendFrom(adaptor);
537
- }
538
- const changes = Array.from(cci.instances);
663
+ const testChanges = (changes) => {
539
664
  assert.equal(changes.length, 2);
540
665
  assert.equal(changes[0].ECInstanceId, "0x20000000001");
541
666
  assert.equal(changes[0].$meta?.classFullName, "BisCore:DrawingModel");
@@ -545,13 +670,46 @@ describe("Changeset Reader API", async () => {
545
670
  assert.equal(changes[1].$meta?.classFullName, "BisCore:DrawingModel");
546
671
  assert.equal(changes[1].$meta?.op, "Updated");
547
672
  assert.equal(changes[1].$meta?.stage, "Old");
673
+ };
674
+ if (true || "test with InMemoryInstanceCache") {
675
+ const env_11 = { stack: [], error: void 0, hasError: false };
676
+ try {
677
+ const reader = __addDisposableResource(env_11, SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true }), false);
678
+ const adaptor = __addDisposableResource(env_11, new ECChangesetAdaptor(reader), false);
679
+ adaptor.acceptOp("Updated");
680
+ const pcu = __addDisposableResource(env_11, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache()), false);
681
+ while (adaptor.step()) {
682
+ pcu.appendFrom(adaptor);
683
+ }
684
+ testChanges(Array.from(pcu.instances));
685
+ }
686
+ catch (e_11) {
687
+ env_11.error = e_11;
688
+ env_11.hasError = true;
689
+ }
690
+ finally {
691
+ __disposeResources(env_11);
692
+ }
548
693
  }
549
- catch (e_4) {
550
- env_4.error = e_4;
551
- env_4.hasError = true;
552
- }
553
- finally {
554
- __disposeResources(env_4);
694
+ if (true || "test with SqliteBackedInstanceCache") {
695
+ const env_12 = { stack: [], error: void 0, hasError: false };
696
+ try {
697
+ const reader = __addDisposableResource(env_12, SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true }), false);
698
+ const adaptor = __addDisposableResource(env_12, new ECChangesetAdaptor(reader), false);
699
+ adaptor.acceptOp("Updated");
700
+ const pcu = __addDisposableResource(env_12, new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel)), false);
701
+ while (adaptor.step()) {
702
+ pcu.appendFrom(adaptor);
703
+ }
704
+ testChanges(Array.from(pcu.instances));
705
+ }
706
+ catch (e_12) {
707
+ env_12.error = e_12;
708
+ env_12.hasError = true;
709
+ }
710
+ finally {
711
+ __disposeResources(env_12);
712
+ }
555
713
  }
556
714
  }
557
715
  rwIModel.close();
@@ -887,5 +1045,258 @@ describe("Changeset Reader API", async () => {
887
1045
  }
888
1046
  rwIModel.close();
889
1047
  });
1048
+ it("Delete class FK constraint violation in cache table", async () => {
1049
+ // Helper to check if TestClass exists in schema and cache table for both briefcases
1050
+ function checkClass(firstBriefcase, isClassInFirst, secondBriefcase, isClassInSecond) {
1051
+ const firstItems = firstBriefcase.getSchemaProps("TestSchema").items;
1052
+ assert.equal(isClassInFirst, !!firstItems?.TestClass);
1053
+ const secondItems = secondBriefcase.getSchemaProps("TestSchema").items;
1054
+ assert.equal(isClassInSecond, !!secondItems?.TestClass);
1055
+ const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = 'TestClass'`;
1056
+ const firstStmt = firstBriefcase.prepareSqliteStatement(sql);
1057
+ assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);
1058
+ firstStmt[Symbol.dispose]();
1059
+ const secondStmt = secondBriefcase.prepareSqliteStatement(sql);
1060
+ assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);
1061
+ secondStmt[Symbol.dispose]();
1062
+ }
1063
+ const adminToken = "super manager token";
1064
+ const iModelName = "test";
1065
+ const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject", accessToken: adminToken });
1066
+ assert.isNotEmpty(rwIModelId);
1067
+ // Open two briefcases for the same iModel
1068
+ const [firstBriefCase, secondBriefCase] = await Promise.all([
1069
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),
1070
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })
1071
+ ]);
1072
+ // Enable shared channel for both
1073
+ [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));
1074
+ await firstBriefCase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1075
+ <ECSchema schemaName="TestSchema" alias="ts" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1076
+ <ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
1077
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1078
+
1079
+ <ECCustomAttributes>
1080
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1081
+ </ECCustomAttributes>
1082
+
1083
+ <ECEntityClass typeName="TestClass">
1084
+ <BaseClass>bis:PhysicalElement</BaseClass>
1085
+ </ECEntityClass>
1086
+ </ECSchema>`]);
1087
+ firstBriefCase.saveChanges("import initial schema");
1088
+ // Push the changes to the hub
1089
+ await firstBriefCase.pushChanges({ description: "push initial schema changeset", accessToken: adminToken });
1090
+ // Sync the second briefcase with the iModel
1091
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1092
+ checkClass(firstBriefCase, true, secondBriefCase, true);
1093
+ // Import the schema
1094
+ await firstBriefCase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1095
+ <ECSchema schemaName="TestSchema" alias="ts" version="2.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1096
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1097
+
1098
+ <ECCustomAttributes>
1099
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1100
+ </ECCustomAttributes>
1101
+ </ECSchema>`]);
1102
+ firstBriefCase.saveChanges("imported schema");
1103
+ // Push the changeset to the hub
1104
+ await firstBriefCase.pushChanges({ description: "Delete class major change", accessToken: adminToken });
1105
+ checkClass(firstBriefCase, false, secondBriefCase, true);
1106
+ // Apply the latest changeset to a new briefcase
1107
+ try {
1108
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1109
+ }
1110
+ catch (error) {
1111
+ assert.fail(`Should not have failed with the error: ${error.message}`);
1112
+ }
1113
+ checkClass(firstBriefCase, false, secondBriefCase, false);
1114
+ // Cleanup
1115
+ await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);
1116
+ });
1117
+ it("Delete class FK constraint violation in cache table through a revert", async () => {
1118
+ // Helper to check if TestClass exists in schema and cache table for both briefcases
1119
+ function checkClass(className, firstBriefcase, isClassInFirst, secondBriefcase, isClassInSecond) {
1120
+ assert.equal(isClassInFirst, !!firstBriefcase.getSchemaProps("TestSchema").items?.[className]);
1121
+ assert.equal(isClassInSecond, !!secondBriefcase.getSchemaProps("TestSchema").items?.[className]);
1122
+ const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = '${className}'`;
1123
+ const firstStmt = firstBriefcase.prepareSqliteStatement(sql);
1124
+ assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);
1125
+ firstStmt[Symbol.dispose]();
1126
+ const secondStmt = secondBriefcase.prepareSqliteStatement(sql);
1127
+ assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);
1128
+ secondStmt[Symbol.dispose]();
1129
+ }
1130
+ const adminToken = "super manager token";
1131
+ const iModelName = "test";
1132
+ const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject", accessToken: adminToken });
1133
+ assert.isNotEmpty(rwIModelId);
1134
+ // Open two briefcases for the same iModel
1135
+ const [firstBriefCase, secondBriefCase] = await Promise.all([
1136
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),
1137
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })
1138
+ ]);
1139
+ // Enable shared channel for both
1140
+ [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));
1141
+ await firstBriefCase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1142
+ <ECSchema schemaName="TestSchema" alias="ts" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1143
+ <ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
1144
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1145
+
1146
+ <ECCustomAttributes>
1147
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1148
+ </ECCustomAttributes>
1149
+
1150
+ <ECEntityClass typeName="TestClass">
1151
+ <BaseClass>bis:PhysicalElement</BaseClass>
1152
+ </ECEntityClass>
1153
+ </ECSchema>`]);
1154
+ firstBriefCase.saveChanges("import initial schema");
1155
+ // Push the changes to the hub
1156
+ await firstBriefCase.pushChanges({ description: "push initial schema changeset", accessToken: adminToken });
1157
+ // Sync the second briefcase
1158
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1159
+ checkClass("TestClass", firstBriefCase, true, secondBriefCase, true);
1160
+ // Import the schema
1161
+ await firstBriefCase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1162
+ <ECSchema schemaName="TestSchema" alias="ts" version="1.0.1" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1163
+ <ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
1164
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1165
+
1166
+ <ECCustomAttributes>
1167
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1168
+ </ECCustomAttributes>
1169
+
1170
+ <ECEntityClass typeName="TestClass">
1171
+ <BaseClass>bis:PhysicalElement</BaseClass>
1172
+ </ECEntityClass>
1173
+
1174
+ <ECEntityClass typeName="AnotherTestClass">
1175
+ <BaseClass>bis:PhysicalElement</BaseClass>
1176
+ </ECEntityClass>
1177
+ </ECSchema>`]);
1178
+ firstBriefCase.saveChanges("imported schema");
1179
+ // Push the changeset to the hub
1180
+ await firstBriefCase.pushChanges({ description: "Add another class change", accessToken: adminToken });
1181
+ // Sync the second briefcase
1182
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1183
+ checkClass("TestClass", firstBriefCase, true, secondBriefCase, true);
1184
+ checkClass("AnotherTestClass", firstBriefCase, true, secondBriefCase, true);
1185
+ // Revert the latest changeset from the first briefcase
1186
+ try {
1187
+ await firstBriefCase.revertAndPushChanges({ toIndex: 2, description: "Revert last changeset" });
1188
+ }
1189
+ catch (error) {
1190
+ assert.fail(`Should not have failed with the error: ${error.message}`);
1191
+ }
1192
+ checkClass("TestClass", firstBriefCase, true, secondBriefCase, true);
1193
+ checkClass("AnotherTestClass", firstBriefCase, false, secondBriefCase, true);
1194
+ try {
1195
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1196
+ }
1197
+ catch (error) {
1198
+ assert.fail(`Should not have failed with the error: ${error.message}`);
1199
+ }
1200
+ checkClass("TestClass", firstBriefCase, true, secondBriefCase, true);
1201
+ checkClass("AnotherTestClass", firstBriefCase, false, secondBriefCase, false);
1202
+ // Cleanup
1203
+ await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);
1204
+ });
1205
+ it("Track changeset health stats", async () => {
1206
+ const adminToken = "super manager token";
1207
+ const iModelName = "test";
1208
+ const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject", accessToken: adminToken });
1209
+ assert.isNotEmpty(rwIModelId);
1210
+ // Open two briefcases for the same iModel
1211
+ const [firstBriefcase, secondBriefcase] = await Promise.all([
1212
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),
1213
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })
1214
+ ]);
1215
+ [firstBriefcase, secondBriefcase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));
1216
+ await firstBriefcase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1217
+ <ECSchema schemaName="TestSchema" alias="ts" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1218
+ <ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
1219
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1220
+
1221
+ <ECCustomAttributes>
1222
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1223
+ </ECCustomAttributes>
1224
+
1225
+ <ECEntityClass typeName="TestClass">
1226
+ <BaseClass>bis:PhysicalElement</BaseClass>
1227
+ </ECEntityClass>
1228
+ </ECSchema>`]);
1229
+ firstBriefcase.saveChanges("import initial schema");
1230
+ // Enable changeset tracking for both briefcases
1231
+ await Promise.all([firstBriefcase.enableChangesetStatTracking(), secondBriefcase.enableChangesetStatTracking()]);
1232
+ await firstBriefcase.pushChanges({ description: "push initial schema changeset", accessToken: adminToken });
1233
+ await secondBriefcase.pullChanges({ accessToken: adminToken });
1234
+ // Schema upgrade
1235
+ await secondBriefcase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1236
+ <ECSchema schemaName="TestSchema" alias="ts" version="2.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1237
+ <ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
1238
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1239
+
1240
+ <ECCustomAttributes>
1241
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1242
+ </ECCustomAttributes>
1243
+
1244
+ <ECEntityClass typeName="TestClass">
1245
+ <BaseClass>bis:PhysicalElement</BaseClass>
1246
+ <ECProperty propertyName="TestProperty" typeName="string"/>
1247
+ </ECEntityClass>
1248
+
1249
+ <ECEnumeration typeName="TestEnum" backingTypeName="int" isStrict="true">
1250
+ <ECEnumerator name="Enumerator1" value="1" displayLabel="TestEnumerator1"/>
1251
+ <ECEnumerator name="Enumerator2" value="2" displayLabel="TestEnumerator2"/>
1252
+ </ECEnumeration>
1253
+ </ECSchema>`]);
1254
+ secondBriefcase.saveChanges("imported schema");
1255
+ await secondBriefcase.pushChanges({ description: "Added a property to TestClass and an enum", accessToken: adminToken });
1256
+ await firstBriefcase.pullChanges({ accessToken: adminToken });
1257
+ // Major schema change
1258
+ await firstBriefcase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1259
+ <ECSchema schemaName="TestSchema" alias="ts" version="2.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1260
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1261
+
1262
+ <ECCustomAttributes>
1263
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1264
+ </ECCustomAttributes>
1265
+
1266
+ <ECEnumeration typeName="TestEnum" backingTypeName="int" isStrict="true">
1267
+ <ECEnumerator name="Enumerator1" value="1" displayLabel="TestEnumerator1"/>
1268
+ <ECEnumerator name="Enumerator2" value="2" displayLabel="TestEnumerator2"/>
1269
+ </ECEnumeration>
1270
+ </ECSchema>`]);
1271
+ firstBriefcase.saveChanges("imported schema");
1272
+ await firstBriefcase.pushChanges({ description: "Deleted TestClass", accessToken: adminToken });
1273
+ await secondBriefcase.pullChanges({ accessToken: adminToken });
1274
+ const firstBriefcaseChangesets = await firstBriefcase.getAllChangesetHealthData();
1275
+ const secondBriefcaseChangesets = await secondBriefcase.getAllChangesetHealthData();
1276
+ assert.equal(firstBriefcaseChangesets.length, 1);
1277
+ const firstBriefcaseChangeset = firstBriefcaseChangesets[0];
1278
+ expect(firstBriefcaseChangeset.uncompressedSizeBytes).to.be.greaterThan(300);
1279
+ expect(firstBriefcaseChangeset.insertedRows).to.be.greaterThanOrEqual(4);
1280
+ expect(firstBriefcaseChangeset.updatedRows).to.be.greaterThanOrEqual(1);
1281
+ expect(firstBriefcaseChangeset.deletedRows).to.be.eql(0);
1282
+ expect(firstBriefcaseChangeset.totalFullTableScans).to.be.eql(0);
1283
+ expect(firstBriefcaseChangeset.perStatementStats.length).to.be.eql(5);
1284
+ assert.equal(secondBriefcaseChangesets.length, 2);
1285
+ const [secondBriefcaseChangeset1, secondBriefcaseChangeset2] = secondBriefcaseChangesets;
1286
+ expect(secondBriefcaseChangeset1.uncompressedSizeBytes).to.be.greaterThan(40000);
1287
+ expect(secondBriefcaseChangeset1.insertedRows).to.be.greaterThanOrEqual(52);
1288
+ expect(secondBriefcaseChangeset1.updatedRows).to.be.greaterThanOrEqual(921);
1289
+ expect(secondBriefcaseChangeset1.deletedRows).to.be.eql(0);
1290
+ expect(secondBriefcaseChangeset1.totalFullTableScans).to.be.eql(0);
1291
+ expect(secondBriefcaseChangeset1.perStatementStats.length).to.be.eql(11);
1292
+ expect(secondBriefcaseChangeset2.uncompressedSizeBytes).to.be.greaterThan(40000);
1293
+ expect(secondBriefcaseChangeset2.insertedRows).to.be.eql(0);
1294
+ expect(secondBriefcaseChangeset2.updatedRows).to.be.greaterThanOrEqual(921);
1295
+ expect(secondBriefcaseChangeset2.deletedRows).to.be.greaterThanOrEqual(52);
1296
+ expect(secondBriefcaseChangeset2.totalFullTableScans).to.be.eql(0);
1297
+ expect(secondBriefcaseChangeset2.perStatementStats.length).to.be.eql(11);
1298
+ // Cleanup
1299
+ await Promise.all([secondBriefcase.close(), firstBriefcase.close()]);
1300
+ });
890
1301
  });
891
1302
  //# sourceMappingURL=ChangesetReader.test.js.map