@itwin/core-backend 5.9.0-dev.8 → 5.9.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 (604) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +38 -0
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  6. package/lib/cjs/BisCoreSchema.js.map +1 -1
  7. package/lib/cjs/BlobContainerService.js.map +1 -1
  8. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  9. package/lib/cjs/BriefcaseManager.js +6 -3
  10. package/lib/cjs/BriefcaseManager.js.map +1 -1
  11. package/lib/cjs/CatalogDb.js.map +1 -1
  12. package/lib/cjs/Category.d.ts +4 -4
  13. package/lib/cjs/Category.js.map +1 -1
  14. package/lib/cjs/ChangeSummaryManager.js +2 -2
  15. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  16. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  17. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  18. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  19. package/lib/cjs/ChangesetECAdaptor.js +255 -249
  20. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  21. package/lib/cjs/ChangesetReader.d.ts +186 -0
  22. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  23. package/lib/cjs/ChangesetReader.js +372 -0
  24. package/lib/cjs/ChangesetReader.js.map +1 -0
  25. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  26. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  27. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  28. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  29. package/lib/cjs/ChannelControl.js.map +1 -1
  30. package/lib/cjs/CheckpointManager.js.map +1 -1
  31. package/lib/cjs/ClassRegistry.js +5 -5
  32. package/lib/cjs/ClassRegistry.js.map +1 -1
  33. package/lib/cjs/CloudSqlite.d.ts +1 -1
  34. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  35. package/lib/cjs/CloudSqlite.js +68 -13
  36. package/lib/cjs/CloudSqlite.js.map +1 -1
  37. package/lib/cjs/CodeService.js.map +1 -1
  38. package/lib/cjs/CodeSpecs.d.ts +3 -3
  39. package/lib/cjs/CodeSpecs.js.map +1 -1
  40. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  41. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  42. package/lib/cjs/DevTools.js.map +1 -1
  43. package/lib/cjs/DisplayStyle.d.ts +2 -2
  44. package/lib/cjs/DisplayStyle.js.map +1 -1
  45. package/lib/cjs/ECDb.js.map +1 -1
  46. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  47. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  48. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  49. package/lib/cjs/ECSqlStatement.js.map +1 -1
  50. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  51. package/lib/cjs/EditTxn.d.ts +55 -1
  52. package/lib/cjs/EditTxn.d.ts.map +1 -1
  53. package/lib/cjs/EditTxn.js +43 -1
  54. package/lib/cjs/EditTxn.js.map +1 -1
  55. package/lib/cjs/Element.d.ts +79 -10
  56. package/lib/cjs/Element.d.ts.map +1 -1
  57. package/lib/cjs/Element.js +38 -2
  58. package/lib/cjs/Element.js.map +1 -1
  59. package/lib/cjs/ElementAspect.d.ts +1 -1
  60. package/lib/cjs/ElementAspect.js.map +1 -1
  61. package/lib/cjs/ElementGraphics.js.map +1 -1
  62. package/lib/cjs/ElementTreeWalker.d.ts +5 -5
  63. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  64. package/lib/cjs/Entity.js.map +1 -1
  65. package/lib/cjs/EntityReferences.js.map +1 -1
  66. package/lib/cjs/ExportGraphics.js.map +1 -1
  67. package/lib/cjs/ExternalSource.d.ts +2 -2
  68. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  69. package/lib/cjs/ExternalSource.js.map +1 -1
  70. package/lib/cjs/FontFile.js.map +1 -1
  71. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  72. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  73. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  74. package/lib/cjs/GeographicCRSServices.js +13 -4
  75. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  76. package/lib/cjs/GeometrySummary.js +47 -47
  77. package/lib/cjs/GeometrySummary.js.map +1 -1
  78. package/lib/cjs/IModelDb.d.ts +31 -23
  79. package/lib/cjs/IModelDb.d.ts.map +1 -1
  80. package/lib/cjs/IModelDb.js +53 -34
  81. package/lib/cjs/IModelDb.js.map +1 -1
  82. package/lib/cjs/IModelDbFonts.js.map +1 -1
  83. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  84. package/lib/cjs/IModelHost.js.map +1 -1
  85. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  86. package/lib/cjs/IModelJsFs.js.map +1 -1
  87. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  88. package/lib/cjs/IpcHost.d.ts.map +1 -1
  89. package/lib/cjs/IpcHost.js +33 -13
  90. package/lib/cjs/IpcHost.js.map +1 -1
  91. package/lib/cjs/LineStyle.d.ts +6 -6
  92. package/lib/cjs/LineStyle.js.map +1 -1
  93. package/lib/cjs/LocalHub.js +1 -1
  94. package/lib/cjs/LocalHub.js.map +1 -1
  95. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  96. package/lib/cjs/LockControl.d.ts +85 -1
  97. package/lib/cjs/LockControl.d.ts.map +1 -1
  98. package/lib/cjs/LockControl.js.map +1 -1
  99. package/lib/cjs/Material.d.ts +1 -1
  100. package/lib/cjs/Material.js.map +1 -1
  101. package/lib/cjs/Model.d.ts +40 -6
  102. package/lib/cjs/Model.d.ts.map +1 -1
  103. package/lib/cjs/Model.js +24 -0
  104. package/lib/cjs/Model.js.map +1 -1
  105. package/lib/cjs/NativeAppStorage.js.map +1 -1
  106. package/lib/cjs/NativeHost.js.map +1 -1
  107. package/lib/cjs/NavigationRelationship.js.map +1 -1
  108. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  109. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  110. package/lib/cjs/PartialChangeUnifier.js +234 -0
  111. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  112. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  113. package/lib/cjs/PropertyStore.js.map +1 -1
  114. package/lib/cjs/Relationship.d.ts +10 -10
  115. package/lib/cjs/Relationship.js +6 -6
  116. package/lib/cjs/Relationship.js.map +1 -1
  117. package/lib/cjs/RpcBackend.js.map +1 -1
  118. package/lib/cjs/SQLiteDb.js.map +1 -1
  119. package/lib/cjs/Schema.js.map +1 -1
  120. package/lib/cjs/SchemaSync.js.map +1 -1
  121. package/lib/cjs/SchemaUtils.js.map +1 -1
  122. package/lib/cjs/SheetIndex.d.ts +4 -4
  123. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  124. package/lib/cjs/SheetIndex.js.map +1 -1
  125. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  126. package/lib/cjs/SqliteChangesetReader.js +1 -1
  127. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  128. package/lib/cjs/SqliteStatement.js.map +1 -1
  129. package/lib/cjs/StashManager.js.map +1 -1
  130. package/lib/cjs/Texture.d.ts +1 -1
  131. package/lib/cjs/Texture.js.map +1 -1
  132. package/lib/cjs/TileStorage.js.map +1 -1
  133. package/lib/cjs/TxnManager.d.ts +114 -4
  134. package/lib/cjs/TxnManager.d.ts.map +1 -1
  135. package/lib/cjs/TxnManager.js +196 -8
  136. package/lib/cjs/TxnManager.js.map +1 -1
  137. package/lib/cjs/ViewDefinition.d.ts +25 -13
  138. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  139. package/lib/cjs/ViewDefinition.js +77 -25
  140. package/lib/cjs/ViewDefinition.js.map +1 -1
  141. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  142. package/lib/cjs/ViewStore.d.ts.map +1 -1
  143. package/lib/cjs/ViewStore.js +63 -21
  144. package/lib/cjs/ViewStore.js.map +1 -1
  145. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  146. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  147. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  148. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  149. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  150. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  151. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  152. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  153. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  154. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  155. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  156. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  157. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  158. package/lib/cjs/core-backend.d.ts +3 -0
  159. package/lib/cjs/core-backend.d.ts.map +1 -1
  160. package/lib/cjs/core-backend.js +3 -0
  161. package/lib/cjs/core-backend.js.map +1 -1
  162. package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
  163. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  164. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  165. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  166. package/lib/cjs/domains/GenericElements.d.ts +2 -2
  167. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  168. package/lib/cjs/domains/GenericElements.js.map +1 -1
  169. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  170. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  171. package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
  172. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  173. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  174. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  175. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  176. package/lib/cjs/internal/HubMock.d.ts +2 -0
  177. package/lib/cjs/internal/HubMock.d.ts.map +1 -1
  178. package/lib/cjs/internal/HubMock.js +7 -0
  179. package/lib/cjs/internal/HubMock.js.map +1 -1
  180. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  181. package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
  182. package/lib/cjs/internal/IntegrityCheck.js +22 -22
  183. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  184. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  185. package/lib/cjs/internal/NoLocks.d.ts.map +1 -1
  186. package/lib/cjs/internal/NoLocks.js +6 -0
  187. package/lib/cjs/internal/NoLocks.js.map +1 -1
  188. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  189. package/lib/cjs/internal/ServerBasedLocks.d.ts +12 -0
  190. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  191. package/lib/cjs/internal/ServerBasedLocks.js +285 -4
  192. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  193. package/lib/cjs/internal/Symbols.js.map +1 -1
  194. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  195. package/lib/cjs/internal/cross-package.js.map +1 -1
  196. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  197. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  198. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  199. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  200. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  201. package/lib/cjs/rpc/multipart.js.map +1 -1
  202. package/lib/cjs/rpc/tracing.js.map +1 -1
  203. package/lib/cjs/rpc/web/logging.js.map +1 -1
  204. package/lib/cjs/rpc/web/request.js.map +1 -1
  205. package/lib/cjs/rpc/web/response.js.map +1 -1
  206. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  207. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  208. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  209. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  210. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  211. package/lib/cjs/workspace/Settings.d.ts +6 -4
  212. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  213. package/lib/cjs/workspace/Settings.js.map +1 -1
  214. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  215. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  216. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  217. package/lib/cjs/workspace/Workspace.js.map +1 -1
  218. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  219. package/lib/esm/BackendHubAccess.d.ts +38 -0
  220. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  221. package/lib/esm/BackendHubAccess.js.map +1 -1
  222. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  223. package/lib/esm/BisCoreSchema.js.map +1 -1
  224. package/lib/esm/BlobContainerService.js.map +1 -1
  225. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  226. package/lib/esm/BriefcaseManager.js +6 -3
  227. package/lib/esm/BriefcaseManager.js.map +1 -1
  228. package/lib/esm/CatalogDb.js.map +1 -1
  229. package/lib/esm/Category.d.ts +4 -4
  230. package/lib/esm/Category.js.map +1 -1
  231. package/lib/esm/ChangeSummaryManager.js +2 -2
  232. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  233. package/lib/esm/ChangedElementsDb.js.map +1 -1
  234. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  235. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  236. package/lib/esm/ChangesetECAdaptor.js +255 -249
  237. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  238. package/lib/esm/ChangesetReader.d.ts +186 -0
  239. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  240. package/lib/esm/ChangesetReader.js +368 -0
  241. package/lib/esm/ChangesetReader.js.map +1 -0
  242. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  243. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  244. package/lib/esm/ChangesetReaderTypes.js +20 -0
  245. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  246. package/lib/esm/ChannelControl.js.map +1 -1
  247. package/lib/esm/CheckpointManager.js.map +1 -1
  248. package/lib/esm/ClassRegistry.js +5 -5
  249. package/lib/esm/ClassRegistry.js.map +1 -1
  250. package/lib/esm/CloudSqlite.d.ts +1 -1
  251. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  252. package/lib/esm/CloudSqlite.js +69 -14
  253. package/lib/esm/CloudSqlite.js.map +1 -1
  254. package/lib/esm/CodeService.js.map +1 -1
  255. package/lib/esm/CodeSpecs.d.ts +3 -3
  256. package/lib/esm/CodeSpecs.js.map +1 -1
  257. package/lib/esm/ConcurrentQuery.js.map +1 -1
  258. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  259. package/lib/esm/DevTools.js.map +1 -1
  260. package/lib/esm/DisplayStyle.d.ts +2 -2
  261. package/lib/esm/DisplayStyle.js.map +1 -1
  262. package/lib/esm/ECDb.js.map +1 -1
  263. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  264. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  265. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  266. package/lib/esm/ECSqlStatement.js.map +1 -1
  267. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  268. package/lib/esm/EditTxn.d.ts +55 -1
  269. package/lib/esm/EditTxn.d.ts.map +1 -1
  270. package/lib/esm/EditTxn.js +43 -1
  271. package/lib/esm/EditTxn.js.map +1 -1
  272. package/lib/esm/Element.d.ts +79 -10
  273. package/lib/esm/Element.d.ts.map +1 -1
  274. package/lib/esm/Element.js +38 -2
  275. package/lib/esm/Element.js.map +1 -1
  276. package/lib/esm/ElementAspect.d.ts +1 -1
  277. package/lib/esm/ElementAspect.js.map +1 -1
  278. package/lib/esm/ElementGraphics.js.map +1 -1
  279. package/lib/esm/ElementTreeWalker.d.ts +5 -5
  280. package/lib/esm/ElementTreeWalker.js.map +1 -1
  281. package/lib/esm/Entity.js.map +1 -1
  282. package/lib/esm/EntityReferences.js.map +1 -1
  283. package/lib/esm/ExportGraphics.js.map +1 -1
  284. package/lib/esm/ExternalSource.d.ts +2 -2
  285. package/lib/esm/ExternalSource.d.ts.map +1 -1
  286. package/lib/esm/ExternalSource.js.map +1 -1
  287. package/lib/esm/FontFile.js.map +1 -1
  288. package/lib/esm/GeoCoordConfig.js.map +1 -1
  289. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  290. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  291. package/lib/esm/GeographicCRSServices.js +12 -4
  292. package/lib/esm/GeographicCRSServices.js.map +1 -1
  293. package/lib/esm/GeometrySummary.js +47 -47
  294. package/lib/esm/GeometrySummary.js.map +1 -1
  295. package/lib/esm/IModelDb.d.ts +31 -23
  296. package/lib/esm/IModelDb.d.ts.map +1 -1
  297. package/lib/esm/IModelDb.js +54 -35
  298. package/lib/esm/IModelDb.js.map +1 -1
  299. package/lib/esm/IModelDbFonts.js.map +1 -1
  300. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  301. package/lib/esm/IModelHost.js.map +1 -1
  302. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  303. package/lib/esm/IModelJsFs.js.map +1 -1
  304. package/lib/esm/ImageSourceConversion.js.map +1 -1
  305. package/lib/esm/IpcHost.d.ts.map +1 -1
  306. package/lib/esm/IpcHost.js +33 -13
  307. package/lib/esm/IpcHost.js.map +1 -1
  308. package/lib/esm/LineStyle.d.ts +6 -6
  309. package/lib/esm/LineStyle.js.map +1 -1
  310. package/lib/esm/LocalHub.js +1 -1
  311. package/lib/esm/LocalHub.js.map +1 -1
  312. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  313. package/lib/esm/LockControl.d.ts +85 -1
  314. package/lib/esm/LockControl.d.ts.map +1 -1
  315. package/lib/esm/LockControl.js.map +1 -1
  316. package/lib/esm/Material.d.ts +1 -1
  317. package/lib/esm/Material.js.map +1 -1
  318. package/lib/esm/Model.d.ts +40 -6
  319. package/lib/esm/Model.d.ts.map +1 -1
  320. package/lib/esm/Model.js +24 -0
  321. package/lib/esm/Model.js.map +1 -1
  322. package/lib/esm/NativeAppStorage.js.map +1 -1
  323. package/lib/esm/NativeHost.js.map +1 -1
  324. package/lib/esm/NavigationRelationship.js.map +1 -1
  325. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  326. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  327. package/lib/esm/PartialChangeUnifier.js +230 -0
  328. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  329. package/lib/esm/PromiseMemoizer.js.map +1 -1
  330. package/lib/esm/PropertyStore.js.map +1 -1
  331. package/lib/esm/Relationship.d.ts +10 -10
  332. package/lib/esm/Relationship.js +6 -6
  333. package/lib/esm/Relationship.js.map +1 -1
  334. package/lib/esm/RpcBackend.js.map +1 -1
  335. package/lib/esm/SQLiteDb.js.map +1 -1
  336. package/lib/esm/Schema.js.map +1 -1
  337. package/lib/esm/SchemaSync.js.map +1 -1
  338. package/lib/esm/SchemaUtils.js.map +1 -1
  339. package/lib/esm/SheetIndex.d.ts +4 -4
  340. package/lib/esm/SheetIndex.d.ts.map +1 -1
  341. package/lib/esm/SheetIndex.js.map +1 -1
  342. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  343. package/lib/esm/SqliteChangesetReader.js +1 -1
  344. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  345. package/lib/esm/SqliteStatement.js.map +1 -1
  346. package/lib/esm/StashManager.js.map +1 -1
  347. package/lib/esm/Texture.d.ts +1 -1
  348. package/lib/esm/Texture.js.map +1 -1
  349. package/lib/esm/TileStorage.js.map +1 -1
  350. package/lib/esm/TxnManager.d.ts +114 -4
  351. package/lib/esm/TxnManager.d.ts.map +1 -1
  352. package/lib/esm/TxnManager.js +196 -8
  353. package/lib/esm/TxnManager.js.map +1 -1
  354. package/lib/esm/ViewDefinition.d.ts +25 -13
  355. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  356. package/lib/esm/ViewDefinition.js +78 -26
  357. package/lib/esm/ViewDefinition.js.map +1 -1
  358. package/lib/esm/ViewStateHydrator.js.map +1 -1
  359. package/lib/esm/ViewStore.d.ts.map +1 -1
  360. package/lib/esm/ViewStore.js +64 -22
  361. package/lib/esm/ViewStore.js.map +1 -1
  362. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  363. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  364. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  365. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  366. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  367. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  368. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  369. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  370. package/lib/esm/core-backend.d.ts +3 -0
  371. package/lib/esm/core-backend.d.ts.map +1 -1
  372. package/lib/esm/core-backend.js +3 -0
  373. package/lib/esm/core-backend.js.map +1 -1
  374. package/lib/esm/domains/FunctionalElements.d.ts +1 -1
  375. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  376. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  377. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  378. package/lib/esm/domains/GenericElements.d.ts +2 -2
  379. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  380. package/lib/esm/domains/GenericElements.js.map +1 -1
  381. package/lib/esm/domains/GenericSchema.js.map +1 -1
  382. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  383. package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
  384. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  385. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  386. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  387. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  388. package/lib/esm/internal/HubMock.d.ts +2 -0
  389. package/lib/esm/internal/HubMock.d.ts.map +1 -1
  390. package/lib/esm/internal/HubMock.js +7 -0
  391. package/lib/esm/internal/HubMock.js.map +1 -1
  392. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  393. package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
  394. package/lib/esm/internal/IntegrityCheck.js +22 -22
  395. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  396. package/lib/esm/internal/NativePlatform.js.map +1 -1
  397. package/lib/esm/internal/NoLocks.d.ts.map +1 -1
  398. package/lib/esm/internal/NoLocks.js +6 -0
  399. package/lib/esm/internal/NoLocks.js.map +1 -1
  400. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  401. package/lib/esm/internal/ServerBasedLocks.d.ts +12 -0
  402. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
  403. package/lib/esm/internal/ServerBasedLocks.js +286 -5
  404. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  405. package/lib/esm/internal/Symbols.js.map +1 -1
  406. package/lib/esm/internal/annotations/fields.js.map +1 -1
  407. package/lib/esm/internal/cross-package.js.map +1 -1
  408. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  409. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  410. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  411. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  412. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  413. package/lib/esm/rpc/multipart.js.map +1 -1
  414. package/lib/esm/rpc/tracing.js.map +1 -1
  415. package/lib/esm/rpc/web/logging.js.map +1 -1
  416. package/lib/esm/rpc/web/request.js.map +1 -1
  417. package/lib/esm/rpc/web/response.js.map +1 -1
  418. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  419. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  420. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  421. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  422. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  423. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  424. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  425. package/lib/esm/test/AttachDb.test.js +11 -11
  426. package/lib/esm/test/AttachDb.test.js.map +1 -1
  427. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  428. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  429. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  430. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  431. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  432. package/lib/esm/test/IModelHost.test.js.map +1 -1
  433. package/lib/esm/test/IModelTestUtils.d.ts +1 -0
  434. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  435. package/lib/esm/test/IModelTestUtils.js +5 -0
  436. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  437. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  438. package/lib/esm/test/IpcHost.test.js +112 -0
  439. package/lib/esm/test/IpcHost.test.js.map +1 -1
  440. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  441. package/lib/esm/test/PrintElementTree.js.map +1 -1
  442. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  443. package/lib/esm/test/RevisionUtility.js.map +1 -1
  444. package/lib/esm/test/SchemaUtils.test.js +25 -25
  445. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  446. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  447. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  448. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  449. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  450. package/lib/esm/test/TestEditTxn.js.map +1 -1
  451. package/lib/esm/test/TestUtils.js.map +1 -1
  452. package/lib/esm/test/annotations/Fields.test.js +53 -53
  453. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  454. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  455. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  456. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  457. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  458. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  459. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  460. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  461. package/lib/esm/test/categories/Category.test.js.map +1 -1
  462. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  463. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  464. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  465. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  466. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  467. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  468. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  469. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  470. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  471. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  472. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  473. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  474. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  475. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  476. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  477. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  478. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  479. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  480. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  481. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  482. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  483. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  484. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  485. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  486. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  487. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  488. package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
  489. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  490. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  491. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  492. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  493. package/lib/esm/test/element/ElementRoundTrip.test.js +283 -142
  494. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  495. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  496. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  497. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  498. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  499. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  500. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  501. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  502. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  503. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  504. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  505. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  506. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  507. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  508. package/lib/esm/test/hubaccess/Rebase.test.js +57 -57
  509. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  510. package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
  511. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  512. package/lib/esm/test/imageData.js.map +1 -1
  513. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  514. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  515. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  516. package/lib/esm/test/imodel/IModel.test.js +45 -45
  517. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  518. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  519. package/lib/esm/test/imodel/SchemaXmlImport.test.js +77 -13
  520. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  521. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  522. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  523. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  524. package/lib/esm/test/index.js.map +1 -1
  525. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  526. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  527. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  528. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  529. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  530. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  531. package/lib/esm/test/rpc/response.test.js.map +1 -1
  532. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  533. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  534. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  535. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  536. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  537. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  538. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  539. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  540. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  541. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  542. package/lib/esm/test/standalone/ChangesetReader.test.js +4201 -1671
  543. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  544. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  545. package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
  546. package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
  547. package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
  548. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
  549. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  550. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  551. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  552. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  553. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  554. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  555. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  556. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  557. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  558. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  559. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  560. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  561. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  562. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  563. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  564. package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
  565. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  566. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  567. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  568. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  569. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  570. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  571. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  572. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  573. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  574. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  575. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  576. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  577. package/lib/esm/test/standalone/ServerBasedLocks.test.js +907 -3
  578. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  579. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  580. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  581. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  582. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  583. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  584. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  585. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  586. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  587. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  588. package/lib/esm/test/standalone/TxnManager.test.js +90 -0
  589. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  590. package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
  591. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  592. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  593. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  594. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  595. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  596. package/lib/esm/workspace/Settings.d.ts +6 -4
  597. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  598. package/lib/esm/workspace/Settings.js.map +1 -1
  599. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  600. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  601. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  602. package/lib/esm/workspace/Workspace.js.map +1 -1
  603. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  604. package/package.json +15 -15
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQliteChangesetReaderAndChangesetECAdaptor.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Code, ColorDef, GeometryStreamProps, IModel, QueryBinder, QueryRowFormat, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point3d } from \"@itwin/core-geometry\";\nimport * as chai from \"chai\";\nimport { assert, expect } from \"chai\";\nimport * as path from \"node:path\";\nimport { DrawingCategory } from \"../../Category\";\nimport { ChangedECInstance, ChangesetECAdaptor, ChangesetECAdaptor as ECChangesetAdaptor, ECChangeUnifierCache, PartialECChangeUnifier } from \"../../ChangesetECAdaptor\";\nimport { _nativeDb, ChannelControl, GraphicalElement2d, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\nimport { BriefcaseDb, SnapshotDb } from \"../../IModelDb\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { SqliteChangeOp, SqliteChangesetReader } from \"../../SqliteChangesetReader\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { EditTxn } from \"../../EditTxn\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */ // This test file will be removed subsequently, so we can allow usage of deprecated APIs within it.\n// This test file also contains tests outside of the ChangesetECAdaptor, so be cautious while removing it, remove just the tests which are related to ChangesetECAdaptor.\n\nfunction startTestTxn(iModel: BriefcaseDb | SnapshotDb, description = \"changeset reader\"): EditTxn {\n const txn = new EditTxn(iModel, description);\n txn.start();\n return txn;\n}\n\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\n if (txn.isActive)\n txn.saveChanges();\n await txn.iModel.importSchemaStrings(schemas);\n}\n\ndescribe(\"Sqlite Changeset Reader + ChangesetECAdaptor API\", async () => {\n let iTwinId: GuidString;\n\n before(() => {\n HubMock.startup(\"SqliteChangesetReaderAndChangesetECAdaptorTest\", KnownTestLocations.outputDir);\n iTwinId = HubMock.iTwinId;\n });\n after(() => HubMock.shutdown());\n it(\"Able to recover from when ExclusiveRootClassId is NULL for overflow table\", async () => {\n /**\n * 1. Import schema with class that span overflow table.\n * 2. Insert a element for the class.\n * 3. Push changes to hub.\n * 4. Update the element.\n * 5. Push changes to hub.\n * 6. Delete the element.\n * 7. Set ExclusiveRootClassId to NULL for overflow table. (Simulate the issue)\n * 8. ECChangesetAdaptor should be able to read the changeset 2 in which element is updated against latest imodel where element is deleted.\n */\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const nProps = 36;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n const txn = startTestTxn(rwIModel, \"recover overflow table changeset reader\");\n // 1. Import schema with class that span overflow table.\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i}\" typeName=\"string\"/>`).join(\"\\n\")}\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n // Insert element with 100 properties\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n const props = Array(nProps).fill(undefined).map((_, i) => {\n return { [`p${i}`]: `test_${i}` };\n }).reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n\n const geomElement = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...props,\n };\n\n // 2. Insert a element for the class.\n const id = txn.insertElement(geomElement);\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n txn.saveChanges();\n\n // 3. Push changes to hub.\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n // 4. Update the element.\n const updatedElementProps = Object.assign(\n rwIModel.elements.getElementProps(id),\n Array(nProps).fill(undefined).map((_, i) => {\n return { [`p${i}`]: `updated_${i}` };\n }).reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {}));\n\n await rwIModel.locks.acquireLocks({ exclusive: id });\n txn.updateElement(updatedElementProps);\n txn.saveChanges();\n\n // 5. Push changes to hub.\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n await rwIModel.locks.acquireLocks({ exclusive: id });\n\n // 6. Delete the element.\n txn.deleteElement(id);\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, db: rwIModel, disableSchemaCheck: true });\n\n // Set ExclusiveRootClassId to NULL for overflow table to simulate the issue\n expect(rwIModel[_nativeDb].executeSql(\"UPDATE ec_Table SET ExclusiveRootClassId=NULL WHERE Name='bis_GeometricElement2d_Overflow'\")).to.be.eq(DbResult.BE_SQLITE_OK);\n\n const adaptor = new ECChangesetAdaptor(reader);\n let assertOnOverflowTable = false;\n const classId = getClassIdByName(rwIModel, \"GeometricElement2d\");\n\n while (adaptor.step()) {\n if (adaptor.op === \"Updated\" && adaptor.inserted?.$meta?.tables[0] === \"bis_GeometricElement2d_Overflow\") {\n\n assert.isUndefined(adaptor.inserted.ECClassId);\n assert.equal(adaptor.inserted.ECInstanceId, \"\");\n assert.deepEqual(adaptor.inserted.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\n assert.equal(adaptor.inserted.$meta?.op, \"Updated\");\n assert.equal(adaptor.inserted.$meta?.classFullName, \"BisCore:GeometricElement2d\");\n assert.equal(adaptor.inserted.$meta.fallbackClassId, classId);\n assert.deepEqual(adaptor.inserted.$meta?.changeIndexes, [3]);\n assert.equal(adaptor.inserted.$meta?.stage, \"New\");\n\n assert.equal(adaptor.deleted!.ECInstanceId, \"\");\n assert.isUndefined(adaptor.deleted!.ECClassId);\n assert.deepEqual(adaptor.deleted!.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\n assert.equal(adaptor.deleted!.$meta?.op, \"Updated\");\n assert.equal(adaptor.deleted!.$meta?.classFullName, \"BisCore:GeometricElement2d\");\n assert.equal(adaptor.deleted!.$meta!.fallbackClassId, classId);\n assert.deepEqual(adaptor.deleted!.$meta?.changeIndexes, [3]);\n assert.equal(adaptor.deleted!.$meta?.stage, \"Old\");\n\n assertOnOverflowTable = true;\n }\n }\n\n assert.isTrue(assertOnOverflowTable);\n txn.end();\n rwIModel.close();\n });\n\n function getClassIdByName(iModel: BriefcaseDb, className: string): Id64String {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModel.withPreparedStatement(`SELECT ECInstanceId from meta.ECClassDef where Name=?`, (stmt) => {\n stmt.bindString(1, className);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n return stmt.getValue(0).getId();\n });\n }\n\n async function getClassNameById(iModel: BriefcaseDb, classId: string): Promise<string | undefined> {\n const reader = iModel.createQueryReader(`select ec_classname(${classId});`);\n\n if (await reader.step())\n return reader.current[0] as string;\n\n return undefined;\n }\n\n it(\"Changeset reader / EC adaptor\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n const txn = startTestTxn(rwIModel, \"changeset reader EC adaptor\");\n\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n }\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n let totalEl = 0;\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges(\"user 1: create drawing partition\");\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"user 1: create drawing partition\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n }\n\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const insertElements = (className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\n for (let m = 0; m < noOfElements; ++m) {\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n const prop = userProp(++totalEl);\n // Create props\n const geomElement = {\n classFullName: `TestDomain:${className}`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...prop,\n };\n const id = txn.insertElement(geomElement);\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n }\n };\n const generatedStr = new Array(10).join(\"x\");\n insertElements(\"Test2dElement\", 1, () => {\n return { s: generatedStr };\n });\n\n const updatedElements = async () => {\n await rwIModel.locks.acquireLocks({ exclusive: \"0x20000000004\" });\n const updatedElement = rwIModel.elements.getElementProps(\"0x20000000004\");\n (updatedElement as any).s = \"updated property\";\n txn.updateElement(updatedElement);\n txn.saveChanges(\"user 1: updated data\");\n await rwIModel.pushChanges({ description: \"user 1: update property id=0x20000000004\", accessToken: adminToken });\n };\n\n txn.saveChanges(\"user 1: data\");\n\n if (true || \"test local changes\") {\n const testChanges = async (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 3);\n\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.isNotNull(changes[0].LastMod);\n assert.isNotNull(changes[0].GeometryGuid);\n\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n assert.isNull(changes[1].LastMod);\n assert.isNull(changes[1].GeometryGuid);\n\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Inserted\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\n assert.equal(el.Rotation, 0);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\n\n assert.equal(el.Category.Id, \"0x20000000002\");\n assert.isNotEmpty(el.Category.RelECClassId);\n\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\n assert.equal(el.s, \"xxxxxxxxx\");\n assert.isNull(el.CodeValue);\n assert.isNull(el.UserLabel);\n assert.isNull(el.JsonProperties);\n assert.instanceOf(el.GeometryStream, Uint8Array);\n assert.typeOf(el.FederationGuid, \"string\");\n assert.typeOf(el.LastMod, \"string\");\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\n\n assert.equal(el.CodeSpec.Id, \"0x1\");\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\n\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\n\n assert.equal(el.CodeScope.Id, \"0x1\");\n assert.isNotEmpty(el.CodeScope.RelECClassId);\n\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\n\n assert.deepEqual(el.$meta, {\n tables: [\n \"bis_GeometricElement2d\",\n \"bis_Element\",\n ],\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n changeIndexes: [\n 2,\n 1,\n ],\n stage: \"New\",\n });\n }\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n await testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n await testChanges(Array.from(pcu.instances));\n }\n }\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\n\n await updatedElements();\n\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n if (true || \"updated element\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 4);\n\n const classId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\n\n // new value\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].ECClassId, classId);\n assert.equal(changes[2].s, \"updated property\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Updated\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n // old value\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[3].ECClassId, classId);\n assert.equal(changes[3].s, \"xxxxxxxxx\");\n assert.equal(changes[3].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[3].$meta?.op, \"Updated\");\n assert.equal(changes[3].$meta?.stage, \"Old\");\n };\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n\n if (true || \"updated element when no classId\") {\n const otherDb = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 4);\n\n // new value\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.isUndefined(changes[2].ECClassId);\n assert.isDefined(changes[2].$meta?.fallbackClassId);\n assert.equal(changes[2].$meta?.fallbackClassId, \"0x3d\");\n assert.isUndefined(changes[2].s);\n assert.equal(changes[2].$meta?.classFullName, \"BisCore:GeometricElement2d\");\n assert.equal(changes[2].$meta?.op, \"Updated\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n // old value\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\n assert.isUndefined(changes[3].ECClassId);\n assert.isDefined(changes[3].$meta?.fallbackClassId);\n assert.equal(changes[3].$meta?.fallbackClassId, \"0x3d\");\n assert.isUndefined(changes[3].s);\n assert.equal(changes[3].$meta?.classFullName, \"BisCore:GeometricElement2d\");\n assert.equal(changes[3].$meta?.op, \"Updated\");\n assert.equal(changes[3].$meta?.stage, \"Old\");\n };\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n\n if (true || \"test changeset file\") {\n const testChanges = async (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 3);\n\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.isNotNull(changes[0].LastMod);\n assert.isNotNull(changes[0].GeometryGuid);\n\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n assert.isNull(changes[1].LastMod);\n assert.isNull(changes[1].GeometryGuid);\n\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Inserted\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\n assert.equal(el.Rotation, 0);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\n\n assert.equal(el.Category.Id, \"0x20000000002\");\n assert.isNotEmpty(el.Category.RelECClassId);\n\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\n assert.equal(el.s, \"xxxxxxxxx\");\n assert.isNull(el.CodeValue);\n assert.isNull(el.UserLabel);\n assert.isNull(el.JsonProperties);\n assert.instanceOf(el.GeometryStream, Uint8Array);\n assert.typeOf(el.FederationGuid, \"string\");\n assert.typeOf(el.LastMod, \"string\");\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\n\n assert.equal(el.CodeSpec.Id, \"0x1\");\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\n\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\n\n assert.equal(el.CodeScope.Id, \"0x1\");\n assert.isNotEmpty(el.CodeScope.RelECClassId);\n\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\n\n assert.deepEqual(el.$meta, {\n tables: [\n \"bis_GeometricElement2d\",\n \"bis_Element\",\n ],\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n changeIndexes: [\n 2,\n 1,\n ],\n stage: \"New\",\n });\n }\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n await testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n await testChanges(Array.from(pcu.instances));\n }\n }\n if (true || \"test ChangesetAdaptor.acceptClass()\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 1);\n assert.equal(changes[0].$meta?.classFullName, \"TestDomain:Test2dElement\");\n };\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n if (true || \"test ChangesetAdaptor.adaptor()\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 2);\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n };\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptOp(\"Updated\")\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptOp(\"Updated\")\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n txn.end();\n rwIModel.close();\n });\n it(\"revert timeline changes\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n const txn = startTestTxn(rwIModel, \"revert timeline changes\");\n let nProps = 0;\n // 1. Import schema with class that span overflow table.\n const addPropertyAndImportSchema = async () => {\n await rwIModel.acquireSchemaLock();\n ++nProps;\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00.${nProps}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i + 1}\" typeName=\"string\"/>`).join(\"\\n\")}\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n };\n await addPropertyAndImportSchema();\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\n\n const createEl = async (args: { [key: string]: any }) => {\n await rwIModel.locks.acquireLocks({ exclusive: drawingModelId });\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n\n const e1 = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...args,\n };\n return txn.insertElement(e1);;\n };\n const updateEl = async (id: Id64String, args: { [key: string]: any }) => {\n await rwIModel.locks.acquireLocks({ exclusive: id });\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(id), args);\n txn.updateElement(updatedElementProps);\n };\n\n const deleteEl = async (id: Id64String) => {\n await rwIModel.locks.acquireLocks({ exclusive: id });\n txn.deleteElement(id);\n };\n const getChanges = async () => {\n return HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir: path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\") });\n };\n\n const findEl = (id: Id64String) => {\n try {\n return rwIModel.elements.getElementProps(id);\n } catch {\n return undefined;\n }\n };\n // 2. Insert a element for the class\n const el1 = await createEl({ p1: \"test1\" });\n const el2 = await createEl({ p1: \"test2\" });\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"insert 2 elements\" });\n\n // 3. Update the element.\n await updateEl(el1, { p1: \"test3\" });\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"update element 1\" });\n\n // 4. Delete the element.\n await deleteEl(el2);\n const el3 = await createEl({ p1: \"test4\" });\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element 2\" });\n\n // 5. import schema and insert element 4 & update element 3\n await addPropertyAndImportSchema();\n const el4 = await createEl({ p1: \"test5\", p2: \"test6\" });\n await updateEl(el3, { p1: \"test7\", p2: \"test8\" });\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"import schema, insert element 4 & update element 3\" });\n\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\n // 6. Revert to timeline 2\n await rwIModel.revertAndPushChanges({ toIndex: 2, description: \"revert to timeline 2\" });\n assert.equal((await getChanges()).at(-1)!.description, \"revert to timeline 2\");\n\n assert.isUndefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isUndefined(findEl(el3));\n assert.isUndefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\"]);\n\n await rwIModel.revertAndPushChanges({ toIndex: 6, description: \"reinstate last reverted changeset\" });\n assert.equal((await getChanges()).at(-1)!.description, \"reinstate last reverted changeset\");\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\n\n await addPropertyAndImportSchema();\n const el5 = await createEl({ p1: \"test9\", p2: \"test10\", p3: \"test11\" });\n await updateEl(el1, { p1: \"test12\", p2: \"test13\", p3: \"test114\" });\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"import schema, insert element 5 & update element 1\" });\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n\n // skip schema changes & auto generated comment\n await rwIModel.revertAndPushChanges({ toIndex: 1, skipSchemaChanges: true });\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 8 to 1 (schema changes skipped)\");\n assert.isUndefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isUndefined(findEl(el3));\n assert.isUndefined(findEl(el4));\n assert.isUndefined(findEl(el5));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n\n await rwIModel.revertAndPushChanges({ toIndex: 9 });\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 9 to 9\");\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n assert.isDefined(findEl(el5));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n txn.end();\n rwIModel.close();\n });\n it(\"openGroup() & writeToFile()\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n const txn = startTestTxn(rwIModel, \"openGroup writeToFile\");\n // 1. Import schema with class that span overflow table.\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n\n const e1 = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...{ p1: \"test1\" },\n };\n\n // 2. Insert a element for the class\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const e1id = txn.insertElement(e1);\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n // 3. Update the element.\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(e1id), { p1: \"test2\" });\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\n txn.updateElement(updatedElementProps);\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n // 4. Delete the element.\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\n txn.deleteElement(e1id);\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n const changesets = (await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir })).slice(1);\n\n const testElementClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\n\n if (true || \"Grouping changeset [2,3,4] should not contain TestDomain:Test2dElement as insert+update+delete=noop\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n\n expect(instances.length).to.eq(1);\n expect(instances[0].id).to.eq(\"0x20000000001\");\n expect(instances[0].classId).to.eq(drawingModelClassId);\n expect(instances[0].op).to.eq(\"Updated\");\n expect(instances[0].classFullName).to.eq(\"BisCore:DrawingModel\");\n }\n\n if (true || \"Grouping changeset [3,4] should contain update+delete=delete TestDomain:Test2dElement\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(1).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Deleted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Deleted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n }\n\n const groupCsFile = path.join(KnownTestLocations.outputDir, \"changeset_grouping.ec\");\n if (true || \"Grouping changeset [2,3] should contain insert+update=insert TestDomain:Test2dElement\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(0, 2).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n\n reader.writeToFile({ fileName: groupCsFile, containsSchemaChanges: false, overwriteFile: true });\n }\n if (true || \"writeToFile() test\") {\n const reader = SqliteChangesetReader.openFile({ fileName: groupCsFile, db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n }\n txn.end();\n rwIModel.close();\n });\n\n it(\"Delete class FK constraint violation in cache table\", async () => {\n // Helper to check if TestClass exists in schema and cache table for both briefcases\n function checkClass(firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\n const firstItems = firstBriefcase.getSchemaProps(\"TestSchema\").items;\n assert.equal(isClassInFirst, !!firstItems?.TestClass);\n\n const secondItems = secondBriefcase.getSchemaProps(\"TestSchema\").items;\n assert.equal(isClassInSecond, !!secondItems?.TestClass);\n\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = 'TestClass'`;\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\n firstStmt[Symbol.dispose]();\n\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\n secondStmt[Symbol.dispose]();\n }\n\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n\n // Open two briefcases for the same iModel\n const [firstBriefCase, secondBriefCase] = await Promise.all([\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\n ]);\n const firstTxn = startTestTxn(firstBriefCase, \"delete class FK constraint setup\");\n\n // Enable shared channel for both\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\n\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n </ECSchema>`]);\n\n // Push the changes to the hub\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\n\n // Sync the second briefcase with the iModel\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n\n checkClass(firstBriefCase, true, secondBriefCase, true);\n\n // Import the schema\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n </ECSchema>`]);\n\n // Push the changeset to the hub\n await firstBriefCase.pushChanges({ description: \"Delete class major change\", accessToken: adminToken });\n\n checkClass(firstBriefCase, false, secondBriefCase, true);\n\n // Apply the latest changeset to a new briefcase\n try {\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n } catch (error: any) {\n assert.fail(`Should not have failed with the error: ${error.message}`);\n }\n\n checkClass(firstBriefCase, false, secondBriefCase, false);\n\n // Cleanup\n firstTxn.end();\n secondBriefCase.close();\n firstBriefCase.close();\n });\n\n\n it(\"Delete class FK constraint violation in cache table through a revert\", async () => {\n // Helper to check if TestClass exists in schema and cache table for both briefcases\n function checkClass(className: string, firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\n assert.equal(isClassInFirst, !!firstBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\n assert.equal(isClassInSecond, !!secondBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\n\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = '${className}'`;\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\n firstStmt[Symbol.dispose]();\n\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\n secondStmt[Symbol.dispose]();\n }\n\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n\n // Open two briefcases for the same iModel\n const [firstBriefCase, secondBriefCase] = await Promise.all([\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\n ]);\n const firstTxn = startTestTxn(firstBriefCase, \"delete class FK revert\");\n\n // Enable shared channel for both\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\n\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n </ECSchema>`]);\n\n // Push the changes to the hub\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\n // Sync the second briefcase\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\n\n // Import the schema\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"AnotherTestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n </ECSchema>`]);\n\n // Push the changeset to the hub\n await firstBriefCase.pushChanges({ description: \"Add another class change\", accessToken: adminToken });\n // Sync the second briefcase\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\n checkClass(\"AnotherTestClass\", firstBriefCase, true, secondBriefCase, true);\n\n // Revert the latest changeset from the first briefcase\n try {\n await firstBriefCase.revertAndPushChanges({ toIndex: 2, description: \"Revert last changeset\" });\n } catch (error: any) {\n assert.fail(`Should not have failed with the error: ${error.message}`);\n }\n\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, true);\n\n try {\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n } catch (error: any) {\n assert.fail(`Should not have failed with the error: ${error.message}`);\n }\n\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, false);\n\n // Cleanup\n firstTxn.end();\n secondBriefCase.close();\n firstBriefCase.close();\n });\n\n it(\"Track changeset health stats\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n\n // Open two briefcases for the same iModel\n const [firstBriefcase, secondBriefcase] = await Promise.all([\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\n ]);\n const firstTxn = startTestTxn(firstBriefcase, \"track changeset health first briefcase\");\n const secondTxn = startTestTxn(secondBriefcase, \"track changeset health second briefcase\");\n\n [firstBriefcase, secondBriefcase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\n\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n </ECSchema>`]);\n\n // Enable changeset tracking for both briefcases\n await Promise.all([firstBriefcase.enableChangesetStatTracking(), secondBriefcase.enableChangesetStatTracking()]);\n\n await firstBriefcase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\n await secondBriefcase.pullChanges({ accessToken: adminToken });\n\n // Schema upgrade\n await importSchemaStrings(secondTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"TestProperty\" typeName=\"string\"/>\n </ECEntityClass>\n\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\n </ECEnumeration>\n </ECSchema>`]);\n\n await secondBriefcase.pushChanges({ description: \"Added a property to TestClass and an enum\", accessToken: adminToken });\n await firstBriefcase.pullChanges({ accessToken: adminToken });\n\n // Major schema change\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\n </ECEnumeration>\n </ECSchema>`]);\n\n await firstBriefcase.pushChanges({ description: \"Deleted TestClass\", accessToken: adminToken });\n await secondBriefcase.pullChanges({ accessToken: adminToken });\n\n const firstBriefcaseChangesets = await firstBriefcase.getAllChangesetHealthData();\n const secondBriefcaseChangesets = await secondBriefcase.getAllChangesetHealthData();\n\n assert.equal(firstBriefcaseChangesets.length, 1);\n const firstBriefcaseChangeset = firstBriefcaseChangesets[0];\n\n expect(firstBriefcaseChangeset.changesetIndex).to.be.eql(2);\n expect(firstBriefcaseChangeset.uncompressedSizeBytes).to.be.greaterThan(300);\n expect(firstBriefcaseChangeset.insertedRows).to.be.greaterThanOrEqual(4);\n expect(firstBriefcaseChangeset.updatedRows).to.be.greaterThanOrEqual(1);\n expect(firstBriefcaseChangeset.deletedRows).to.be.eql(0);\n expect(firstBriefcaseChangeset.totalFullTableScans).to.be.eql(0);\n expect(firstBriefcaseChangeset.perStatementStats.length).to.be.eql(5);\n\n assert.equal(secondBriefcaseChangesets.length, 2);\n const [secondBriefcaseChangeset1, secondBriefcaseChangeset2] = secondBriefcaseChangesets;\n\n expect(secondBriefcaseChangeset1.changesetIndex).to.be.eql(1);\n expect(secondBriefcaseChangeset1.uncompressedSizeBytes).to.be.greaterThan(40000);\n expect(secondBriefcaseChangeset1.insertedRows).to.be.eql(52);\n expect(secondBriefcaseChangeset1.updatedRows).to.be.greaterThanOrEqual(921);\n expect(secondBriefcaseChangeset1.deletedRows).to.be.greaterThanOrEqual(0)\n expect(secondBriefcaseChangeset1.totalFullTableScans).to.be.eql(0);\n expect(secondBriefcaseChangeset1.perStatementStats.length).to.be.eql(11);\n\n expect(secondBriefcaseChangeset2.changesetIndex).to.be.eql(3);\n expect(secondBriefcaseChangeset2.uncompressedSizeBytes).to.be.greaterThan(40000);\n expect(secondBriefcaseChangeset2.insertedRows).to.be.greaterThanOrEqual(0);\n expect(secondBriefcaseChangeset2.updatedRows).to.be.greaterThanOrEqual(921);\n expect(secondBriefcaseChangeset2.deletedRows).to.be.eql(52);\n expect(secondBriefcaseChangeset2.totalFullTableScans).to.be.eql(0);\n expect(secondBriefcaseChangeset2.perStatementStats.length).to.be.eql(11);\n\n // Cleanup\n secondTxn.end();\n firstTxn.end();\n secondBriefcase.close();\n firstBriefcase.close();\n });\n it(\"openInMemory() & step()\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n const txn = startTestTxn(rwIModel, \"openInMemory step\");\n // 1. Import schema with class that span overflow table.\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await importSchemaStrings(txn, [schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n txn.saveChanges();\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\n\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n\n const e1 = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...{ p1: \"test1\" },\n };\n\n // 2. Insert a element for the class\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const e1id = txn.insertElement(e1);\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\n const testElClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\n\n if (true) {\n const reader = SqliteChangesetReader.openInMemory({ db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ChangesetECAdaptor(reader);\n const unifier = new PartialECChangeUnifier(rwIModel)\n while (adaptor.step()) {\n unifier.appendFrom(adaptor);\n }\n reader.close();\n\n // verify the inserted element's properties\n const instances = Array.from(unifier.instances);\n expect(instances.length).to.equals(1);\n const testEl = instances[0];\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\n expect(testEl.$meta?.stage).to.equals(\"New\");\n expect(testEl.ECClassId).to.equals(testElClassId);\n expect(testEl.ECInstanceId).to.equals(e1id);\n expect(testEl.Model.Id).to.equals(drawingModelId);\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\n expect(testEl.Origin.X).to.equals(0);\n expect(testEl.Origin.Y).to.equals(0);\n expect(testEl.Rotation).to.equals(0);\n expect(testEl.BBoxLow.X).to.equals(-25);\n expect(testEl.BBoxLow.Y).to.equals(-25);\n expect(testEl.BBoxHigh.X).to.equals(15);\n expect(testEl.BBoxHigh.Y).to.equals(15);\n expect(testEl.p1).to.equals(\"test1\");\n }\n\n // save changes and verify the the txn\n txn.saveChanges();\n\n if (true) {\n const txnId = rwIModel.txns.getLastSavedTxnProps()?.id as string;\n expect(txnId).to.not.be.undefined;\n const reader = SqliteChangesetReader.openTxn({ db: rwIModel, disableSchemaCheck: true, txnId });\n const adaptor = new ChangesetECAdaptor(reader);\n const unifier = new PartialECChangeUnifier(rwIModel)\n while (adaptor.step()) {\n unifier.appendFrom(adaptor);\n }\n reader.close();\n\n // verify the inserted element's properties\n const instances = Array.from(unifier.instances);\n expect(instances.length).to.equals(3);\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\n\n // DrawingModel new instance\n const drawingModelElNew = instances[0];\n expect(drawingModelElNew.$meta?.op).to.equals(\"Updated\");\n expect(drawingModelElNew.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\n expect(drawingModelElNew.$meta?.stage).to.equals(\"New\");\n expect(drawingModelElNew.ECClassId).to.equals(drawingModelClassId);\n expect(drawingModelElNew.ECInstanceId).to.equals(drawingModelId);\n expect(drawingModelElNew.LastMod).to.exist;\n expect(drawingModelElNew.GeometryGuid).to.exist;\n\n // DrawingModel old instance\n const drawingModelElOld = instances[1];\n expect(drawingModelElOld.$meta?.op).to.equals(\"Updated\");\n expect(drawingModelElOld.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\n expect(drawingModelElOld.$meta?.stage).to.equals(\"Old\");\n expect(drawingModelElOld.ECClassId).to.equals(drawingModelClassId);\n expect(drawingModelElOld.ECInstanceId).to.equals(drawingModelId);\n expect(drawingModelElOld.LastMod).to.null;\n expect(drawingModelElOld.GeometryGuid).to.null;\n\n // Test element instance\n const testEl = instances[2];\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\n expect(testEl.$meta?.stage).to.equals(\"New\");\n expect(testEl.ECClassId).to.equals(testElClassId);\n expect(testEl.ECInstanceId).to.equals(e1id);\n expect(testEl.Model.Id).to.equals(drawingModelId);\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\n expect(testEl.Origin.X).to.equals(0);\n expect(testEl.Origin.Y).to.equals(0);\n expect(testEl.Rotation).to.equals(0);\n expect(testEl.BBoxLow.X).to.equals(-25);\n expect(testEl.BBoxLow.Y).to.equals(-25);\n expect(testEl.BBoxHigh.X).to.equals(15);\n expect(testEl.BBoxHigh.Y).to.equals(15);\n expect(testEl.p1).to.equals(\"test1\");\n }\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n txn.end();\n rwIModel.close();\n });\n it(\"Instance update to a different class (bug)\", async () => {\n /**\n * Test scenario: Verifies changeset reader behavior when an instance ID is reused with a different class.\n *\n * Steps:\n * 1. Import schema with two classes (T1 and T2) that inherit from GraphicalElement2d.\n * - T1 has property 'p' of type string\n * - T2 has property 'p' of type long\n * 2. Insert an element of type T1 with id=elId and property p=\"wwww\"\n * 3. Push changeset #1: \"insert element\"\n * 4. Delete the T1 element\n * 5. Manipulate the element ID sequence to force reuse of the same ID\n * 6. Insert a new element of type T2 with the same id=elId but property p=1111\n * 7. Push changeset #2: \"buggy changeset\"\n *\n * Verification:\n * - Changeset #2 should show an \"Updated\" operation (not Delete+Insert)\n * - In bis_Element table: ECClassId changes from T1 to T2\n * - In bis_GeometricElement2d table: ECClassId changes from T1 to T2\n * - Property 'p' changes from string \"wwww\" to integer 1111\n *\n * This tests the changeset reader's ability to handle instance class changes,\n * which can occur in edge cases where IDs are reused with different types.\n */\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const modelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(modelId);\n let b1 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: modelId, accessToken: adminToken });\n let txn = startTestTxn(b1, \"instance update to different class\");\n // 1. Import schema with classes that span overflow table.\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"T1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"p\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"T2\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"p\" typeName=\"long\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n await importSchemaStrings(txn, [schema]);\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(b1, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n\n const geomElementT1 = {\n classFullName: `TestDomain:T1`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n p: \"wwww\",\n };\n\n const elId = txn.insertElement(geomElementT1);\n assert.isTrue(Id64.isValidId64(elId), \"insert worked\");\n txn.saveChanges();\n await b1.pushChanges({ description: \"insert element\" });\n\n await b1.locks.acquireLocks({ shared: drawingModelId, exclusive: elId });\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n txn.deleteElement(elId);\n txn.saveChanges();\n\n // Force id set to reproduce same instance with different classid\n const bid = BigInt(elId) - 1n\n b1[_nativeDb].saveLocalValue(\"bis_elementidsequence\", bid.toString());\n txn.saveChanges();\n const fileName = b1[_nativeDb].getFilePath();\n txn.end();\n b1.close();\n\n b1 = await BriefcaseDb.open({ fileName });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n txn = startTestTxn(b1, \"instance update to different class reopened briefcase\");\n\n\n const geomElementT2 = {\n classFullName: `TestDomain:T2`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n p: 1111,\n };\n\n const elId2 = txn.insertElement(geomElementT2);\n chai.expect(elId).equals(elId2);\n\n txn.saveChanges();\n await b1.pushChanges({ description: \"buggy changeset\" });\n\n const getChanges = async () => {\n return HubMock.downloadChangesets({ iModelId: modelId, targetDir: path.join(KnownTestLocations.outputDir, modelId, \"changesets\") });\n };\n\n\n const changesets = await getChanges();\n chai.expect(changesets.length).equals(2);\n chai.expect(changesets[0].description).equals(\"insert element\");\n chai.expect(changesets[1].description).equals(\"buggy changeset\");\n\n const getClassId = async (name: string) => {\n const r = b1.createQueryReader(\"SELECT FORMAT('0x%x', ec_classid(?))\", QueryBinder.from([name]));\n if (await r.step()) {\n return r.current[0];\n }\n }\n\n const t1ClassId = await getClassId(\"TestDomain:T1\");\n const t2ClassId = await getClassId(\"TestDomain:T2\");\n\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 });\n let bisElementAsserted = false;\n let bisGeometricElement2dAsserted = false;\n while (reader.step()) {\n if (reader.tableName === \"bis_Element\" && reader.op === \"Updated\") {\n bisElementAsserted = true;\n chai.expect(reader.getColumnNames(reader.tableName)).deep.equals([\n \"Id\",\n \"ECClassId\",\n \"ModelId\",\n \"LastMod\",\n \"CodeSpecId\",\n \"CodeScopeId\",\n \"CodeValue\",\n \"UserLabel\",\n \"ParentId\",\n \"ParentRelECClassId\",\n \"FederationGuid\",\n \"JsonProperties\",\n ]);\n\n const oldId = reader.getChangeValueId(0, \"Old\");\n const newId = reader.getChangeValueId(0, \"New\");\n chai.expect(oldId).equals(elId);\n chai.expect(newId).to.be.undefined;\n\n const oldClassId = reader.getChangeValueId(1, \"Old\");\n const newClassId = reader.getChangeValueId(1, \"New\");\n chai.expect(oldClassId).equals(t1ClassId);\n chai.expect(newClassId).equals(t2ClassId);\n chai.expect(oldClassId).is.not.equal(newClassId);\n }\n if (reader.tableName === \"bis_GeometricElement2d\" && reader.op === \"Updated\") {\n bisGeometricElement2dAsserted = true;\n chai.expect(reader.getColumnNames(reader.tableName)).deep.equals([\n \"ElementId\",\n \"ECClassId\",\n \"CategoryId\",\n \"Origin_X\",\n \"Origin_Y\",\n \"Rotation\",\n \"BBoxLow_X\",\n \"BBoxLow_Y\",\n \"BBoxHigh_X\",\n \"BBoxHigh_Y\",\n \"GeometryStream\",\n \"TypeDefinitionId\",\n \"TypeDefinitionRelECClassId\",\n \"js1\",\n \"js2\",\n ]);\n\n // ECInstanceId\n const oldId = reader.getChangeValueId(0, \"Old\");\n const newId = reader.getChangeValueId(0, \"New\");\n chai.expect(oldId).equals(elId);\n chai.expect(newId).to.be.undefined;\n\n // ECClassId (changed)\n const oldClassId = reader.getChangeValueId(1, \"Old\");\n const newClassId = reader.getChangeValueId(1, \"New\");\n chai.expect(oldClassId).equals(t1ClassId);\n chai.expect(newClassId).equals(t2ClassId);\n chai.expect(oldClassId).is.not.equal(newClassId);\n\n // Property 'p' changed type and value.\n const oldP = reader.getChangeValueText(13, \"Old\");\n const newP = reader.getChangeValueInteger(13, \"New\");\n chai.expect(oldP).equals(\"wwww\");\n chai.expect(newP).equals(1111);\n }\n }\n\n chai.expect(bisElementAsserted).to.be.true;\n chai.expect(bisGeometricElement2dAsserted).to.be.true;\n reader.close();\n\n\n // ChangesetECAdaptor works incorrectly as it does not expect ECClassId to change in an update.\n const adaptor = new ChangesetECAdaptor(\n SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 })\n );\n\n adaptor.acceptClass(GraphicalElement2d.classFullName)\n adaptor.acceptOp(\"Updated\");\n\n let ecChangeForElementAsserted = false;\n let ecChangeForGeometricElement2dAsserted = false;\n while (adaptor.step()) {\n if (adaptor.reader.tableName === \"bis_Element\") {\n ecChangeForElementAsserted = true;\n chai.expect(adaptor.inserted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\n chai.expect(adaptor.deleted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\n }\n if (adaptor.reader.tableName === \"bis_GeometricElement2d\") {\n ecChangeForGeometricElement2dAsserted = true;\n chai.expect(adaptor.inserted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\n chai.expect(adaptor.deleted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\n chai.expect(adaptor.inserted?.p).equals(\"0x457\"); // CORRECT p in T2 is integer\n chai.expect(adaptor.deleted?.p).equals(\"wwww\"); // CORRECT p in T1 is string\n }\n }\n chai.expect(ecChangeForElementAsserted).to.be.true;\n chai.expect(ecChangeForGeometricElement2dAsserted).to.be.true;\n adaptor.close();\n\n // PartialECChangeUnifier fail to combine changes correctly when ECClassId is updated.\n const adaptor2 = new ChangesetECAdaptor(\n SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 })\n );\n const unifier = new PartialECChangeUnifier(b1);\n adaptor2.acceptClass(GraphicalElement2d.classFullName)\n adaptor2.acceptOp(\"Updated\");\n while (adaptor2.step()) {\n unifier.appendFrom(adaptor2);\n }\n\n chai.expect(unifier.getInstanceCount()).to.be.equals(2); // WRONG should be 1\n\n txn.end();\n b1.close();\n });\n\n});\n\ndescribe(\"PRAGMA ECSQL Functions\", async () => {\n let iTwinId: GuidString;\n let iModel: BriefcaseDb;\n\n before(() => {\n HubMock.startup(\"SqliteChangesetReaderAndChangesetECAdaptorTest\", KnownTestLocations.outputDir);\n iTwinId = HubMock.iTwinId;\n });\n\n after(() => HubMock.shutdown());\n\n beforeEach(async () => {\n // Create new iModel\n const adminToken = \"super manager token\";\n const iModelName = \"PRAGMA_test\";\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(iModelId);\n iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId, accessToken: adminToken });\n });\n\n afterEach(() => {\n // Cleanup\n iModel.close();\n });\n\n it(\"should call PRAGMA integrity_check on a new iModel and return no errors\", async () => {\n // Call PRAGMA integrity_check\n const query = \"PRAGMA integrity_check ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\";\n const result = iModel.createQueryReader(query, undefined, undefined);\n const results = await result.toArray();\n\n // Verify no errors\n assert(results.length > 0, \"Results should be returned from PRAGMA integrity_check\");\n assert(results[0][2] === true, \"'check_data_columns' check should be true\");\n assert(results[1][2] === true, \"'check_ec_profile' check should be true\")\n assert(results[2][2] === true, \"'check_nav_class_ids' check should be true\")\n assert(results[3][2] === true, \"'check_nav_ids' check should be true\")\n assert(results[4][2] === true, \"'check_linktable_fk_class_ids' check should be true\")\n assert(results[5][2] === true, \"'check_linktable_fk_ids' check should be true\")\n assert(results[6][2] === true, \"'check_class_ids' check should be true\")\n assert(results[7][2] === true, \"'check_data_schema' check should be true\")\n assert(results[8][2] === true, \"'check_schema_load' check should be true\")\n });\n\n it(\"should call PRAGMA integrity_check individual checks on a new iModel and return no errors\", async () => {\n // Call check_ec_profile\n let query = \"pragma integrity_check(check_ec_profile) options enable_experimental_features\";\n let result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n let resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n\n // Call check_data_schema\n query = \"pragma integrity_check(check_data_schema) options enable_experimental_features\";\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n\n // Call check_data_columns\n query = \"pragma integrity_check(check_data_columns) options enable_experimental_features\";\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n\n // Call check_nav_class_ids\n query = \"pragma integrity_check(check_nav_class_ids) options enable_experimental_features\";\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n\n // Call check_nav_ids\n query = \"pragma integrity_check(check_nav_ids) options enable_experimental_features\";\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n\n // Call check_linktable_fk_class_ids\n query = \"pragma integrity_check(check_linktable_fk_class_ids) options enable_experimental_features\";\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n\n // Call check_linktable_fk_ids\n query = \"pragma integrity_check(check_linktable_fk_ids) options enable_experimental_features\";\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n\n // Call check_class_ids\n query = \"pragma integrity_check(check_class_ids) options enable_experimental_features\";\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n\n // Call check_schema_load\n query = \"pragma integrity_check(check_schema_load) options enable_experimental_features\";\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n resultArray = await result.toArray();\n expect(resultArray.length).to.equal(0); // No errors expected\n });\n\n it(\"should call PRAGMA integrity_check on a corrupted iModel and return an error\", async () => {\n // Insert two elements\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\n const txn = startTestTxn(iModel, \"PRAGMA integrity check corrupted iModel\");\n\n const element1Id = txn.insertElement({\n classFullName: Subject.classFullName,\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject1\"),\n });\n\n const element2Id = txn.insertElement({\n classFullName: Subject.classFullName,\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject2\"),\n });\n txn.saveChanges();\n\n // Create a relationship between them\n await iModel.locks.acquireLocks({ exclusive: Id64.toIdSet([element1Id, element2Id]) });\n const relationship = iModel.relationships.createInstance({\n classFullName: \"BisCore:SubjectRefersToSubject\",\n sourceId: element1Id,\n targetId: element2Id,\n });\n const relationshipId = txn.insertRelationship(relationship.toJSON());\n assert.isTrue(Id64.isValidId64(relationshipId));\n txn.saveChanges();\n\n // Delete one element without deleting the relationship to corrupt the iModel\n const deleteResult = iModel[_nativeDb].executeSql(`DELETE FROM bis_Element WHERE Id=${element2Id}`);\n expect(deleteResult).to.equal(DbResult.BE_SQLITE_OK);\n txn.saveChanges();\n\n // Call PRAGMA integrity_check\n const query = \"PRAGMA integrity_check ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\";\n const result = iModel.createQueryReader(query, undefined, undefined);\n const results = await result.toArray();\n\n // Verify error is reported\n assert(results.length > 0, \"Results should be returned from PRAGMA integrity_check\");\n assert(results[0][2] === true, \"'check_data_columns' check should be true\");\n assert(results[1][2] === true, \"'check_ec_profile' check should be true\")\n assert(results[2][2] === true, \"'check_nav_class_ids' check should be true\")\n assert(results[3][2] === true, \"'check_nav_ids' check should be true\")\n assert(results[4][2] === true, \"'check_linktable_fk_class_ids' check should be true\")\n assert(results[5][2] === false, \"'check_linktable_fk_ids' check should be false\") // Expecting error report here\n assert(results[6][2] === true, \"'check_class_ids' check should be true\")\n assert(results[7][2] === true, \"'check_data_schema' check should be true\")\n assert(results[8][2] === true, \"'check_schema_load' check should be true\")\n txn.end();\n });\n\n it(\"should call PRAGMA integrity_check(check_linktable_fk_class_ids) on a corrupted iModel and return an error\", async () => {\n // Insert two elements\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\n const txn = startTestTxn(iModel, \"PRAGMA integrity check corrupted linktable fk ids\");\n\n const element1Id = txn.insertElement({\n classFullName: Subject.classFullName,\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject1\"),\n });\n\n const element2Id = txn.insertElement({\n classFullName: Subject.classFullName,\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject2\"),\n });\n txn.saveChanges();\n\n // Create a relationship between them\n await iModel.locks.acquireLocks({ exclusive: Id64.toIdSet([element1Id, element2Id]) });\n const relationship = iModel.relationships.createInstance({\n classFullName: \"BisCore:SubjectRefersToSubject\",\n sourceId: element1Id,\n targetId: element2Id,\n });\n const relationshipId = txn.insertRelationship(relationship.toJSON());\n assert.isTrue(Id64.isValidId64(relationshipId));\n txn.saveChanges();\n\n // Delete one element without deleting the relationship to corrupt the iModel\n const deleteResult = iModel[_nativeDb].executeSql(`DELETE FROM bis_Element WHERE Id=${element2Id}`);\n expect(deleteResult).to.equal(DbResult.BE_SQLITE_OK);\n txn.saveChanges();\n\n // Call PRAGMA integrity_check\n const query = \"pragma integrity_check(check_linktable_fk_ids) options enable_experimental_features\";\n const result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n const resultArray = await result.toArray();\n expect(resultArray.length).to.equal(1); // 1 error report expected\n expect(resultArray[0].id).to.equal(\"0x20000000001\");\n expect(resultArray[0].key_id).to.equal(\"0x20000000002\");\n txn.end();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaUtils.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SchemaUtils.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IAErC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAElE,qCAAqC;QAErC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert } from \"chai\";\r\nimport { Schema } from \"../../Schema\";\r\nimport * as Semver from \"semver\";\r\n\r\ndescribe(\"Schema Utilities Test\", () => {\r\n\r\n it(\"paddedVersionToSemver\", async () => {\r\n assert.equal(Schema.toSemverString(\"1.00.00\"), \"1.0.0\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.00.00\")));\r\n\r\n assert.equal(Schema.toSemverString(\"01.0.0\"), \"1.0.0\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"01.0.0\")));\r\n\r\n assert.equal(Schema.toSemverString(\"1.2.3\"), \"1.2.3\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.2.3\")));\r\n\r\n assert.equal(Schema.toSemverString(\"012.0013\"), \"12.0.13\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"012.0013\")));\r\n\r\n // bad inputs with undefined behavior\r\n\r\n assert.equal(Schema.toSemverString(\"bad.input\"), \"NaN.0.NaN\");\r\n assert.isNull(Semver.valid(Schema.toSemverString(\"bad.input\")));\r\n\r\n assert.equal(Schema.toSemverString(\"1..2\"), \"1.0.2\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1..2\")));\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SchemaUtils.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SchemaUtils.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IAErC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAElE,qCAAqC;QAErC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { Schema } from \"../../Schema\";\nimport * as Semver from \"semver\";\n\ndescribe(\"Schema Utilities Test\", () => {\n\n it(\"paddedVersionToSemver\", async () => {\n assert.equal(Schema.toSemverString(\"1.00.00\"), \"1.0.0\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.00.00\")));\n\n assert.equal(Schema.toSemverString(\"01.0.0\"), \"1.0.0\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"01.0.0\")));\n\n assert.equal(Schema.toSemverString(\"1.2.3\"), \"1.2.3\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.2.3\")));\n\n assert.equal(Schema.toSemverString(\"012.0013\"), \"12.0.13\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"012.0013\")));\n\n // bad inputs with undefined behavior\n\n assert.equal(Schema.toSemverString(\"bad.input\"), \"NaN.0.NaN\");\n assert.isNull(Semver.valid(Schema.toSemverString(\"bad.input\")));\n\n assert.equal(Schema.toSemverString(\"1..2\"), \"1.0.2\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1..2\")));\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SectionDrawing.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SectionDrawing.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAuB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,MAAkB,CAAC;IACvB,IAAI,mBAA2B,CAAC;IAChC,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;QAC7F,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC7F,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9H,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,0BAA0B;QAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;YAC/D,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,mBAAmB,EAAE,yBAAyB,CAAC;SACjF,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YACtC,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,cAAc,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;SAClC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE7C,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,SAAS,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,YAAY,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAErD,wBAAwB;QACxB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACzE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACvE,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAExD,gBAAgB;QAChB,MAAM,gBAAgB,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;QAC5C,OAAO,CAAC,yBAAyB,GAAG,gBAAgB,CAAC;QACrD,OAAO,CAAC,uBAAuB,GAAG,cAAc,CAAC;QAEjD,wBAAwB;QACxB,MAAM,WAAW,GAAG,CAAC,IAA0C,EAAE,EAAE;YACjE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACzD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACtH,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACpH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/B,WAAW,CAAC,KAAK,CAAC,CAAC;QAEnB,kBAAkB;QAClB,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,4BAA4B;QAC5B,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,SAAS,CAAC,CAAC;QAEhE,2BAA2B;QAC3B,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAE/H,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEtD,MAAM,sBAAsB,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAE5E,MAAM,CAAC,sBAAsB,YAAY,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEpE,MAAM,2BAA2B,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAE7E,MAAM,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC9E,MAAM,CAAC,2BAA2B,YAAY,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { expect } from \"chai\";\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { RelatedElement, SectionDrawingProps, SectionType } from \"@itwin/core-common\";\r\nimport { Drawing, SectionDrawing } from \"../../Element\";\r\nimport { DocumentListModel, DrawingModel, SectionDrawingModel } from \"../../Model\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"SectionDrawing\", () => {\r\n let imodel: SnapshotDb;\r\n let documentListModelId: string;\r\n before(() => {\r\n const iModelPath = IModelTestUtils.prepareOutputFile(\"SectionDrawing\", \"SectionDrawing.bim\");\r\n imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"SectionDrawingTest\" } });\r\n documentListModelId = withEditTxn(imodel, (txn) => DocumentListModel.insert(txn, SnapshotDb.rootSubjectId, \"DocumentList\"));\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"should round-trip through JSON\", () => {\r\n // Insert a SectionDrawing\r\n const drawingId = withEditTxn(imodel, (txn) => txn.insertElement({\r\n classFullName: SectionDrawing.classFullName,\r\n model: documentListModelId,\r\n code: Drawing.createCode(imodel, documentListModelId, \"SectionDrawingRoundTrip\"),\r\n }));\r\n expect(Id64.isValidId64(drawingId)).to.be.true;\r\n\r\n const model = imodel.models.createModel({\r\n classFullName: DrawingModel.classFullName,\r\n modeledElement: { id: drawingId },\r\n });\r\n const modelId = withEditTxn(imodel, (txn) => txn.insertModel(model.toJSON()));\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n let drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\r\n expect(drawing instanceof SectionDrawing).to.be.true;\r\n\r\n // Expect default values\r\n expect(Id64.isValidId64(drawing.spatialView.id)).to.be.false;\r\n expect(drawing.sectionType).to.equal(SectionType.Section);\r\n expect(drawing.jsonProperties.drawingToSpatialTransform).to.be.undefined;\r\n expect(drawing.jsonProperties.sheetToSpatialTransform).to.be.undefined;\r\n expect(drawing.drawingToSpatialTransform).to.be.undefined;\r\n expect(drawing.sheetToSpatialTransform).to.be.undefined;\r\n\r\n // Modify values\r\n const drawingToSpatial = Transform.createTranslationXYZ(1, 2, 3);\r\n const sheetToSpatial = Transform.createTranslationXYZ(4, 5, 6);\r\n drawing.spatialView = new RelatedElement({ id: \"0x123\" });\r\n drawing.sectionType = SectionType.Elevation;\r\n drawing.drawingToSpatialTransform = drawingToSpatial;\r\n drawing.sheetToSpatialTransform = sheetToSpatial;\r\n\r\n // Expect updated values\r\n const expectProps = (json: SectionDrawingProps | SectionDrawing) => {\r\n expect(json.spatialView).not.to.be.undefined;\r\n expect(json.spatialView?.id).to.equal(\"0x123\");\r\n expect(json.sectionType).to.equal(SectionType.Elevation);\r\n expect(Transform.fromJSON(json.jsonProperties?.drawingToSpatialTransform).isAlmostEqual(drawingToSpatial)).to.be.true;\r\n expect(Transform.fromJSON(json.jsonProperties?.sheetToSpatialTransform).isAlmostEqual(sheetToSpatial)).to.be.true;\r\n };\r\n\r\n const props = drawing.toJSON();\r\n expectProps(props);\r\n\r\n // Persist changes\r\n withEditTxn(imodel, (txn) => txn.updateElement(props));\r\n\r\n // Obtain persistent element\r\n drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\r\n\r\n // Expect persistent values\r\n expectProps(drawing);\r\n expectProps(drawing.toJSON());\r\n });\r\n\r\n it(\"should create a SectionDrawing and SectionDrawingModel on insert\", () => {\r\n const sectionDrawingId = withEditTxn(imodel, (txn) => SectionDrawing.insert(txn, documentListModelId, \"SectionDrawingInsert\"));\r\n\r\n expect(Id64.isValidId64(sectionDrawingId)).to.be.true;\r\n\r\n const insertedSectionDrawing = imodel.elements.getElement(sectionDrawingId);\r\n\r\n expect(insertedSectionDrawing instanceof SectionDrawing).to.be.true;\r\n\r\n const insertedSectionDrawingModel = imodel.models.getModel(sectionDrawingId);\r\n\r\n expect(insertedSectionDrawingModel.className).to.equal(\"SectionDrawingModel\");\r\n expect(insertedSectionDrawingModel instanceof SectionDrawingModel).to.be.true;\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SectionDrawing.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SectionDrawing.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { RelatedElement, SectionDrawingProps, SectionType } from \"@itwin/core-common\";\nimport { Drawing, SectionDrawing } from \"../../Element\";\nimport { DocumentListModel, DrawingModel, SectionDrawingModel } from \"../../Model\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"SectionDrawing\", () => {\n let imodel: SnapshotDb;\n let documentListModelId: string;\n before(() => {\n const iModelPath = IModelTestUtils.prepareOutputFile(\"SectionDrawing\", \"SectionDrawing.bim\");\n imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"SectionDrawingTest\" } });\n documentListModelId = withEditTxn(imodel, (txn) => DocumentListModel.insert(txn, SnapshotDb.rootSubjectId, \"DocumentList\"));\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"should round-trip through JSON\", () => {\n // Insert a SectionDrawing\n const drawingId = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: SectionDrawing.classFullName,\n model: documentListModelId,\n code: Drawing.createCode(imodel, documentListModelId, \"SectionDrawingRoundTrip\"),\n }));\n expect(Id64.isValidId64(drawingId)).to.be.true;\n\n const model = imodel.models.createModel({\n classFullName: DrawingModel.classFullName,\n modeledElement: { id: drawingId },\n });\n const modelId = withEditTxn(imodel, (txn) => txn.insertModel(model.toJSON()));\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n let drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\n expect(drawing instanceof SectionDrawing).to.be.true;\n\n // Expect default values\n expect(Id64.isValidId64(drawing.spatialView.id)).to.be.false;\n expect(drawing.sectionType).to.equal(SectionType.Section);\n expect(drawing.jsonProperties.drawingToSpatialTransform).to.be.undefined;\n expect(drawing.jsonProperties.sheetToSpatialTransform).to.be.undefined;\n expect(drawing.drawingToSpatialTransform).to.be.undefined;\n expect(drawing.sheetToSpatialTransform).to.be.undefined;\n\n // Modify values\n const drawingToSpatial = Transform.createTranslationXYZ(1, 2, 3);\n const sheetToSpatial = Transform.createTranslationXYZ(4, 5, 6);\n drawing.spatialView = new RelatedElement({ id: \"0x123\" });\n drawing.sectionType = SectionType.Elevation;\n drawing.drawingToSpatialTransform = drawingToSpatial;\n drawing.sheetToSpatialTransform = sheetToSpatial;\n\n // Expect updated values\n const expectProps = (json: SectionDrawingProps | SectionDrawing) => {\n expect(json.spatialView).not.to.be.undefined;\n expect(json.spatialView?.id).to.equal(\"0x123\");\n expect(json.sectionType).to.equal(SectionType.Elevation);\n expect(Transform.fromJSON(json.jsonProperties?.drawingToSpatialTransform).isAlmostEqual(drawingToSpatial)).to.be.true;\n expect(Transform.fromJSON(json.jsonProperties?.sheetToSpatialTransform).isAlmostEqual(sheetToSpatial)).to.be.true;\n };\n\n const props = drawing.toJSON();\n expectProps(props);\n\n // Persist changes\n withEditTxn(imodel, (txn) => txn.updateElement(props));\n\n // Obtain persistent element\n drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\n\n // Expect persistent values\n expectProps(drawing);\n expectProps(drawing.toJSON());\n });\n\n it(\"should create a SectionDrawing and SectionDrawingModel on insert\", () => {\n const sectionDrawingId = withEditTxn(imodel, (txn) => SectionDrawing.insert(txn, documentListModelId, \"SectionDrawingInsert\"));\n\n expect(Id64.isValidId64(sectionDrawingId)).to.be.true;\n\n const insertedSectionDrawing = imodel.elements.getElement(sectionDrawingId);\n\n expect(insertedSectionDrawing instanceof SectionDrawing).to.be.true;\n\n const insertedSectionDrawingModel = imodel.models.getModel(sectionDrawingId);\n\n expect(insertedSectionDrawingModel.className).to.equal(\"SectionDrawingModel\");\n expect(insertedSectionDrawingModel instanceof SectionDrawingModel).to.be.true;\n });\n});\n"]}