@itwin/core-backend 5.8.2 → 5.9.0-dev.10

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 (751) hide show
  1. package/CHANGELOG.md +1 -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.js +3 -3
  9. package/lib/cjs/BriefcaseManager.js.map +1 -1
  10. package/lib/cjs/CatalogDb.js.map +1 -1
  11. package/lib/cjs/Category.d.ts +37 -7
  12. package/lib/cjs/Category.d.ts.map +1 -1
  13. package/lib/cjs/Category.js +33 -42
  14. package/lib/cjs/Category.js.map +1 -1
  15. package/lib/cjs/ChangeSummaryManager.js +2 -2
  16. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  17. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  18. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  19. package/lib/cjs/ChangesetECAdaptor.js +253 -250
  20. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  21. package/lib/cjs/ChannelControl.d.ts +29 -0
  22. package/lib/cjs/ChannelControl.d.ts.map +1 -1
  23. package/lib/cjs/ChannelControl.js.map +1 -1
  24. package/lib/cjs/CheckpointManager.js +1 -1
  25. package/lib/cjs/CheckpointManager.js.map +1 -1
  26. package/lib/cjs/ClassRegistry.js +5 -5
  27. package/lib/cjs/ClassRegistry.js.map +1 -1
  28. package/lib/cjs/CloudSqlite.d.ts +1 -1
  29. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  30. package/lib/cjs/CloudSqlite.js +68 -13
  31. package/lib/cjs/CloudSqlite.js.map +1 -1
  32. package/lib/cjs/CodeService.js.map +1 -1
  33. package/lib/cjs/CodeSpecs.d.ts +32 -3
  34. package/lib/cjs/CodeSpecs.d.ts.map +1 -1
  35. package/lib/cjs/CodeSpecs.js +48 -20
  36. package/lib/cjs/CodeSpecs.js.map +1 -1
  37. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  38. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  39. package/lib/cjs/DevTools.js.map +1 -1
  40. package/lib/cjs/DisplayStyle.d.ts +18 -3
  41. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  42. package/lib/cjs/DisplayStyle.js +10 -21
  43. package/lib/cjs/DisplayStyle.js.map +1 -1
  44. package/lib/cjs/ECDb.js.map +1 -1
  45. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  46. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  47. package/lib/cjs/ECSqlStatement.js.map +1 -1
  48. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  49. package/lib/cjs/EditTxn.d.ts +262 -0
  50. package/lib/cjs/EditTxn.d.ts.map +1 -0
  51. package/lib/cjs/EditTxn.js +548 -0
  52. package/lib/cjs/EditTxn.js.map +1 -0
  53. package/lib/cjs/Element.d.ts +74 -5
  54. package/lib/cjs/Element.d.ts.map +1 -1
  55. package/lib/cjs/Element.js +63 -75
  56. package/lib/cjs/Element.js.map +1 -1
  57. package/lib/cjs/ElementAspect.d.ts +10 -0
  58. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  59. package/lib/cjs/ElementAspect.js +21 -12
  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 +56 -3
  63. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  64. package/lib/cjs/ElementTreeWalker.js +53 -40
  65. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  66. package/lib/cjs/Entity.js.map +1 -1
  67. package/lib/cjs/EntityReferences.js.map +1 -1
  68. package/lib/cjs/ExportGraphics.js.map +1 -1
  69. package/lib/cjs/ExternalSource.d.ts +11 -2
  70. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  71. package/lib/cjs/ExternalSource.js +10 -8
  72. package/lib/cjs/ExternalSource.js.map +1 -1
  73. package/lib/cjs/FontFile.js.map +1 -1
  74. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  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 +66 -22
  79. package/lib/cjs/IModelDb.d.ts.map +1 -1
  80. package/lib/cjs/IModelDb.js +183 -297
  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.d.ts +58 -1
  85. package/lib/cjs/IModelHost.d.ts.map +1 -1
  86. package/lib/cjs/IModelHost.js +89 -0
  87. package/lib/cjs/IModelHost.js.map +1 -1
  88. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  89. package/lib/cjs/IModelJsFs.js.map +1 -1
  90. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  91. package/lib/cjs/IpcHost.d.ts.map +1 -1
  92. package/lib/cjs/IpcHost.js +15 -6
  93. package/lib/cjs/IpcHost.js.map +1 -1
  94. package/lib/cjs/LineStyle.d.ts +47 -7
  95. package/lib/cjs/LineStyle.d.ts.map +1 -1
  96. package/lib/cjs/LineStyle.js +38 -33
  97. package/lib/cjs/LineStyle.js.map +1 -1
  98. package/lib/cjs/LocalHub.js +1 -1
  99. package/lib/cjs/LocalHub.js.map +1 -1
  100. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  101. package/lib/cjs/LockControl.d.ts +85 -1
  102. package/lib/cjs/LockControl.d.ts.map +1 -1
  103. package/lib/cjs/LockControl.js.map +1 -1
  104. package/lib/cjs/Material.d.ts +8 -1
  105. package/lib/cjs/Material.d.ts.map +1 -1
  106. package/lib/cjs/Material.js +6 -12
  107. package/lib/cjs/Material.js.map +1 -1
  108. package/lib/cjs/Model.d.ts +59 -20
  109. package/lib/cjs/Model.d.ts.map +1 -1
  110. package/lib/cjs/Model.js +38 -80
  111. package/lib/cjs/Model.js.map +1 -1
  112. package/lib/cjs/NativeAppStorage.js.map +1 -1
  113. package/lib/cjs/NativeHost.js.map +1 -1
  114. package/lib/cjs/NavigationRelationship.js.map +1 -1
  115. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  116. package/lib/cjs/PropertyStore.js.map +1 -1
  117. package/lib/cjs/Relationship.d.ts +72 -7
  118. package/lib/cjs/Relationship.d.ts.map +1 -1
  119. package/lib/cjs/Relationship.js +39 -21
  120. package/lib/cjs/Relationship.js.map +1 -1
  121. package/lib/cjs/RpcBackend.js.map +1 -1
  122. package/lib/cjs/SQLiteDb.js.map +1 -1
  123. package/lib/cjs/Schema.js.map +1 -1
  124. package/lib/cjs/SchemaSync.js +4 -4
  125. package/lib/cjs/SchemaSync.js.map +1 -1
  126. package/lib/cjs/SchemaUtils.js.map +1 -1
  127. package/lib/cjs/SheetIndex.d.ts +9 -0
  128. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  129. package/lib/cjs/SheetIndex.js +38 -35
  130. package/lib/cjs/SheetIndex.js.map +1 -1
  131. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  132. package/lib/cjs/SqliteStatement.js.map +1 -1
  133. package/lib/cjs/StashManager.js +1 -1
  134. package/lib/cjs/StashManager.js.map +1 -1
  135. package/lib/cjs/Texture.d.ts +6 -0
  136. package/lib/cjs/Texture.d.ts.map +1 -1
  137. package/lib/cjs/Texture.js +6 -14
  138. package/lib/cjs/Texture.js.map +1 -1
  139. package/lib/cjs/TileStorage.js.map +1 -1
  140. package/lib/cjs/TxnManager.d.ts +105 -9
  141. package/lib/cjs/TxnManager.d.ts.map +1 -1
  142. package/lib/cjs/TxnManager.js +194 -15
  143. package/lib/cjs/TxnManager.js.map +1 -1
  144. package/lib/cjs/ViewDefinition.d.ts +21 -1
  145. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  146. package/lib/cjs/ViewDefinition.js +27 -66
  147. package/lib/cjs/ViewDefinition.js.map +1 -1
  148. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  149. package/lib/cjs/ViewStore.js.map +1 -1
  150. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
  151. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  152. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +33 -27
  153. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  154. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  155. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  156. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  157. package/lib/cjs/annotations/TextAnnotationElement.js +6 -5
  158. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  159. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  160. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  161. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  162. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  163. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  164. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  165. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  166. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  167. package/lib/cjs/core-backend.d.ts +1 -0
  168. package/lib/cjs/core-backend.d.ts.map +1 -1
  169. package/lib/cjs/core-backend.js +1 -0
  170. package/lib/cjs/core-backend.js.map +1 -1
  171. package/lib/cjs/domains/FunctionalElements.d.ts +6 -2
  172. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  173. package/lib/cjs/domains/FunctionalElements.js +8 -13
  174. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  175. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  176. package/lib/cjs/domains/GenericElements.d.ts +11 -4
  177. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  178. package/lib/cjs/domains/GenericElements.js +13 -24
  179. package/lib/cjs/domains/GenericElements.js.map +1 -1
  180. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  181. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  182. package/lib/cjs/internal/ChannelAdmin.d.ts +15 -0
  183. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  184. package/lib/cjs/internal/ChannelAdmin.js +5 -3
  185. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  186. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  187. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  188. package/lib/cjs/internal/HubMock.d.ts +2 -0
  189. package/lib/cjs/internal/HubMock.d.ts.map +1 -1
  190. package/lib/cjs/internal/HubMock.js +7 -0
  191. package/lib/cjs/internal/HubMock.js.map +1 -1
  192. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  193. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  194. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  195. package/lib/cjs/internal/NoLocks.d.ts.map +1 -1
  196. package/lib/cjs/internal/NoLocks.js +6 -0
  197. package/lib/cjs/internal/NoLocks.js.map +1 -1
  198. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  199. package/lib/cjs/internal/ServerBasedLocks.d.ts +12 -0
  200. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  201. package/lib/cjs/internal/ServerBasedLocks.js +285 -4
  202. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  203. package/lib/cjs/internal/Symbols.d.ts +4 -0
  204. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  205. package/lib/cjs/internal/Symbols.js +5 -1
  206. package/lib/cjs/internal/Symbols.js.map +1 -1
  207. package/lib/cjs/internal/annotations/fields.d.ts +3 -2
  208. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  209. package/lib/cjs/internal/annotations/fields.js +7 -6
  210. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  211. package/lib/cjs/internal/cross-package.js.map +1 -1
  212. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +18 -3
  213. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
  214. package/lib/cjs/internal/workspace/SettingsEditorImpl.js +49 -242
  215. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  216. package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
  217. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  218. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  219. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +0 -1
  220. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  221. package/lib/cjs/internal/workspace/WorkspaceImpl.js +70 -41
  222. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  223. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  224. package/lib/cjs/rpc/multipart.js.map +1 -1
  225. package/lib/cjs/rpc/tracing.js.map +1 -1
  226. package/lib/cjs/rpc/web/logging.js.map +1 -1
  227. package/lib/cjs/rpc/web/request.js.map +1 -1
  228. package/lib/cjs/rpc/web/response.js.map +1 -1
  229. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  230. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  231. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  232. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  233. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  234. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  235. package/lib/cjs/workspace/Settings.d.ts +11 -5
  236. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  237. package/lib/cjs/workspace/Settings.js.map +1 -1
  238. package/lib/cjs/workspace/SettingsDb.d.ts +20 -99
  239. package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -1
  240. package/lib/cjs/workspace/SettingsDb.js +23 -7
  241. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  242. package/lib/cjs/workspace/SettingsEditor.d.ts +40 -226
  243. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
  244. package/lib/cjs/workspace/SettingsEditor.js +86 -25
  245. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  246. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  247. package/lib/cjs/workspace/Workspace.d.ts +7 -11
  248. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  249. package/lib/cjs/workspace/Workspace.js.map +1 -1
  250. package/lib/cjs/workspace/WorkspaceEditor.d.ts +14 -0
  251. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  252. package/lib/cjs/workspace/WorkspaceEditor.js +1 -1
  253. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  254. package/lib/esm/BackendHubAccess.d.ts +38 -0
  255. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  256. package/lib/esm/BackendHubAccess.js.map +1 -1
  257. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  258. package/lib/esm/BisCoreSchema.js.map +1 -1
  259. package/lib/esm/BlobContainerService.js.map +1 -1
  260. package/lib/esm/BriefcaseManager.js +3 -3
  261. package/lib/esm/BriefcaseManager.js.map +1 -1
  262. package/lib/esm/CatalogDb.js.map +1 -1
  263. package/lib/esm/Category.d.ts +37 -7
  264. package/lib/esm/Category.d.ts.map +1 -1
  265. package/lib/esm/Category.js +33 -42
  266. package/lib/esm/Category.js.map +1 -1
  267. package/lib/esm/ChangeSummaryManager.js +2 -2
  268. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  269. package/lib/esm/ChangedElementsDb.js.map +1 -1
  270. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  271. package/lib/esm/ChangesetECAdaptor.js +253 -250
  272. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  273. package/lib/esm/ChannelControl.d.ts +29 -0
  274. package/lib/esm/ChannelControl.d.ts.map +1 -1
  275. package/lib/esm/ChannelControl.js.map +1 -1
  276. package/lib/esm/CheckpointManager.js +1 -1
  277. package/lib/esm/CheckpointManager.js.map +1 -1
  278. package/lib/esm/ClassRegistry.js +5 -5
  279. package/lib/esm/ClassRegistry.js.map +1 -1
  280. package/lib/esm/CloudSqlite.d.ts +1 -1
  281. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  282. package/lib/esm/CloudSqlite.js +69 -14
  283. package/lib/esm/CloudSqlite.js.map +1 -1
  284. package/lib/esm/CodeService.js.map +1 -1
  285. package/lib/esm/CodeSpecs.d.ts +32 -3
  286. package/lib/esm/CodeSpecs.d.ts.map +1 -1
  287. package/lib/esm/CodeSpecs.js +49 -21
  288. package/lib/esm/CodeSpecs.js.map +1 -1
  289. package/lib/esm/ConcurrentQuery.js.map +1 -1
  290. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  291. package/lib/esm/DevTools.js.map +1 -1
  292. package/lib/esm/DisplayStyle.d.ts +18 -3
  293. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  294. package/lib/esm/DisplayStyle.js +10 -21
  295. package/lib/esm/DisplayStyle.js.map +1 -1
  296. package/lib/esm/ECDb.js.map +1 -1
  297. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  298. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  299. package/lib/esm/ECSqlStatement.js.map +1 -1
  300. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  301. package/lib/esm/EditTxn.d.ts +262 -0
  302. package/lib/esm/EditTxn.d.ts.map +1 -0
  303. package/lib/esm/EditTxn.js +543 -0
  304. package/lib/esm/EditTxn.js.map +1 -0
  305. package/lib/esm/Element.d.ts +74 -5
  306. package/lib/esm/Element.d.ts.map +1 -1
  307. package/lib/esm/Element.js +64 -76
  308. package/lib/esm/Element.js.map +1 -1
  309. package/lib/esm/ElementAspect.d.ts +10 -0
  310. package/lib/esm/ElementAspect.d.ts.map +1 -1
  311. package/lib/esm/ElementAspect.js +22 -13
  312. package/lib/esm/ElementAspect.js.map +1 -1
  313. package/lib/esm/ElementGraphics.js.map +1 -1
  314. package/lib/esm/ElementTreeWalker.d.ts +56 -3
  315. package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
  316. package/lib/esm/ElementTreeWalker.js +53 -40
  317. package/lib/esm/ElementTreeWalker.js.map +1 -1
  318. package/lib/esm/Entity.js.map +1 -1
  319. package/lib/esm/EntityReferences.js.map +1 -1
  320. package/lib/esm/ExportGraphics.js.map +1 -1
  321. package/lib/esm/ExternalSource.d.ts +11 -2
  322. package/lib/esm/ExternalSource.d.ts.map +1 -1
  323. package/lib/esm/ExternalSource.js +10 -8
  324. package/lib/esm/ExternalSource.js.map +1 -1
  325. package/lib/esm/FontFile.js.map +1 -1
  326. package/lib/esm/GeoCoordConfig.js.map +1 -1
  327. package/lib/esm/GeographicCRSServices.js.map +1 -1
  328. package/lib/esm/GeometrySummary.js +47 -47
  329. package/lib/esm/GeometrySummary.js.map +1 -1
  330. package/lib/esm/IModelDb.d.ts +66 -22
  331. package/lib/esm/IModelDb.d.ts.map +1 -1
  332. package/lib/esm/IModelDb.js +185 -299
  333. package/lib/esm/IModelDb.js.map +1 -1
  334. package/lib/esm/IModelDbFonts.js.map +1 -1
  335. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  336. package/lib/esm/IModelHost.d.ts +58 -1
  337. package/lib/esm/IModelHost.d.ts.map +1 -1
  338. package/lib/esm/IModelHost.js +91 -2
  339. package/lib/esm/IModelHost.js.map +1 -1
  340. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  341. package/lib/esm/IModelJsFs.js.map +1 -1
  342. package/lib/esm/ImageSourceConversion.js.map +1 -1
  343. package/lib/esm/IpcHost.d.ts.map +1 -1
  344. package/lib/esm/IpcHost.js +16 -7
  345. package/lib/esm/IpcHost.js.map +1 -1
  346. package/lib/esm/LineStyle.d.ts +47 -7
  347. package/lib/esm/LineStyle.d.ts.map +1 -1
  348. package/lib/esm/LineStyle.js +38 -33
  349. package/lib/esm/LineStyle.js.map +1 -1
  350. package/lib/esm/LocalHub.js +1 -1
  351. package/lib/esm/LocalHub.js.map +1 -1
  352. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  353. package/lib/esm/LockControl.d.ts +85 -1
  354. package/lib/esm/LockControl.d.ts.map +1 -1
  355. package/lib/esm/LockControl.js.map +1 -1
  356. package/lib/esm/Material.d.ts +8 -1
  357. package/lib/esm/Material.d.ts.map +1 -1
  358. package/lib/esm/Material.js +6 -12
  359. package/lib/esm/Material.js.map +1 -1
  360. package/lib/esm/Model.d.ts +59 -20
  361. package/lib/esm/Model.d.ts.map +1 -1
  362. package/lib/esm/Model.js +39 -81
  363. package/lib/esm/Model.js.map +1 -1
  364. package/lib/esm/NativeAppStorage.js.map +1 -1
  365. package/lib/esm/NativeHost.js.map +1 -1
  366. package/lib/esm/NavigationRelationship.js.map +1 -1
  367. package/lib/esm/PromiseMemoizer.js.map +1 -1
  368. package/lib/esm/PropertyStore.js.map +1 -1
  369. package/lib/esm/Relationship.d.ts +72 -7
  370. package/lib/esm/Relationship.d.ts.map +1 -1
  371. package/lib/esm/Relationship.js +40 -22
  372. package/lib/esm/Relationship.js.map +1 -1
  373. package/lib/esm/RpcBackend.js.map +1 -1
  374. package/lib/esm/SQLiteDb.js.map +1 -1
  375. package/lib/esm/Schema.js.map +1 -1
  376. package/lib/esm/SchemaSync.js +5 -5
  377. package/lib/esm/SchemaSync.js.map +1 -1
  378. package/lib/esm/SchemaUtils.js.map +1 -1
  379. package/lib/esm/SheetIndex.d.ts +9 -0
  380. package/lib/esm/SheetIndex.d.ts.map +1 -1
  381. package/lib/esm/SheetIndex.js +38 -35
  382. package/lib/esm/SheetIndex.js.map +1 -1
  383. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  384. package/lib/esm/SqliteStatement.js.map +1 -1
  385. package/lib/esm/StashManager.js +1 -1
  386. package/lib/esm/StashManager.js.map +1 -1
  387. package/lib/esm/Texture.d.ts +6 -0
  388. package/lib/esm/Texture.d.ts.map +1 -1
  389. package/lib/esm/Texture.js +6 -14
  390. package/lib/esm/Texture.js.map +1 -1
  391. package/lib/esm/TileStorage.js.map +1 -1
  392. package/lib/esm/TxnManager.d.ts +105 -9
  393. package/lib/esm/TxnManager.d.ts.map +1 -1
  394. package/lib/esm/TxnManager.js +194 -15
  395. package/lib/esm/TxnManager.js.map +1 -1
  396. package/lib/esm/ViewDefinition.d.ts +21 -1
  397. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  398. package/lib/esm/ViewDefinition.js +27 -66
  399. package/lib/esm/ViewDefinition.js.map +1 -1
  400. package/lib/esm/ViewStateHydrator.js.map +1 -1
  401. package/lib/esm/ViewStore.js.map +1 -1
  402. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
  403. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  404. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +33 -27
  405. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  406. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  407. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  408. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  409. package/lib/esm/annotations/TextAnnotationElement.js +6 -5
  410. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  411. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  412. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  413. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  414. package/lib/esm/core-backend.d.ts +1 -0
  415. package/lib/esm/core-backend.d.ts.map +1 -1
  416. package/lib/esm/core-backend.js +1 -0
  417. package/lib/esm/core-backend.js.map +1 -1
  418. package/lib/esm/domains/FunctionalElements.d.ts +6 -2
  419. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  420. package/lib/esm/domains/FunctionalElements.js +8 -13
  421. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  422. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  423. package/lib/esm/domains/GenericElements.d.ts +11 -4
  424. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  425. package/lib/esm/domains/GenericElements.js +13 -24
  426. package/lib/esm/domains/GenericElements.js.map +1 -1
  427. package/lib/esm/domains/GenericSchema.js.map +1 -1
  428. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  429. package/lib/esm/internal/ChannelAdmin.d.ts +15 -0
  430. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  431. package/lib/esm/internal/ChannelAdmin.js +6 -4
  432. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  433. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  434. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  435. package/lib/esm/internal/HubMock.d.ts +2 -0
  436. package/lib/esm/internal/HubMock.d.ts.map +1 -1
  437. package/lib/esm/internal/HubMock.js +7 -0
  438. package/lib/esm/internal/HubMock.js.map +1 -1
  439. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  440. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  441. package/lib/esm/internal/NativePlatform.js.map +1 -1
  442. package/lib/esm/internal/NoLocks.d.ts.map +1 -1
  443. package/lib/esm/internal/NoLocks.js +6 -0
  444. package/lib/esm/internal/NoLocks.js.map +1 -1
  445. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  446. package/lib/esm/internal/ServerBasedLocks.d.ts +12 -0
  447. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
  448. package/lib/esm/internal/ServerBasedLocks.js +286 -5
  449. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  450. package/lib/esm/internal/Symbols.d.ts +4 -0
  451. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  452. package/lib/esm/internal/Symbols.js +4 -0
  453. package/lib/esm/internal/Symbols.js.map +1 -1
  454. package/lib/esm/internal/annotations/fields.d.ts +3 -2
  455. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  456. package/lib/esm/internal/annotations/fields.js +7 -6
  457. package/lib/esm/internal/annotations/fields.js.map +1 -1
  458. package/lib/esm/internal/cross-package.js.map +1 -1
  459. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +18 -3
  460. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
  461. package/lib/esm/internal/workspace/SettingsEditorImpl.js +52 -246
  462. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  463. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
  464. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  465. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  466. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +0 -1
  467. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  468. package/lib/esm/internal/workspace/WorkspaceImpl.js +71 -41
  469. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  470. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  471. package/lib/esm/rpc/multipart.js.map +1 -1
  472. package/lib/esm/rpc/tracing.js.map +1 -1
  473. package/lib/esm/rpc/web/logging.js.map +1 -1
  474. package/lib/esm/rpc/web/request.js.map +1 -1
  475. package/lib/esm/rpc/web/response.js.map +1 -1
  476. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  477. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  478. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  479. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  480. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  481. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  482. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  483. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  484. package/lib/esm/test/AttachDb.test.js +11 -11
  485. package/lib/esm/test/AttachDb.test.js.map +1 -1
  486. package/lib/esm/test/ElementDrivesElement.test.d.ts +20 -19
  487. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  488. package/lib/esm/test/ElementDrivesElement.test.js +134 -119
  489. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  490. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  491. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  492. package/lib/esm/test/IModelHost.test.js +56 -2
  493. package/lib/esm/test/IModelHost.test.js.map +1 -1
  494. package/lib/esm/test/IModelTestUtils.d.ts +23 -23
  495. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  496. package/lib/esm/test/IModelTestUtils.js +466 -449
  497. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  498. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  499. package/lib/esm/test/IpcHost.test.js.map +1 -1
  500. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  501. package/lib/esm/test/PrintElementTree.js.map +1 -1
  502. package/lib/esm/test/PropertyDb.test.js +2 -2
  503. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  504. package/lib/esm/test/RevisionUtility.js.map +1 -1
  505. package/lib/esm/test/SchemaUtils.test.js +25 -25
  506. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  507. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  508. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +156 -147
  509. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  510. package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -1
  511. package/lib/esm/test/TestChangeSetUtility.js +11 -7
  512. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  513. package/lib/esm/test/TestEditTxn.d.ts +8 -0
  514. package/lib/esm/test/TestEditTxn.d.ts.map +1 -0
  515. package/lib/esm/test/TestEditTxn.js +34 -0
  516. package/lib/esm/test/TestEditTxn.js.map +1 -0
  517. package/lib/esm/test/TestUtils.d.ts +1 -0
  518. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  519. package/lib/esm/test/TestUtils.js +8 -1
  520. package/lib/esm/test/TestUtils.js.map +1 -1
  521. package/lib/esm/test/annotations/Fields.test.js +135 -143
  522. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  523. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  524. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  525. package/lib/esm/test/annotations/TextAnnotation.test.js +156 -99
  526. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  527. package/lib/esm/test/annotations/TextBlock.test.js +5 -3
  528. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  529. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  530. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  531. package/lib/esm/test/categories/Category.test.js +63 -3
  532. package/lib/esm/test/categories/Category.test.js.map +1 -1
  533. package/lib/esm/test/codespec/CodeSpec.test.js +88 -5
  534. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  535. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  536. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  537. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  538. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  539. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  540. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  541. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  542. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  543. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  544. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  545. package/lib/esm/test/ecdb/ECSqlAst.test.js +68 -67
  546. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  547. package/lib/esm/test/ecdb/ECSqlQuery.test.js +6 -6
  548. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  549. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -333
  550. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  551. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  552. package/lib/esm/test/ecdb/QueryReaders.test.js +47 -44
  553. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  554. package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -2
  555. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  556. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  557. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +30 -28
  558. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  559. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  560. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  561. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  562. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  563. package/lib/esm/test/element/DeleteDefinitionElements.test.js +159 -143
  564. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  565. package/lib/esm/test/element/ElementAspect.test.js +90 -82
  566. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  567. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -1
  568. package/lib/esm/test/element/ElementDependencyGraph.test.js +51 -43
  569. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  570. package/lib/esm/test/element/ElementRoundTrip.test.js +176 -177
  571. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  572. package/lib/esm/test/element/ExcludedElements.test.js +2 -2
  573. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  574. package/lib/esm/test/element/ExternalSource.test.js +40 -38
  575. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  576. package/lib/esm/test/element/NullStructArray.test.js +23 -22
  577. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  578. package/lib/esm/test/element/ProjectInformationRecord.test.js +5 -2
  579. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  580. package/lib/esm/test/element/SheetInformationAspect.test.js +43 -11
  581. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  582. package/lib/esm/test/element/UrlLink.test.js +2 -2
  583. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  584. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  585. package/lib/esm/test/font/IModelDbFonts.test.js +87 -73
  586. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  587. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +194 -155
  588. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  589. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +2 -4
  590. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  591. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  592. package/lib/esm/test/hubaccess/Rebase.test.js +369 -303
  593. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  594. package/lib/esm/test/hubaccess/SemanticRebase.test.js +467 -392
  595. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  596. package/lib/esm/test/imageData.js.map +1 -1
  597. package/lib/esm/test/imodel/Code.test.js +31 -31
  598. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  599. package/lib/esm/test/imodel/ElementTreeWalker.test.js +57 -48
  600. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  601. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  602. package/lib/esm/test/imodel/IModel.test.js +463 -388
  603. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  604. package/lib/esm/test/imodel/ProjectExtents.test.js +2 -2
  605. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  606. package/lib/esm/test/imodel/SchemaXmlImport.test.js +13 -13
  607. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  608. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  609. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  610. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -1
  611. package/lib/esm/test/incrementalSchemaLocater/TestContext.js +2 -2
  612. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  613. package/lib/esm/test/index.d.ts +1 -0
  614. package/lib/esm/test/index.d.ts.map +1 -1
  615. package/lib/esm/test/index.js +1 -0
  616. package/lib/esm/test/index.js.map +1 -1
  617. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  618. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  619. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  620. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  621. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  622. package/lib/esm/test/rpc/response.test.js.map +1 -1
  623. package/lib/esm/test/schema/ClassRegistry.test.js +122 -121
  624. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  625. package/lib/esm/test/schema/FunctionalDomain.test.js +36 -34
  626. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  627. package/lib/esm/test/schema/GenericDomain.test.js +114 -94
  628. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  629. package/lib/esm/test/schema/IModelSchemaContext.test.js +11 -10
  630. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  631. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +226 -211
  632. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  633. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +1 -3
  634. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -1
  635. package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -247
  636. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  637. package/lib/esm/test/standalone/ChangeMerge.test.js +101 -82
  638. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  639. package/lib/esm/test/standalone/ChangesetReader.test.js +242 -213
  640. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  641. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  642. package/lib/esm/test/standalone/DisplayStyle.test.js +43 -40
  643. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  644. package/lib/esm/test/standalone/Drawing.test.js +4 -3
  645. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  646. package/lib/esm/test/standalone/EditTxn.test.d.ts +2 -0
  647. package/lib/esm/test/standalone/EditTxn.test.d.ts.map +1 -0
  648. package/lib/esm/test/standalone/EditTxn.test.js +219 -0
  649. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -0
  650. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  651. package/lib/esm/test/standalone/ElementMesh.test.js +16 -13
  652. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  653. package/lib/esm/test/standalone/ExportGraphics.test.js +40 -34
  654. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  655. package/lib/esm/test/standalone/GeometryChangeEvents.test.js +11 -15
  656. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  657. package/lib/esm/test/standalone/GeometryStream.test.js +212 -165
  658. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  659. package/lib/esm/test/standalone/HubMock.test.js +31 -25
  660. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  661. package/lib/esm/test/standalone/IModelLimits.test.js +11 -8
  662. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  663. package/lib/esm/test/standalone/IModelWrite.test.d.ts +2 -2
  664. package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
  665. package/lib/esm/test/standalone/IModelWrite.test.js +211 -169
  666. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  667. package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts +2 -0
  668. package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts.map +1 -0
  669. package/lib/esm/test/standalone/ITwinWorkspace.test.js +236 -0
  670. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -0
  671. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +25 -22
  672. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  673. package/lib/esm/test/standalone/IntegrityCheck.test.js +20 -18
  674. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  675. package/lib/esm/test/standalone/MergeConflict.test.d.ts +2 -2
  676. package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -1
  677. package/lib/esm/test/standalone/MergeConflict.test.js +49 -33
  678. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  679. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  680. package/lib/esm/test/standalone/RenderMaterialElement.test.js +5 -5
  681. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  682. package/lib/esm/test/standalone/RenderTimeline.test.js +3 -2
  683. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  684. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  685. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  686. package/lib/esm/test/standalone/SectionDrawing.test.js +7 -7
  687. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  688. package/lib/esm/test/standalone/ServerBasedLocks.test.js +928 -22
  689. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  690. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  691. package/lib/esm/test/standalone/Settings.test.js +26 -4
  692. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  693. package/lib/esm/test/standalone/SettingsSchemas.test.js +2 -1
  694. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  695. package/lib/esm/test/standalone/SnapshotDb.test.js +3 -1
  696. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  697. package/lib/esm/test/standalone/StandaloneDb.test.js +27 -26
  698. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  699. package/lib/esm/test/standalone/Texture.test.js +5 -4
  700. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  701. package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -1
  702. package/lib/esm/test/standalone/TileCache.test.js +5 -3
  703. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  704. package/lib/esm/test/standalone/TileTree.test.js +35 -31
  705. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  706. package/lib/esm/test/standalone/TxnManager.test.js +700 -653
  707. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  708. package/lib/esm/test/standalone/ViewDefinition.test.js +295 -229
  709. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  710. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  711. package/lib/esm/test/standalone/Workspace.test.js +72 -22
  712. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  713. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  714. package/lib/esm/test/workspace/SettingsDb.test.js +28 -456
  715. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  716. package/lib/esm/workspace/Settings.d.ts +11 -5
  717. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  718. package/lib/esm/workspace/Settings.js.map +1 -1
  719. package/lib/esm/workspace/SettingsDb.d.ts +20 -99
  720. package/lib/esm/workspace/SettingsDb.d.ts.map +1 -1
  721. package/lib/esm/workspace/SettingsDb.js +20 -6
  722. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  723. package/lib/esm/workspace/SettingsEditor.d.ts +40 -226
  724. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
  725. package/lib/esm/workspace/SettingsEditor.js +85 -24
  726. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  727. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  728. package/lib/esm/workspace/Workspace.d.ts +7 -11
  729. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  730. package/lib/esm/workspace/Workspace.js.map +1 -1
  731. package/lib/esm/workspace/WorkspaceEditor.d.ts +14 -0
  732. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  733. package/lib/esm/workspace/WorkspaceEditor.js +1 -1
  734. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  735. package/package.json +13 -13
  736. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +0 -38
  737. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
  738. package/lib/cjs/internal/workspace/SettingsDbImpl.js +0 -108
  739. package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +0 -1
  740. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +0 -14
  741. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
  742. package/lib/cjs/internal/workspace/SettingsSqliteDb.js +0 -40
  743. package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +0 -1
  744. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +0 -38
  745. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
  746. package/lib/esm/internal/workspace/SettingsDbImpl.js +0 -104
  747. package/lib/esm/internal/workspace/SettingsDbImpl.js.map +0 -1
  748. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +0 -14
  749. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
  750. package/lib/esm/internal/workspace/SettingsSqliteDb.js +0 -36
  751. package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +0 -1
@@ -4,12 +4,43 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { assert, expect } from "chai";
6
6
  import { BentleyStatus, Id64, IModelStatus } from "@itwin/core-bentley";
7
+ import { EditTxn } from "../../EditTxn";
7
8
  import { Angle, AngleSweep, Arc3d, Box, ClipMaskXYZRangePlanes, ClipPlane, ClipPlaneContainment, ClipPrimitive, ClipShape, ClipVector, ConvexClipPlaneSet, CurveCollection, CurvePrimitive, Geometry, IndexedPolyface, InterpolationCurve3d, InterpolationCurve3dOptions, LineSegment3d, LineString3d, Loop, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, Point3dArray, PointString3d, PolyfaceBuilder, Range2d, Range3d, SolidPrimitive, Sphere, StrokeOptions, Transform, Vector3d, YawPitchRollAngles, } from "@itwin/core-geometry";
8
9
  import { AreaPattern, BackgroundFill, BRepGeometryOperation, Code, ColorByName, ColorDef, ElementGeometry, ElementGeometryOpcode, FillDisplay, GeometryClass, GeometryParams, GeometryStreamBuilder, GeometryStreamFlags, GeometryStreamIterator, Gradient, ImageGraphicCorners, IModel, LinePixels, LineStyle, MassPropertiesOperation, Placement3d, TextString, ThematicGradientMode, ThematicGradientSettings, ViewFlags, } from "@itwin/core-common";
9
10
  import { _nativeDb, DefinitionModel, deleteElementTree, GeometryPart, LineStyleDefinition, PhysicalObject, SubCategory, Subject } from "../../core-backend";
10
11
  import { createBRepDataProps } from "../GeometryTestUtil";
11
12
  import { IModelTestUtils } from "../IModelTestUtils";
12
13
  import { Timer } from "../TestUtils";
14
+ let currentTxn;
15
+ function txnForCurrentTest(iModel, mode = "reuse") {
16
+ if (currentTxn && (!currentTxn.iModel.isOpen || currentTxn.iModel !== iModel)) {
17
+ if (currentTxn.isActive && currentTxn.iModel.isOpen)
18
+ currentTxn.end("abandon");
19
+ currentTxn = undefined;
20
+ }
21
+ if ("reuse" === mode && currentTxn?.isActive)
22
+ return currentTxn;
23
+ if (currentTxn?.isActive)
24
+ currentTxn.end("abandon");
25
+ currentTxn = new EditTxn(iModel, "geometry stream");
26
+ currentTxn.start();
27
+ return currentTxn;
28
+ }
29
+ function saveTestTxn(iModel, closeAfterSave = false) {
30
+ const txn = txnForCurrentTest(iModel);
31
+ txn.saveChanges();
32
+ if (closeAfterSave && txn.isActive) {
33
+ txn.end();
34
+ currentTxn = undefined;
35
+ if (iModel.isOpen)
36
+ txnForCurrentTest(iModel, "fresh");
37
+ }
38
+ }
39
+ function closeTestTxn(_iModel) {
40
+ if (currentTxn?.isActive)
41
+ currentTxn.end("abandon");
42
+ currentTxn = undefined;
43
+ }
13
44
  function assertTrue(expr) {
14
45
  assert.isTrue(expr);
15
46
  }
@@ -35,12 +66,12 @@ function createPhysicalElementProps(seedElement, placement, geom, modelId) {
35
66
  }
36
67
  function createGeometryPart(geom, imodel) {
37
68
  const partProps = createGeometryPartProps(geom);
38
- return imodel.elements.insertElement(partProps);
69
+ return txnForCurrentTest(imodel).insertElement(partProps);
39
70
  }
40
71
  function createGeometricElem(geom, placement, imodel, seedElement) {
41
72
  const elementProps = createPhysicalElementProps(seedElement, placement, geom);
42
73
  const el = imodel.elements.createElement(elementProps);
43
- return imodel.elements.insertElement(el.toJSON());
74
+ return txnForCurrentTest(imodel).insertElement(el.toJSON());
44
75
  }
45
76
  function createPartElem(partId, origin, angles, imodel, seedElement, isRelative = false) {
46
77
  const builder = new GeometryStreamBuilder();
@@ -94,7 +125,7 @@ function createStyledLineElem(imodel, seedElement, x, y, length, styleInfo, colo
94
125
  builder.appendGeometryParamsChange(params);
95
126
  builder.appendGeometry(LineSegment3d.create(Point3d.create(x, y, 0), Point3d.create(x + length, y, 0)));
96
127
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
97
- return imodel.elements.insertElement(elementProps);
128
+ return txnForCurrentTest(imodel).insertElement(elementProps);
98
129
  }
99
130
  function validateElementInfo(info, expected, isWorld) {
100
131
  assert.isTrue(undefined !== info.entryArray && expected.length === info.entryArray.length);
@@ -245,9 +276,9 @@ function createGeometricElemFromSeed(imodel, seedId, entryArray, placement) {
245
276
  assert.exists(seedElement);
246
277
  const elementProps = createPhysicalElementProps(seedElement, placement);
247
278
  elementProps.elementGeometryBuilderParams = { entryArray };
248
- const newId = imodel.elements.insertElement(elementProps);
279
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
249
280
  assert.isTrue(Id64.isValidId64(newId));
250
- imodel.saveChanges();
281
+ saveTestTxn(imodel, true);
251
282
  return newId;
252
283
  }
253
284
  describe("GeometryStream", () => {
@@ -258,9 +289,17 @@ describe("GeometryStream", () => {
258
289
  imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);
259
290
  });
260
291
  after(() => {
292
+ closeTestTxn(imodel);
261
293
  imodel.close();
262
294
  });
295
+ beforeEach(() => {
296
+ txnForCurrentTest(imodel, "fresh");
297
+ });
298
+ afterEach(() => {
299
+ closeTestTxn(imodel);
300
+ });
263
301
  it("create GeometricElement3d using line codes 1-7", async () => {
302
+ const txn = txnForCurrentTest(imodel);
264
303
  // Set up element to be placed in iModel
265
304
  const seedElement = imodel.elements.getElement("0x1d");
266
305
  assert.exists(seedElement);
@@ -270,12 +309,12 @@ describe("GeometryStream", () => {
270
309
  // create new line style definitions for line codes 1-7
271
310
  const lsStyles = [];
272
311
  lsCodes.forEach((linePixels) => {
273
- lsStyles.push(LinePixels.Solid === linePixels ? Id64.invalid : LineStyleDefinition.Utils.getOrCreateLinePixelsStyle(imodel, IModel.dictionaryId, linePixels));
312
+ lsStyles.push(LinePixels.Solid === linePixels ? Id64.invalid : LineStyleDefinition.Utils.getOrCreateLinePixelsStyle(imodel, IModel.dictionaryId, linePixels, txn));
274
313
  });
275
314
  // get existing line style definitions for line codes 1-7
276
315
  const lsStylesExist = [];
277
316
  lsCodes.forEach((linePixels) => {
278
- lsStylesExist.push(LinePixels.Solid === linePixels ? Id64.invalid : LineStyleDefinition.Utils.getOrCreateLinePixelsStyle(imodel, IModel.dictionaryId, linePixels));
317
+ lsStylesExist.push(LinePixels.Solid === linePixels ? Id64.invalid : LineStyleDefinition.Utils.getOrCreateLinePixelsStyle(imodel, IModel.dictionaryId, linePixels, txn));
279
318
  });
280
319
  // make sure we found existing styles and didn't create a second set
281
320
  assert.isTrue(8 === lsStyles.length && lsStyles.length === lsStylesExist.length);
@@ -295,9 +334,9 @@ describe("GeometryStream", () => {
295
334
  pointE.y += 0.5;
296
335
  });
297
336
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
298
- const newId = imodel.elements.insertElement(elementProps);
337
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
299
338
  assert.isTrue(Id64.isValidId64(newId));
300
- imodel.saveChanges();
339
+ saveTestTxn(imodel, true);
301
340
  // Extract and test value returned...
302
341
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
303
342
  assert.isDefined(value.geom);
@@ -324,21 +363,22 @@ describe("GeometryStream", () => {
324
363
  }
325
364
  });
326
365
  it("create GeometricElement3d using continuous style", async () => {
366
+ const txn = txnForCurrentTest(imodel);
327
367
  // Set up element to be placed in iModel
328
368
  const seedElement = imodel.elements.getElement("0x1d");
329
369
  assert.exists(seedElement);
330
370
  assert.isTrue(seedElement.federationGuid === "18eb4650-b074-414f-b961-d9cfaa6c8746");
331
371
  // create special "internal default" continuous style for drawing curves using width overrides
332
- const styleId = LineStyleDefinition.Utils.getOrCreateContinuousStyle(imodel, IModel.dictionaryId);
372
+ const styleId = LineStyleDefinition.Utils.getOrCreateContinuousStyle(imodel, IModel.dictionaryId, undefined, txn);
333
373
  assert.isTrue(Id64.isValidId64(styleId));
334
374
  // make sure we found existing style and didn't create a new one
335
- const styleIdExists = LineStyleDefinition.Utils.getOrCreateContinuousStyle(imodel, IModel.dictionaryId);
375
+ const styleIdExists = LineStyleDefinition.Utils.getOrCreateContinuousStyle(imodel, IModel.dictionaryId, undefined, txn);
336
376
  assert.isTrue(Id64.isValidId64(styleIdExists) && styleIdExists === (styleId));
337
377
  // create continuous style with pre-defined constant width
338
- const styleIdWidth = LineStyleDefinition.Utils.getOrCreateContinuousStyle(imodel, IModel.dictionaryId, 0.05);
378
+ const styleIdWidth = LineStyleDefinition.Utils.getOrCreateContinuousStyle(imodel, IModel.dictionaryId, 0.05, txn);
339
379
  assert.isTrue(Id64.isValidId64(styleIdWidth));
340
380
  // make sure we found existing style and didn't create a new one
341
- const styleIdWidthExists = LineStyleDefinition.Utils.getOrCreateContinuousStyle(imodel, IModel.dictionaryId, 0.05);
381
+ const styleIdWidthExists = LineStyleDefinition.Utils.getOrCreateContinuousStyle(imodel, IModel.dictionaryId, 0.05, txn);
342
382
  assert.isTrue(Id64.isValidId64(styleIdWidthExists) && styleIdWidthExists === (styleIdWidth));
343
383
  const builder = new GeometryStreamBuilder();
344
384
  const params = new GeometryParams(seedElement.category);
@@ -361,9 +401,9 @@ describe("GeometryStream", () => {
361
401
  builder.appendGeometryParamsChange(params);
362
402
  builder.appendGeometry(LineSegment3d.create(Point3d.create(1.5, 0, 0), Point3d.create(1.5, 5, 0)));
363
403
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
364
- const newId = imodel.elements.insertElement(elementProps);
404
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
365
405
  assert.isTrue(Id64.isValidId64(newId));
366
- imodel.saveChanges();
406
+ saveTestTxn(imodel, true);
367
407
  // Extract and test value returned...
368
408
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
369
409
  assert.isDefined(value.geom);
@@ -398,16 +438,16 @@ describe("GeometryStream", () => {
398
438
  partBuilder.appendGeometryParamsChange(partParams);
399
439
  partBuilder.appendGeometry(Loop.create(LineString3d.create(Point3d.create(0.1, 0, 0), Point3d.create(0, -0.05, 0), Point3d.create(0, 0.05, 0), Point3d.create(0.1, 0, 0))));
400
440
  const partProps = createGeometryPartProps(partBuilder.geometryStream, definitionModelId);
401
- const partId = imodel.elements.insertElement(partProps);
441
+ const partId = txnForCurrentTest(imodel).insertElement(partProps);
402
442
  assert.isTrue(Id64.isValidId64(partId));
403
- const pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(imodel, { geomPartId: partId }); // base and size will be set automatically...
443
+ const pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(txnForCurrentTest(imodel), { geomPartId: partId }); // base and size will be set automatically...
404
444
  assert.isTrue(undefined !== pointSymbolData);
405
445
  // Use internal default instead of creating a stroke component for a solid line
406
- const strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(imodel, { descr: "TestArrowHead", lcId: 0, lcType: LineStyleDefinition.ComponentType.Internal, symbols: [{ symId: pointSymbolData.compId, strokeNum: -1, mod1: LineStyleDefinition.SymbolOptions.CurveEnd }] });
446
+ const strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(txnForCurrentTest(imodel), { descr: "TestArrowHead", lcId: 0, lcType: LineStyleDefinition.ComponentType.Internal, symbols: [{ symId: pointSymbolData.compId, strokeNum: -1, mod1: LineStyleDefinition.SymbolOptions.CurveEnd }] });
407
447
  assert.isTrue(undefined !== strokePointData);
408
- const compoundData = LineStyleDefinition.Utils.createCompoundComponent(imodel, { comps: [{ id: strokePointData.compId, type: strokePointData.compType }, { id: 0, type: LineStyleDefinition.ComponentType.Internal }] });
448
+ const compoundData = LineStyleDefinition.Utils.createCompoundComponent(txnForCurrentTest(imodel), { comps: [{ id: strokePointData.compId, type: strokePointData.compType }, { id: 0, type: LineStyleDefinition.ComponentType.Internal }] });
409
449
  assert.isTrue(undefined !== compoundData);
410
- const styleId = LineStyleDefinition.Utils.createStyle(imodel, definitionModelId, "TestArrowStyle", compoundData);
450
+ const styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), definitionModelId, "TestArrowStyle", compoundData);
411
451
  assert.isTrue(Id64.isValidId64(styleId));
412
452
  const builder = new GeometryStreamBuilder();
413
453
  const params = new GeometryParams(seedElement.category);
@@ -415,9 +455,9 @@ describe("GeometryStream", () => {
415
455
  builder.appendGeometryParamsChange(params);
416
456
  builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(-1, -1, 0)));
417
457
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream, physicalModelId);
418
- const newId = imodel.elements.insertElement(elementProps);
458
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
419
459
  assert.isTrue(Id64.isValidId64(newId));
420
- imodel.saveChanges();
460
+ saveTestTxn(imodel, true);
421
461
  const usageInfo = imodel[_nativeDb].queryDefinitionElementUsage([partId, styleId]);
422
462
  assert.isTrue(usageInfo.geometryPartIds.includes(partId));
423
463
  assert.isTrue(usageInfo.lineStyleIds.includes(styleId));
@@ -428,19 +468,19 @@ describe("GeometryStream", () => {
428
468
  createGeometricElem3dUsingArrowHeadNoStrokePattern();
429
469
  });
430
470
  it("create GeometricElement3d using arrow head style w/o using stroke pattern - deleteElementTree fails", async () => {
431
- const mySubject = Subject.insert(imodel, IModel.rootSubjectId, "My Subject - fails");
432
- const myDefModel = DefinitionModel.insert(imodel, mySubject, "My Definitions - fails");
433
- const myPhysicalModel = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), false, mySubject)[0];
471
+ const mySubject = Subject.insert(txnForCurrentTest(imodel), IModel.rootSubjectId, "My Subject - fails");
472
+ const myDefModel = DefinitionModel.insert(txnForCurrentTest(imodel), mySubject, "My Definitions - fails");
473
+ const myPhysicalModel = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txnForCurrentTest(imodel), Code.createEmpty(), false, mySubject)[0];
434
474
  createGeometricElem3dUsingArrowHeadNoStrokePattern(myDefModel, myPhysicalModel);
435
- deleteElementTree({ iModel: imodel, topElement: mySubject, maxPasses: 1 });
475
+ deleteElementTree(txnForCurrentTest(imodel), mySubject, 1);
436
476
  expect(imodel.elements.tryGetElement(mySubject)).not.undefined;
437
477
  });
438
478
  it("create GeometricElement3d using arrow head style w/o using stroke pattern - deleteElementTree succeeds with 2 passes", async () => {
439
- const mySubject = Subject.insert(imodel, IModel.rootSubjectId, "My Subject - success");
440
- const myDefModel = DefinitionModel.insert(imodel, mySubject, "My Definitions - success");
441
- const myPhysicalModel = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), false, mySubject)[0];
479
+ const mySubject = Subject.insert(txnForCurrentTest(imodel), IModel.rootSubjectId, "My Subject - success");
480
+ const myDefModel = DefinitionModel.insert(txnForCurrentTest(imodel), mySubject, "My Definitions - success");
481
+ const myPhysicalModel = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txnForCurrentTest(imodel), Code.createEmpty(), false, mySubject)[0];
442
482
  createGeometricElem3dUsingArrowHeadNoStrokePattern(myDefModel, myPhysicalModel);
443
- deleteElementTree({ iModel: imodel, topElement: mySubject, maxPasses: 2 });
483
+ deleteElementTree(txnForCurrentTest(imodel), mySubject, 2);
444
484
  expect(imodel.elements.tryGetElement(mySubject)).undefined;
445
485
  });
446
486
  it("create GeometricElement3d using compound style with dash widths and symbol", async () => {
@@ -455,26 +495,26 @@ describe("GeometryStream", () => {
455
495
  lsStrokes.push({ length: 0.1 });
456
496
  lsStrokes.push({ length: 0.25, orgWidth: 0.025, endWidth: 0.0, strokeMode: LineStyleDefinition.StrokeMode.Dash, widthMode: LineStyleDefinition.StrokeWidth.Right });
457
497
  lsStrokes.push({ length: 0.1 });
458
- const strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(imodel, { descr: "TestDashDotDashLineCode", strokes: lsStrokes });
498
+ const strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(txnForCurrentTest(imodel), { descr: "TestDashDotDashLineCode", strokes: lsStrokes });
459
499
  assert.isTrue(undefined !== strokePatternData);
460
500
  const partBuilder = new GeometryStreamBuilder();
461
501
  partBuilder.appendGeometry(Arc3d.createXY(Point3d.createZero(), 0.05));
462
502
  const partProps = createGeometryPartProps(partBuilder.geometryStream);
463
- const partId = imodel.elements.insertElement(partProps);
503
+ const partId = txnForCurrentTest(imodel).insertElement(partProps);
464
504
  assert.isTrue(Id64.isValidId64(partId));
465
- const pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(imodel, { geomPartId: partId }); // base and size will be set automatically...
505
+ const pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(txnForCurrentTest(imodel), { geomPartId: partId }); // base and size will be set automatically...
466
506
  assert.isTrue(undefined !== pointSymbolData);
467
507
  const lsSymbols = [];
468
508
  lsSymbols.push({ symId: pointSymbolData.compId, strokeNum: 1, mod1: LineStyleDefinition.SymbolOptions.Center });
469
509
  lsSymbols.push({ symId: pointSymbolData.compId, strokeNum: 3, mod1: LineStyleDefinition.SymbolOptions.Center });
470
- const strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(imodel, { descr: "TestGapSymbolsLinePoint", lcId: strokePatternData.compId, symbols: lsSymbols });
510
+ const strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(txnForCurrentTest(imodel), { descr: "TestGapSymbolsLinePoint", lcId: strokePatternData.compId, symbols: lsSymbols });
471
511
  assert.isTrue(undefined !== strokePointData);
472
512
  const lsComponents = [];
473
513
  lsComponents.push({ id: strokePointData.compId, type: strokePointData.compType });
474
514
  lsComponents.push({ id: strokePatternData.compId, type: strokePatternData.compType });
475
- const compoundData = LineStyleDefinition.Utils.createCompoundComponent(imodel, { comps: lsComponents });
515
+ const compoundData = LineStyleDefinition.Utils.createCompoundComponent(txnForCurrentTest(imodel), { comps: lsComponents });
476
516
  assert.isTrue(undefined !== compoundData);
477
- const styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, "TestDashCircleDotCircleDashStyle", compoundData);
517
+ const styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, "TestDashCircleDotCircleDashStyle", compoundData);
478
518
  assert.isTrue(Id64.isValidId64(styleId));
479
519
  const builder = new GeometryStreamBuilder();
480
520
  const params = new GeometryParams(seedElement.category);
@@ -482,9 +522,9 @@ describe("GeometryStream", () => {
482
522
  builder.appendGeometryParamsChange(params);
483
523
  builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(5, 5, 0)));
484
524
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
485
- const newId = imodel.elements.insertElement(elementProps);
525
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
486
526
  assert.isTrue(Id64.isValidId64(newId));
487
- imodel.saveChanges();
527
+ saveTestTxn(imodel, true);
488
528
  const usageInfo = imodel[_nativeDb].queryDefinitionElementUsage([partId, styleId, seedElement.category]);
489
529
  assert.isTrue(usageInfo.geometryPartIds.includes(partId));
490
530
  assert.isTrue(usageInfo.lineStyleIds.includes(styleId));
@@ -504,17 +544,17 @@ describe("GeometryStream", () => {
504
544
  let unitDef = 1.0;
505
545
  let widthDef = 0.0;
506
546
  let name = `Continuous-${unitDef}-${widthDef}`;
507
- let styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, name, { compId: 0, compType: LineStyleDefinition.ComponentType.Internal, flags: LineStyleDefinition.StyleFlags.Continuous | LineStyleDefinition.StyleFlags.NoSnap });
547
+ let styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, name, { compId: 0, compType: LineStyleDefinition.ComponentType.Internal, flags: LineStyleDefinition.StyleFlags.Continuous | LineStyleDefinition.StyleFlags.NoSnap });
508
548
  assert.isTrue(Id64.isValidId64(styleId));
509
549
  // Expect no range padding...
510
550
  let newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId));
511
551
  assert.isTrue(Id64.isValidId64(newId));
512
- imodel.saveChanges();
552
+ saveTestTxn(imodel, true);
513
553
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.0));
514
554
  // Expect range padded by 0.25...
515
555
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.25, physicalWidth: true })), ColorDef.red);
516
556
  assert.isTrue(Id64.isValidId64(newId));
517
- imodel.saveChanges();
557
+ saveTestTxn(imodel, true);
518
558
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.25));
519
559
  // LineStyleDefinition: create continuous style with both width and unit scale specified in definition...
520
560
  x = 0.0;
@@ -522,23 +562,23 @@ describe("GeometryStream", () => {
522
562
  unitDef = 2.0;
523
563
  widthDef = 0.5;
524
564
  name = `Continuous-${unitDef}-${widthDef}`;
525
- let strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(imodel, { descr: name, strokes: [{ length: 1e37, orgWidth: widthDef, strokeMode: LineStyleDefinition.StrokeMode.Dash, widthMode: LineStyleDefinition.StrokeWidth.Full }] });
526
- styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, name, { compId: strokePatternData.compId, compType: strokePatternData.compType, flags: LineStyleDefinition.StyleFlags.Continuous | LineStyleDefinition.StyleFlags.NoSnap, unitDef });
565
+ let strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(txnForCurrentTest(imodel), { descr: name, strokes: [{ length: 1e37, orgWidth: widthDef, strokeMode: LineStyleDefinition.StrokeMode.Dash, widthMode: LineStyleDefinition.StrokeWidth.Full }] });
566
+ styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, name, { compId: strokePatternData.compId, compType: strokePatternData.compType, flags: LineStyleDefinition.StyleFlags.Continuous | LineStyleDefinition.StyleFlags.NoSnap, unitDef });
527
567
  assert.isTrue(Id64.isValidId64(styleId));
528
568
  // Expect no range padding...
529
569
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.0, physicalWidth: true })));
530
570
  assert.isTrue(Id64.isValidId64(newId));
531
- imodel.saveChanges();
571
+ saveTestTxn(imodel, true);
532
572
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.0));
533
573
  // Expect range padded by 1.0...
534
574
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId), ColorDef.red);
535
575
  assert.isTrue(Id64.isValidId64(newId));
536
- imodel.saveChanges();
576
+ saveTestTxn(imodel, true);
537
577
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), widthDef * unitDef));
538
578
  // Expect range padded by 0.25...
539
579
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.25, physicalWidth: true })), ColorDef.green);
540
580
  assert.isTrue(Id64.isValidId64(newId));
541
- imodel.saveChanges();
581
+ saveTestTxn(imodel, true);
542
582
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.25));
543
583
  // LineStyleDefinition: create stroke pattern with dash widths in definition...
544
584
  x = 0.0;
@@ -553,18 +593,18 @@ describe("GeometryStream", () => {
553
593
  lsStrokes.push({ length: 0.1 });
554
594
  lsStrokes.push({ length: 0.25, orgWidth: widthDef, endWidth: widthDef, strokeMode: LineStyleDefinition.StrokeMode.Dash, widthMode: LineStyleDefinition.StrokeWidth.Right });
555
595
  lsStrokes.push({ length: 0.1 });
556
- strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(imodel, { descr: name, strokes: lsStrokes });
557
- styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, name, { compId: strokePatternData.compId, compType: strokePatternData.compType, flags: LineStyleDefinition.StyleFlags.NoSnap });
596
+ strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(txnForCurrentTest(imodel), { descr: name, strokes: lsStrokes });
597
+ styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, name, { compId: strokePatternData.compId, compType: strokePatternData.compType, flags: LineStyleDefinition.StyleFlags.NoSnap });
558
598
  assert.isTrue(Id64.isValidId64(styleId));
559
599
  // Expect range padded by 0.025...
560
600
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId));
561
601
  assert.isTrue(Id64.isValidId64(newId));
562
- imodel.saveChanges();
602
+ saveTestTxn(imodel, true);
563
603
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), widthDef * unitDef));
564
604
  // Expect range padded by 0.25...
565
605
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.25, physicalWidth: true })), ColorDef.red);
566
606
  assert.isTrue(Id64.isValidId64(newId));
567
- imodel.saveChanges();
607
+ saveTestTxn(imodel, true);
568
608
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.25));
569
609
  // LineStyleDefinition: create stroke pattern with dash widths and unit scale specified in definition...
570
610
  x = 0.0;
@@ -572,27 +612,27 @@ describe("GeometryStream", () => {
572
612
  unitDef = 2.0;
573
613
  widthDef = 0.025;
574
614
  name = `StrokePattern-${unitDef}-${widthDef}`;
575
- styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, name, { compId: strokePatternData.compId, compType: strokePatternData.compType, flags: LineStyleDefinition.StyleFlags.NoSnap, unitDef });
615
+ styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, name, { compId: strokePatternData.compId, compType: strokePatternData.compType, flags: LineStyleDefinition.StyleFlags.NoSnap, unitDef });
576
616
  assert.isTrue(Id64.isValidId64(styleId));
577
617
  // Expect range padded by 0.05...
578
618
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId));
579
619
  assert.isTrue(Id64.isValidId64(newId));
580
- imodel.saveChanges();
620
+ saveTestTxn(imodel, true);
581
621
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), widthDef * unitDef));
582
622
  // Expect range padded by 0.25...
583
623
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.25, physicalWidth: true })), ColorDef.red);
584
624
  assert.isTrue(Id64.isValidId64(newId));
585
- imodel.saveChanges();
625
+ saveTestTxn(imodel, true);
586
626
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.25));
587
627
  // Expect range padded by 0.25...
588
628
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.25, scale: 0.5, physicalWidth: true })), ColorDef.green);
589
629
  assert.isTrue(Id64.isValidId64(newId));
590
- imodel.saveChanges();
630
+ saveTestTxn(imodel, true);
591
631
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.25));
592
632
  // Expect range padded by 0.025...
593
633
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ scale: 0.5 })), ColorDef.blue);
594
634
  assert.isTrue(Id64.isValidId64(newId));
595
- imodel.saveChanges();
635
+ saveTestTxn(imodel, true);
596
636
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), widthDef * unitDef * 0.5));
597
637
  // LineStyleDefinition: create point symbol with internal default instead of a stroke pattern...
598
638
  x = 0.0;
@@ -601,25 +641,25 @@ describe("GeometryStream", () => {
601
641
  widthDef = 1.0;
602
642
  name = `PointSymbol-${unitDef}-${widthDef}`;
603
643
  const partId = createCirclePart(0.25, imodel);
604
- let pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(imodel, { geomPartId: partId });
605
- let strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(imodel, { descr: name, lcId: 0, lcType: LineStyleDefinition.ComponentType.Internal, symbols: [{ symId: pointSymbolData.compId, strokeNum: -1, mod1: LineStyleDefinition.SymbolOptions.CurveOrigin }] });
606
- let compoundData = LineStyleDefinition.Utils.createCompoundComponent(imodel, { comps: [{ id: strokePointData.compId, type: strokePointData.compType }, { id: 0, type: LineStyleDefinition.ComponentType.Internal }] });
607
- styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, name, compoundData);
644
+ let pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(txnForCurrentTest(imodel), { geomPartId: partId });
645
+ let strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(txnForCurrentTest(imodel), { descr: name, lcId: 0, lcType: LineStyleDefinition.ComponentType.Internal, symbols: [{ symId: pointSymbolData.compId, strokeNum: -1, mod1: LineStyleDefinition.SymbolOptions.CurveOrigin }] });
646
+ let compoundData = LineStyleDefinition.Utils.createCompoundComponent(txnForCurrentTest(imodel), { comps: [{ id: strokePointData.compId, type: strokePointData.compType }, { id: 0, type: LineStyleDefinition.ComponentType.Internal }] });
647
+ styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, name, compoundData);
608
648
  assert.isTrue(Id64.isValidId64(styleId));
609
649
  // Expect range padded by 0.5 (circle radius)...
610
650
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId));
611
651
  assert.isTrue(Id64.isValidId64(newId));
612
- imodel.saveChanges();
652
+ saveTestTxn(imodel, true);
613
653
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.5));
614
654
  // Expect range padded by 0.25 (scaled circle radius)...
615
655
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ scale: 0.5 })), ColorDef.red);
616
656
  assert.isTrue(Id64.isValidId64(newId));
617
- imodel.saveChanges();
657
+ saveTestTxn(imodel, true);
618
658
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.25));
619
659
  // Expect range padded by 1.0 (width override > symbol size)...
620
660
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 1.0, scale: 0.5, physicalWidth: true })), ColorDef.green);
621
661
  assert.isTrue(Id64.isValidId64(newId));
622
- imodel.saveChanges();
662
+ saveTestTxn(imodel, true);
623
663
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 1.0));
624
664
  // LineStyleDefinition: create scaling point symbol with stroke pattern with width and unit scale specified in definition...
625
665
  x = 0.0;
@@ -627,33 +667,33 @@ describe("GeometryStream", () => {
627
667
  unitDef = 0.5;
628
668
  widthDef = 0.025; // value used for lsStrokes...
629
669
  name = `PointSymbol-${unitDef}-${widthDef}}`;
630
- strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(imodel, { descr: name, strokes: lsStrokes });
631
- pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(imodel, { geomPartId: partId, scale: 2.0 });
670
+ strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(txnForCurrentTest(imodel), { descr: name, strokes: lsStrokes });
671
+ pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(txnForCurrentTest(imodel), { geomPartId: partId, scale: 2.0 });
632
672
  const lsSymbols = [];
633
673
  lsSymbols.push({ symId: pointSymbolData.compId, strokeNum: 1, mod1: LineStyleDefinition.SymbolOptions.Center });
634
674
  lsSymbols.push({ symId: pointSymbolData.compId, strokeNum: 3, mod1: LineStyleDefinition.SymbolOptions.Center });
635
- strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(imodel, { descr: name, lcId: strokePatternData.compId, symbols: lsSymbols });
675
+ strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(txnForCurrentTest(imodel), { descr: name, lcId: strokePatternData.compId, symbols: lsSymbols });
636
676
  const lsComponents = [];
637
677
  lsComponents.push({ id: strokePointData.compId, type: strokePointData.compType });
638
678
  lsComponents.push({ id: strokePatternData.compId, type: strokePatternData.compType });
639
- compoundData = LineStyleDefinition.Utils.createCompoundComponent(imodel, { comps: lsComponents });
679
+ compoundData = LineStyleDefinition.Utils.createCompoundComponent(txnForCurrentTest(imodel), { comps: lsComponents });
640
680
  compoundData.unitDef = unitDef;
641
- styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, name, compoundData);
681
+ styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, name, compoundData);
642
682
  assert.isTrue(Id64.isValidId64(styleId));
643
683
  // Expect range padded by 0.125 (symbol and unit scaled circle radius)......
644
684
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId));
645
685
  assert.isTrue(Id64.isValidId64(newId));
646
- imodel.saveChanges();
686
+ saveTestTxn(imodel, true);
647
687
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.125));
648
688
  // Expect range padded by 0.0625 (symbol and modifier scaled circle radius)...
649
689
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ scale: 0.5 })), ColorDef.red);
650
690
  assert.isTrue(Id64.isValidId64(newId));
651
- imodel.saveChanges();
691
+ saveTestTxn(imodel, true);
652
692
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.0625));
653
693
  // Expect range padded by 0.75 (width override > symbol and modifier scaled symbol size)...
654
694
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.75, scale: 0.5, physicalWidth: true })), ColorDef.green);
655
695
  assert.isTrue(Id64.isValidId64(newId));
656
- imodel.saveChanges();
696
+ saveTestTxn(imodel, true);
657
697
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.75));
658
698
  // LineStyleDefinition: create non-scaling point symbol with stroke pattern with width and unit scale specified in definition...
659
699
  x = 0.0;
@@ -661,33 +701,33 @@ describe("GeometryStream", () => {
661
701
  unitDef = 0.5;
662
702
  widthDef = 0.025; // value used for lsStrokes...
663
703
  name = `NonScalingPointSymbol-${unitDef}-${widthDef}}`;
664
- strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(imodel, { descr: name, strokes: lsStrokes });
665
- pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(imodel, { geomPartId: partId, scale: 2.0, symFlags: LineStyleDefinition.PointSymbolFlags.NoScale });
704
+ strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(txnForCurrentTest(imodel), { descr: name, strokes: lsStrokes });
705
+ pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(txnForCurrentTest(imodel), { geomPartId: partId, scale: 2.0, symFlags: LineStyleDefinition.PointSymbolFlags.NoScale });
666
706
  lsSymbols.length = 0;
667
707
  lsSymbols.push({ symId: pointSymbolData.compId, strokeNum: 1, mod1: LineStyleDefinition.SymbolOptions.Center });
668
708
  lsSymbols.push({ symId: pointSymbolData.compId, strokeNum: 3, mod1: LineStyleDefinition.SymbolOptions.Center });
669
- strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(imodel, { descr: name, lcId: strokePatternData.compId, symbols: lsSymbols });
709
+ strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(txnForCurrentTest(imodel), { descr: name, lcId: strokePatternData.compId, symbols: lsSymbols });
670
710
  lsComponents.length = 0;
671
711
  lsComponents.push({ id: strokePointData.compId, type: strokePointData.compType });
672
712
  lsComponents.push({ id: strokePatternData.compId, type: strokePatternData.compType });
673
- compoundData = LineStyleDefinition.Utils.createCompoundComponent(imodel, { comps: lsComponents });
713
+ compoundData = LineStyleDefinition.Utils.createCompoundComponent(txnForCurrentTest(imodel), { comps: lsComponents });
674
714
  compoundData.unitDef = unitDef;
675
- styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, name, compoundData);
715
+ styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, name, compoundData);
676
716
  assert.isTrue(Id64.isValidId64(styleId));
677
717
  // Expect range padded by 0.5 (circle radius)......
678
718
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId));
679
719
  assert.isTrue(Id64.isValidId64(newId));
680
- imodel.saveChanges();
720
+ saveTestTxn(imodel, true);
681
721
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.5));
682
722
  // Expect range padded by 0.5 (unscaled circle radius)...
683
723
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ scale: 0.5 })), ColorDef.red);
684
724
  assert.isTrue(Id64.isValidId64(newId));
685
- imodel.saveChanges();
725
+ saveTestTxn(imodel, true);
686
726
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.5));
687
727
  // Expect range padded by 0.75 (width override > unscaled symbol size)...
688
728
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.75, scale: 0.5, physicalWidth: true })), ColorDef.green);
689
729
  assert.isTrue(Id64.isValidId64(newId));
690
- imodel.saveChanges();
730
+ saveTestTxn(imodel, true);
691
731
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.75));
692
732
  // LineStyleDefinition: create scaling point symbol with offsets with stroke pattern with width and unit scale specified in definition...
693
733
  x = 0.0;
@@ -695,33 +735,33 @@ describe("GeometryStream", () => {
695
735
  unitDef = 0.5;
696
736
  widthDef = 0.025; // value used for lsStrokes...
697
737
  name = `OffsetPointSymbol-${unitDef}-${widthDef}}`;
698
- strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(imodel, { descr: name, strokes: lsStrokes });
699
- pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(imodel, { geomPartId: partId, scale: 2.0 });
738
+ strokePatternData = LineStyleDefinition.Utils.createStrokePatternComponent(txnForCurrentTest(imodel), { descr: name, strokes: lsStrokes });
739
+ pointSymbolData = LineStyleDefinition.Utils.createPointSymbolComponent(txnForCurrentTest(imodel), { geomPartId: partId, scale: 2.0 });
700
740
  lsSymbols.length = 0;
701
741
  lsSymbols.push({ symId: pointSymbolData.compId, strokeNum: 1, mod1: LineStyleDefinition.SymbolOptions.Center, yOffset: -0.1 });
702
742
  lsSymbols.push({ symId: pointSymbolData.compId, strokeNum: 3, mod1: LineStyleDefinition.SymbolOptions.Center, yOffset: 0.1 });
703
- strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(imodel, { descr: name, lcId: strokePatternData.compId, symbols: lsSymbols });
743
+ strokePointData = LineStyleDefinition.Utils.createStrokePointComponent(txnForCurrentTest(imodel), { descr: name, lcId: strokePatternData.compId, symbols: lsSymbols });
704
744
  lsComponents.length = 0;
705
745
  lsComponents.push({ id: strokePointData.compId, type: strokePointData.compType });
706
746
  lsComponents.push({ id: strokePatternData.compId, type: strokePatternData.compType });
707
- compoundData = LineStyleDefinition.Utils.createCompoundComponent(imodel, { comps: lsComponents });
747
+ compoundData = LineStyleDefinition.Utils.createCompoundComponent(txnForCurrentTest(imodel), { comps: lsComponents });
708
748
  compoundData.unitDef = unitDef;
709
- styleId = LineStyleDefinition.Utils.createStyle(imodel, IModel.dictionaryId, name, compoundData);
749
+ styleId = LineStyleDefinition.Utils.createStyle(txnForCurrentTest(imodel), IModel.dictionaryId, name, compoundData);
710
750
  assert.isTrue(Id64.isValidId64(styleId));
711
751
  // Expect range padded by 0.225 (offset symbol and unit scaled circle radius)......
712
752
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId));
713
753
  assert.isTrue(Id64.isValidId64(newId));
714
- imodel.saveChanges();
754
+ saveTestTxn(imodel, true);
715
755
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.225));
716
756
  // Expect range padded by 0.1125 (offset symbol and modifier scaled circle radius)...
717
757
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ scale: 0.5 })), ColorDef.red);
718
758
  assert.isTrue(Id64.isValidId64(newId));
719
- imodel.saveChanges();
759
+ saveTestTxn(imodel, true);
720
760
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.1125));
721
761
  // Expect range padded by 0.75 (width override > symbol and modifier scaled symbol size)...
722
762
  newId = createStyledLineElem(imodel, seedElement, x++, y, 1.0, new LineStyle.Info(styleId, new LineStyle.Modifier({ startWidth: 0.75, scale: 0.5, physicalWidth: true })), ColorDef.green);
723
763
  assert.isTrue(Id64.isValidId64(newId));
724
- imodel.saveChanges();
764
+ saveTestTxn(imodel, true);
725
765
  assert.isTrue(Geometry.isSameCoordinate(Placement3d.fromJSON(imodel.elements.getElementProps({ id: newId, wantGeometry: true }).placement).bbox.yLength(), 0.75));
726
766
  });
727
767
  it("create GeometricElement3d using shapes with fill/gradient", async () => {
@@ -783,9 +823,9 @@ describe("GeometryStream", () => {
783
823
  shape.tryTransformInPlace(xOffset);
784
824
  builder.appendGeometry(shape);
785
825
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
786
- const newId = imodel.elements.insertElement(elementProps);
826
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
787
827
  assert.isTrue(Id64.isValidId64(newId));
788
- imodel.saveChanges();
828
+ saveTestTxn(imodel, true);
789
829
  // Extract and test value returned...
790
830
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
791
831
  assert.isDefined(value.geom);
@@ -860,7 +900,7 @@ describe("GeometryStream", () => {
860
900
  const partBuilder = new GeometryStreamBuilder();
861
901
  partBuilder.appendGeometry(Arc3d.createXY(Point3d.createZero(), 0.05));
862
902
  const partProps = createGeometryPartProps(partBuilder.geometryStream);
863
- const partId = imodel.elements.insertElement(partProps);
903
+ const partId = txnForCurrentTest(imodel).insertElement(partProps);
864
904
  assert.isTrue(Id64.isValidId64(partId));
865
905
  // Area pattern w/o overrides
866
906
  params.pattern = new AreaPattern.Params();
@@ -896,9 +936,9 @@ describe("GeometryStream", () => {
896
936
  shape.tryTransformInPlace(xOffset);
897
937
  builder.appendGeometry(shape);
898
938
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
899
- const newId = imodel.elements.insertElement(elementProps);
939
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
900
940
  assert.isTrue(Id64.isValidId64(newId));
901
- imodel.saveChanges();
941
+ saveTestTxn(imodel, true);
902
942
  // Extract and test value returned...
903
943
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
904
944
  assert.isDefined(value.geom);
@@ -937,8 +977,8 @@ describe("GeometryStream", () => {
937
977
  const seedElement = imodel.elements.getElement("0x1d");
938
978
  assert.exists(seedElement);
939
979
  const subCategory = SubCategory.create(imodel, seedElement.category, "testSubCat", { weight: 2 });
940
- const subCategoryId = imodel.elements.insertElement(subCategory.toJSON());
941
- imodel.saveChanges();
980
+ const subCategoryId = txnForCurrentTest(imodel).insertElement(subCategory.toJSON());
981
+ saveTestTxn(imodel, true);
942
982
  const params = new GeometryParams(seedElement.category);
943
983
  params.subCategoryId = subCategoryId;
944
984
  params.materialId = "0x5";
@@ -949,9 +989,9 @@ describe("GeometryStream", () => {
949
989
  builderF.appendGeometryQuery(shape);
950
990
  const elementPropsF = createPhysicalElementProps(seedElement);
951
991
  elementPropsF.elementGeometryBuilderParams = { entryArray: builderF.entries };
952
- const newIdF = imodel.elements.insertElement(elementPropsF);
992
+ const newIdF = txnForCurrentTest(imodel).insertElement(elementPropsF);
953
993
  assert.isTrue(Id64.isValidId64(newIdF));
954
- imodel.saveChanges();
994
+ saveTestTxn(imodel, true);
955
995
  const onGeometry = (info) => {
956
996
  assert.isTrue(undefined !== info.entryArray);
957
997
  const it = new ElementGeometry.Iterator(info);
@@ -970,9 +1010,9 @@ describe("GeometryStream", () => {
970
1010
  builderJ.appendGeometry(shape);
971
1011
  const elementPropsJ = createPhysicalElementProps(seedElement);
972
1012
  elementPropsJ.geom = builderJ.geometryStream;
973
- const newIdJ = imodel.elements.insertElement(elementPropsJ);
1013
+ const newIdJ = txnForCurrentTest(imodel).insertElement(elementPropsJ);
974
1014
  assert.isTrue(Id64.isValidId64(newIdJ));
975
- imodel.saveChanges();
1015
+ saveTestTxn(imodel, true);
976
1016
  const value = imodel.elements.getElementProps({ id: newIdJ, wantGeometry: true });
977
1017
  assert.isDefined(value.geom);
978
1018
  const itLocal = new GeometryStreamIterator(value.geom, value.category);
@@ -1005,8 +1045,8 @@ describe("GeometryStream", () => {
1005
1045
  assert.isTrue(status);
1006
1046
  const elementProps = createPhysicalElementProps(seedElement, { origin: testOrigin, angles: testAngles }, builder.geometryStream);
1007
1047
  const testElem = imodel.elements.createElement(elementProps);
1008
- const newId = imodel.elements.insertElement(testElem.toJSON());
1009
- imodel.saveChanges();
1048
+ const newId = txnForCurrentTest(imodel).insertElement(testElem.toJSON());
1049
+ saveTestTxn(imodel, true);
1010
1050
  // Extract and test value returned, text transform should now be identity as it is accounted for by element's placement...
1011
1051
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
1012
1052
  assert.isDefined(value.geom);
@@ -1054,8 +1094,8 @@ describe("GeometryStream", () => {
1054
1094
  }
1055
1095
  const partProps = createGeometryPartProps(partBuilder.geometryStream);
1056
1096
  const testPart = imodel.elements.createElement(partProps);
1057
- const partId = imodel.elements.insertElement(testPart.toJSON());
1058
- imodel.saveChanges();
1097
+ const partId = txnForCurrentTest(imodel).insertElement(testPart.toJSON());
1098
+ saveTestTxn(imodel, true);
1059
1099
  // Extract and test value returned
1060
1100
  const value = imodel.elements.getElementProps({ id: partId, wantGeometry: true });
1061
1101
  assert.isDefined(value.geom);
@@ -1090,8 +1130,8 @@ describe("GeometryStream", () => {
1090
1130
  }
1091
1131
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
1092
1132
  const testElem = imodel.elements.createElement(elementProps);
1093
- const newId = imodel.elements.insertElement(testElem.toJSON());
1094
- imodel.saveChanges();
1133
+ const newId = txnForCurrentTest(imodel).insertElement(testElem.toJSON());
1134
+ saveTestTxn(imodel, true);
1095
1135
  // Extract and test value returned
1096
1136
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
1097
1137
  assert.isDefined(value.geom);
@@ -1117,8 +1157,8 @@ describe("GeometryStream", () => {
1117
1157
  partBuilder.appendGeometry(arc);
1118
1158
  const partProps = createGeometryPartProps(partBuilder.geometryStream);
1119
1159
  const testPart = imodel.elements.createElement(partProps);
1120
- const partId = imodel.elements.insertElement(testPart.toJSON());
1121
- imodel.saveChanges();
1160
+ const partId = txnForCurrentTest(imodel).insertElement(testPart.toJSON());
1161
+ saveTestTxn(imodel, true);
1122
1162
  const builder = new GeometryStreamBuilder();
1123
1163
  const shapePts = [Point3d.create(1, 1, 0), Point3d.create(2, 1, 0), Point3d.create(2, 2, 0), Point3d.create(1, 2, 0)];
1124
1164
  const testOrigin = Point3d.create(0.5, 0.5, 0);
@@ -1128,8 +1168,8 @@ describe("GeometryStream", () => {
1128
1168
  shapePts.forEach((pt) => builder.appendGeometryPart3d(partId, pt, undefined, 0.25)); // Position part (arc center) at each vertex...
1129
1169
  const elementProps = createPhysicalElementProps(seedElement, { origin: testOrigin, angles: testAngles }, builder.geometryStream);
1130
1170
  const testElem = imodel.elements.createElement(elementProps);
1131
- const newId = imodel.elements.insertElement(testElem.toJSON());
1132
- imodel.saveChanges();
1171
+ const newId = txnForCurrentTest(imodel).insertElement(testElem.toJSON());
1172
+ saveTestTxn(imodel, true);
1133
1173
  // Extract and test value returned
1134
1174
  const valueElem = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
1135
1175
  assert.isDefined(valueElem.geom);
@@ -1165,9 +1205,9 @@ describe("GeometryStream", () => {
1165
1205
  builder.appendGeometryParamsChange(params);
1166
1206
  builder.appendGeometry(shape);
1167
1207
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
1168
- const newId = imodel.elements.insertElement(elementProps);
1208
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1169
1209
  assert.isTrue(Id64.isValidId64(newId));
1170
- imodel.saveChanges();
1210
+ saveTestTxn(imodel, true);
1171
1211
  // Extract and test value returned...
1172
1212
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
1173
1213
  assert.isDefined(value.geom);
@@ -1205,8 +1245,8 @@ describe("GeometryStream", () => {
1205
1245
  builder.appendBRepData(brepProps);
1206
1246
  const elementProps = createPhysicalElementProps(seedElement, { origin: testOrigin, angles: testAngles }, builder.geometryStream);
1207
1247
  const testElem = imodel.elements.createElement(elementProps);
1208
- const newId = imodel.elements.insertElement(testElem.toJSON());
1209
- imodel.saveChanges();
1248
+ const newId = txnForCurrentTest(imodel).insertElement(testElem.toJSON());
1249
+ saveTestTxn(imodel, true);
1210
1250
  // Extract and test value returned
1211
1251
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true, wantBRepData: true });
1212
1252
  assert.isDefined(value.geom);
@@ -1241,7 +1281,7 @@ describe("GeometryStream", () => {
1241
1281
  const newId = createGeometricElem(builder.geometryStream, { origin: testOrigin, angles: testAngles }, imodel, seedElement);
1242
1282
  timer.end();
1243
1283
  assert.isTrue(Id64.isValidId64(newId));
1244
- imodel.saveChanges();
1284
+ saveTestTxn(imodel, true);
1245
1285
  timer = new Timer("queryGeometricElem");
1246
1286
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
1247
1287
  assert.isDefined(value.geom);
@@ -1266,8 +1306,8 @@ describe("GeometryStream", () => {
1266
1306
  expect((iter.flags === GeometryStreamFlags.ViewIndependent)).to.equal(builder.isViewIndependent);
1267
1307
  const partProps = createGeometryPartProps(builder.geometryStream);
1268
1308
  const part = imodel.elements.createElement(partProps);
1269
- const partId = imodel.elements.insertElement(part.toJSON());
1270
- imodel.saveChanges();
1309
+ const partId = txnForCurrentTest(imodel).insertElement(part.toJSON());
1310
+ saveTestTxn(imodel, true);
1271
1311
  const json = imodel.elements.getElementProps({ id: partId, wantGeometry: true });
1272
1312
  expect(json.geom).not.to.be.undefined;
1273
1313
  expect(json.geom.length).to.equal(2);
@@ -1301,8 +1341,15 @@ describe("ElementGeometry", () => {
1301
1341
  imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);
1302
1342
  });
1303
1343
  after(() => {
1344
+ closeTestTxn(imodel);
1304
1345
  imodel.close();
1305
1346
  });
1347
+ beforeEach(() => {
1348
+ txnForCurrentTest(imodel, "fresh");
1349
+ });
1350
+ afterEach(() => {
1351
+ closeTestTxn(imodel);
1352
+ });
1306
1353
  it("Exercise using builder/iterator in world coordinates with flatbuffer data", async () => {
1307
1354
  const testOrigin = Point3d.create(5, 10, 0);
1308
1355
  const testAngles = YawPitchRollAngles.createDegrees(90, 0, 0);
@@ -1374,9 +1421,9 @@ describe("ElementGeometry", () => {
1374
1421
  newEntries.push(entryEL);
1375
1422
  expected.push({ opcode: ElementGeometryOpcode.ArcPrimitive, geometryCategory: "curveCollection", geometrySubCategory: "loop" });
1376
1423
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1377
- const newId = imodel.elements.insertElement(elementProps);
1424
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1378
1425
  assert.isTrue(Id64.isValidId64(newId));
1379
- imodel.saveChanges();
1426
+ saveTestTxn(imodel, true);
1380
1427
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1381
1428
  });
1382
1429
  it("create GeometricElement3d from local coordinate interpolation curve flatbuffer data", async () => {
@@ -1403,9 +1450,9 @@ describe("ElementGeometry", () => {
1403
1450
  newEntries.push(entry1);
1404
1451
  expected.push({ opcode: ElementGeometryOpcode.CurvePrimitive, geometryCategory: "curvePrimitive" });
1405
1452
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1406
- const newId = imodel.elements.insertElement(elementProps);
1453
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1407
1454
  assert.isTrue(Id64.isValidId64(newId));
1408
- imodel.saveChanges();
1455
+ saveTestTxn(imodel, true);
1409
1456
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1410
1457
  });
1411
1458
  it("create GeometricElement3d with local coordinate indexed polyface flatbuffer data", async () => {
@@ -1429,9 +1476,9 @@ describe("ElementGeometry", () => {
1429
1476
  const testAngles = YawPitchRollAngles.createDegrees(90, 0, 0);
1430
1477
  const elementProps = createPhysicalElementProps(seedElement, { origin: testOrigin, angles: testAngles });
1431
1478
  elementProps.elementGeometryBuilderParams = { entryArray: builder.entries };
1432
- const newId = imodel.elements.insertElement(elementProps);
1479
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1433
1480
  assert.isTrue(Id64.isValidId64(newId));
1434
- imodel.saveChanges();
1481
+ saveTestTxn(imodel, true);
1435
1482
  timer.end();
1436
1483
  const onGeometry = (info) => {
1437
1484
  assert.isTrue(6 === info.entryArray.length); // 3 pairs of sub-range + polyface...
@@ -1478,9 +1525,9 @@ describe("ElementGeometry", () => {
1478
1525
  expectedFacet.push({ opcode: ElementGeometryOpcode.BasicSymbology });
1479
1526
  expectedFacet.push({ opcode: ElementGeometryOpcode.Polyface, geometryCategory: "polyface" });
1480
1527
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1481
- const newId = imodel.elements.insertElement(elementProps);
1528
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1482
1529
  assert.isTrue(Id64.isValidId64(newId));
1483
- imodel.saveChanges();
1530
+ saveTestTxn(imodel, true);
1484
1531
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1485
1532
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expectedFacet, false, undefined, 1));
1486
1533
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expectedSkip, false, undefined, 2));
@@ -1514,9 +1561,9 @@ describe("ElementGeometry", () => {
1514
1561
  expectedFacet.push({ opcode: ElementGeometryOpcode.BasicSymbology });
1515
1562
  expectedFacet.push({ opcode: ElementGeometryOpcode.Polyface, geometryCategory: "polyface" });
1516
1563
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1517
- const newId = imodel.elements.insertElement(elementProps);
1564
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1518
1565
  assert.isTrue(Id64.isValidId64(newId));
1519
- imodel.saveChanges();
1566
+ saveTestTxn(imodel, true);
1520
1567
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expectedFacet, false, undefined, 1));
1521
1568
  });
1522
1569
  it("test BRep entity transform", async () => {
@@ -1594,9 +1641,9 @@ describe("ElementGeometry", () => {
1594
1641
  assert.deepEqual(entry ? ElementGeometry.toTextStringGlyphData(entry) : undefined, glyphData);
1595
1642
  expected.push({ opcode: ElementGeometryOpcode.TextString, originalEntry: entry });
1596
1643
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1597
- const newId = imodel.elements.insertElement(elementProps);
1644
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1598
1645
  assert.isTrue(Id64.isValidId64(newId));
1599
- imodel.saveChanges();
1646
+ saveTestTxn(imodel, true);
1600
1647
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1601
1648
  });
1602
1649
  it("create GeometricElement3d from local coordinate image flatbuffer data", async () => {
@@ -1619,9 +1666,9 @@ describe("ElementGeometry", () => {
1619
1666
  newEntries.push(entry);
1620
1667
  expected.push({ opcode: ElementGeometryOpcode.Image, originalEntry: entry });
1621
1668
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1622
- const newId = imodel.elements.insertElement(elementProps);
1669
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1623
1670
  assert.isTrue(Id64.isValidId64(newId));
1624
- imodel.saveChanges();
1671
+ saveTestTxn(imodel, true);
1625
1672
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1626
1673
  });
1627
1674
  it("create GeometricElement3d with sub-graphic ranges flatbuffer data", async () => {
@@ -1652,9 +1699,9 @@ describe("ElementGeometry", () => {
1652
1699
  newEntries.push(entryL2);
1653
1700
  expected.push({ opcode: ElementGeometryOpcode.PointPrimitive, geometryCategory: "curvePrimitive", geometrySubCategory: "lineString" });
1654
1701
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1655
- const newId = imodel.elements.insertElement(elementProps);
1702
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1656
1703
  assert.isTrue(Id64.isValidId64(newId));
1657
- imodel.saveChanges();
1704
+ saveTestTxn(imodel, true);
1658
1705
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1659
1706
  });
1660
1707
  it("create GeometricElement3d with part reference flatbuffer data", async () => {
@@ -1670,9 +1717,9 @@ describe("ElementGeometry", () => {
1670
1717
  newPartEntries.push(entryAR);
1671
1718
  expectedPart.push({ opcode: ElementGeometryOpcode.ArcPrimitive, geometryCategory: "curvePrimitive", geometrySubCategory: "arc" });
1672
1719
  partProps.elementGeometryBuilderParams = { entryArray: newPartEntries };
1673
- const partId = imodel.elements.insertElement(partProps);
1720
+ const partId = txnForCurrentTest(imodel).insertElement(partProps);
1674
1721
  assert.isTrue(Id64.isValidId64(partId));
1675
- imodel.saveChanges();
1722
+ saveTestTxn(imodel, true);
1676
1723
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, partId, expectedPart, false));
1677
1724
  const testOrigin = Point3d.create(5, 10, 0);
1678
1725
  const testAngles = YawPitchRollAngles.createDegrees(90, 0, 0);
@@ -1715,9 +1762,9 @@ describe("ElementGeometry", () => {
1715
1762
  newEntries.push(entryPA);
1716
1763
  expected.push({ opcode: ElementGeometryOpcode.PartReference, originalEntry: entryPA });
1717
1764
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1718
- const newId = imodel.elements.insertElement(elementProps);
1765
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1719
1766
  assert.isTrue(Id64.isValidId64(newId));
1720
- imodel.saveChanges();
1767
+ saveTestTxn(imodel, true);
1721
1768
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1722
1769
  });
1723
1770
  it("create GeometricElement3d with appearance flatbuffer data", async () => {
@@ -1822,9 +1869,9 @@ describe("ElementGeometry", () => {
1822
1869
  newEntries.push(entryLN);
1823
1870
  expected.push({ opcode: ElementGeometryOpcode.PointPrimitive, geometryCategory: "curvePrimitive", geometrySubCategory: "lineString" });
1824
1871
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1825
- const newId = imodel.elements.insertElement(elementProps);
1872
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1826
1873
  assert.isTrue(Id64.isValidId64(newId));
1827
- imodel.saveChanges();
1874
+ saveTestTxn(imodel, true);
1828
1875
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1829
1876
  });
1830
1877
  it("create GeometricElement3d with pattern flatbuffer data", async () => {
@@ -1916,9 +1963,9 @@ describe("ElementGeometry", () => {
1916
1963
  newEntries.push(entrySH);
1917
1964
  expected.push({ opcode: ElementGeometryOpcode.PointPrimitive, geometryCategory: "curveCollection", geometrySubCategory: "loop" });
1918
1965
  elementProps.elementGeometryBuilderParams = { entryArray: newEntries };
1919
- const newId = imodel.elements.insertElement(elementProps);
1966
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
1920
1967
  assert.isTrue(Id64.isValidId64(newId));
1921
- imodel.saveChanges();
1968
+ saveTestTxn(imodel, true);
1922
1969
  assert(IModelStatus.Success === doElementGeometryValidate(imodel, newId, expected, false, elementProps));
1923
1970
  });
1924
1971
  it("should transform PatternParams", () => {
@@ -1953,7 +2000,7 @@ describe("ElementGeometry", () => {
1953
2000
  // geom: geomBuilder.geometryStream,
1954
2001
  elementGeometryBuilderParams: { entryArray: [entryLN], viewIndependent: false },
1955
2002
  };
1956
- const spatialElementId = imodel.elements.insertElement(elemProps);
2003
+ const spatialElementId = txnForCurrentTest(imodel).insertElement(elemProps);
1957
2004
  let persistentProps = imodel.elements.getElementProps({ id: spatialElementId, wantGeometry: true });
1958
2005
  assert.isDefined(persistentProps.geom);
1959
2006
  assert.isTrue(persistentProps.placement !== undefined);
@@ -1969,12 +2016,12 @@ describe("ElementGeometry", () => {
1969
2016
  }
1970
2017
  // Insert - various failure cases
1971
2018
  elemProps.elementGeometryBuilderParams = { entryArray: [{ opcode: 9999 }] };
1972
- expect(() => imodel.elements.insertElement(elemProps)).to.throw(); // TODO: check error message
2019
+ expect(() => txnForCurrentTest(imodel).insertElement(elemProps)).to.throw(); // TODO: check error message
1973
2020
  elemProps.elementGeometryBuilderParams = { entryArray: [{ opcode: ElementGeometryOpcode.ArcPrimitive, data: undefined }] };
1974
- expect(() => imodel.elements.insertElement(elemProps)).to.throw(); // TODO: check error message
2021
+ expect(() => txnForCurrentTest(imodel).insertElement(elemProps)).to.throw(); // TODO: check error message
1975
2022
  // Update
1976
2023
  persistentProps.elementGeometryBuilderParams = { entryArray: [entryAR] };
1977
- imodel.elements.updateElement(persistentProps);
2024
+ txnForCurrentTest(imodel).updateElement(persistentProps);
1978
2025
  persistentProps = imodel.elements.getElementProps({ id: spatialElementId, wantGeometry: true });
1979
2026
  assert.isDefined(persistentProps.geom);
1980
2027
  assert.isTrue(persistentProps.placement !== undefined);
@@ -1998,7 +2045,7 @@ describe("ElementGeometry", () => {
1998
2045
  code: Code.createEmpty(),
1999
2046
  elementGeometryBuilderParams: { entryArray: [entryLN], is2dPart: false },
2000
2047
  };
2001
- const partId = imodel.elements.insertElement(partProps);
2048
+ const partId = txnForCurrentTest(imodel).insertElement(partProps);
2002
2049
  let persistentPartProps = imodel.elements.getElementProps({ id: partId, wantGeometry: true });
2003
2050
  assert.isDefined(persistentPartProps.geom);
2004
2051
  for (const entry of new GeometryStreamIterator(persistentPartProps.geom)) {
@@ -2010,7 +2057,7 @@ describe("ElementGeometry", () => {
2010
2057
  }
2011
2058
  // Update
2012
2059
  persistentPartProps.elementGeometryBuilderParams = { entryArray: [entryAR] };
2013
- imodel.elements.updateElement(persistentPartProps);
2060
+ txnForCurrentTest(imodel).updateElement(persistentPartProps);
2014
2061
  persistentPartProps = imodel.elements.getElementProps({ id: partId, wantGeometry: true });
2015
2062
  assert.isDefined(persistentPartProps.geom);
2016
2063
  for (const entry of new GeometryStreamIterator(persistentPartProps.geom)) {
@@ -2026,13 +2073,13 @@ describe("ElementGeometry", () => {
2026
2073
  assert.exists(seedElement);
2027
2074
  assert.isTrue(seedElement.federationGuid === "18eb4650-b074-414f-b961-d9cfaa6c8746");
2028
2075
  const newId = createCircleElem(1.0, Point3d.create(5, 5, 0), YawPitchRollAngles.createDegrees(90, 0, 0), imodel, seedElement);
2029
- imodel.saveChanges();
2076
+ saveTestTxn(imodel, true);
2030
2077
  const newElemProps = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
2031
2078
  assert.isDefined(newElemProps.geom);
2032
2079
  assert.isTrue(newElemProps.placement !== undefined);
2033
2080
  newElemProps.elementGeometryBuilderParams = { entryArray: [] };
2034
- imodel.elements.updateElement(newElemProps);
2035
- imodel.saveChanges();
2081
+ txnForCurrentTest(imodel).updateElement(newElemProps);
2082
+ saveTestTxn(imodel, true);
2036
2083
  const updateElemProps = imodel.elements.getElementProps({ id: newId, wantGeometry: true });
2037
2084
  assert.isUndefined(updateElemProps.geom);
2038
2085
  assert.isTrue(updateElemProps.placement !== undefined);
@@ -2108,9 +2155,9 @@ describe("BRepGeometry", () => {
2108
2155
  const testAngles = YawPitchRollAngles.createDegrees(90, 0, 0);
2109
2156
  const elementProps = createPhysicalElementProps(seedElement, { origin: testOrigin, angles: testAngles });
2110
2157
  elementProps.elementGeometryBuilderParams = { entryArray: builder.entries };
2111
- const newId = imodel.elements.insertElement(elementProps);
2158
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
2112
2159
  assert.isTrue(Id64.isValidId64(newId));
2113
- imodel.saveChanges();
2160
+ saveTestTxn(imodel, true);
2114
2161
  });
2115
2162
  it("create GeometricElement3d using half-space boolean test", async () => {
2116
2163
  const seedElement = imodel.elements.getElement("0x1d");
@@ -2160,9 +2207,9 @@ describe("BRepGeometry", () => {
2160
2207
  const testAngles = YawPitchRollAngles.createDegrees(90, 0, 0);
2161
2208
  const elementProps = createPhysicalElementProps(seedElement, { origin: testOrigin, angles: testAngles });
2162
2209
  elementProps.elementGeometryBuilderParams = { entryArray: builder.entries };
2163
- const newId = imodel.elements.insertElement(elementProps);
2210
+ const newId = txnForCurrentTest(imodel).insertElement(elementProps);
2164
2211
  assert.isTrue(Id64.isValidId64(newId));
2165
- imodel.saveChanges();
2212
+ saveTestTxn(imodel, true);
2166
2213
  });
2167
2214
  it("create multiple GeometricElement3d from local coordinate disjoint body result test", async () => {
2168
2215
  const builder = new ElementGeometry.Builder();
@@ -2525,8 +2572,8 @@ describe("BRepGeometry", () => {
2525
2572
  gsBuilder.appendBRepData(brep);
2526
2573
  const elementProps = createPhysicalElementProps(seedElement, { origin: Point3d.create(5, 10, 0), angles: YawPitchRollAngles.createDegrees(45, 0, 0) }, gsBuilder.geometryStream);
2527
2574
  const testElem = imodel.elements.createElement(elementProps);
2528
- const newId = imodel.elements.insertElement(testElem.toJSON());
2529
- imodel.saveChanges();
2575
+ const newId = txnForCurrentTest(imodel).insertElement(testElem.toJSON());
2576
+ saveTestTxn(imodel, true);
2530
2577
  // Extract and test value returned
2531
2578
  const value = imodel.elements.getElementProps({ id: newId, wantGeometry: true, wantBRepData: true });
2532
2579
  assert.isDefined(value.geom);
@@ -2570,8 +2617,8 @@ describe("Mass Properties", () => {
2570
2617
  builder.appendGeometry(box);
2571
2618
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
2572
2619
  const testElem = imodel.elements.createElement(elementProps);
2573
- const newId = imodel.elements.insertElement(testElem.toJSON());
2574
- imodel.saveChanges();
2620
+ const newId = txnForCurrentTest(imodel).insertElement(testElem.toJSON());
2621
+ saveTestTxn(imodel, true);
2575
2622
  const requestProps = {
2576
2623
  operation: MassPropertiesOperation.AccumulateVolumes,
2577
2624
  candidates: [newId],
@@ -2592,8 +2639,8 @@ describe("Mass Properties", () => {
2592
2639
  builder.appendGeometry(shape);
2593
2640
  const elementProps = createPhysicalElementProps(seedElement, undefined, builder.geometryStream);
2594
2641
  const testElem = imodel.elements.createElement(elementProps);
2595
- const newId = imodel.elements.insertElement(testElem.toJSON());
2596
- imodel.saveChanges();
2642
+ const newId = txnForCurrentTest(imodel).insertElement(testElem.toJSON());
2643
+ saveTestTxn(imodel, true);
2597
2644
  const requestProps = {
2598
2645
  operation: MassPropertiesOperation.AccumulateAreas,
2599
2646
  candidates: [newId],
@@ -2626,7 +2673,7 @@ describe("Geometry Containment", () => {
2626
2673
  const cornerOverlapId = createCircleElem(1.0, Point3d.create(10, 10, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2627
2674
  const rangeOvrGeomOutId = createCircleElem(1.25, Point3d.create(11, -1, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2628
2675
  const rangeOvrGeomInId = createCircleElem(0.85, Point3d.create(5, 9, 0), YawPitchRollAngles.createDegrees(45, 0, 0), imodel, seedElement);
2629
- imodel.saveChanges();
2676
+ saveTestTxn(imodel, true);
2630
2677
  const range = Range3d.create(Point3d.create(0, 0, -5), Point3d.create(10, 10, 5));
2631
2678
  const clip = ClipVector.createEmpty();
2632
2679
  const block = ClipShape.createBlock(range, ClipMaskXYZRangePlanes.All, false, false);
@@ -2663,7 +2710,7 @@ describe("Geometry Containment", () => {
2663
2710
  const cornerOverlapId = createSphereElem(1.0, Point3d.create(10, 10, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2664
2711
  const rangeOvrGeomOutId = createSphereElem(1.25, Point3d.create(11, -1, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2665
2712
  const rangeOvrGeomInId = createSphereElem(0.85, Point3d.create(5, 9, 0), YawPitchRollAngles.createDegrees(45, 0, 0), imodel, seedElement);
2666
- imodel.saveChanges();
2713
+ saveTestTxn(imodel, true);
2667
2714
  const range = Range3d.create(Point3d.create(0, 0, -5), Point3d.create(10, 10, 5));
2668
2715
  const clip = ClipVector.createEmpty();
2669
2716
  const block = ClipShape.createBlock(range, ClipMaskXYZRangePlanes.All, false, false);
@@ -2711,7 +2758,7 @@ describe("Geometry Containment", () => {
2711
2758
  const cornerOverlapRId = createPartElem(partAId, Point3d.create(10, 10, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement, true);
2712
2759
  const rangeOvrGeomOutRId = createPartElem(partBId, Point3d.create(11, -1, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement, true);
2713
2760
  const rangeOvrGeomInRId = createPartElem(partCId, Point3d.create(5, 9, 0), YawPitchRollAngles.createDegrees(45, 0, 0), imodel, seedElement, true);
2714
- imodel.saveChanges();
2761
+ saveTestTxn(imodel, true);
2715
2762
  const range = Range3d.create(Point3d.create(0, 0, -5), Point3d.create(10, 10, 5));
2716
2763
  const clip = ClipVector.createEmpty();
2717
2764
  const block = ClipShape.createBlock(range, ClipMaskXYZRangePlanes.All, false, false);
@@ -2746,7 +2793,7 @@ describe("Geometry Containment", () => {
2746
2793
  const primOutConsInId = createDisjointCirclesElem(1.0, Point3d.create(0, 5, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2747
2794
  const primInConsInId = createDisjointCirclesElem(1.0, Point3d.create(5, 5, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2748
2795
  const primOvrConsOvrId = createDisjointCirclesElem(1.0, Point3d.create(5, 10, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2749
- imodel.saveChanges();
2796
+ saveTestTxn(imodel, true);
2750
2797
  const range = Range3d.create(Point3d.create(0, 0, -5), Point3d.create(10, 10, 5));
2751
2798
  const clip = ClipVector.createEmpty();
2752
2799
  const block = ClipShape.createBlock(range, ClipMaskXYZRangePlanes.All, false, false);
@@ -2795,7 +2842,7 @@ describe("Geometry Containment", () => {
2795
2842
  const rangeInsideXId = createCircleElem(1.0, Point3d.create(7.5, 2.5, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2796
2843
  const rangeOutsideId = createCircleElem(1.0, Point3d.create(7.5, 7.5, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2797
2844
  const rangeOvrGeomOvrId = createCircleElem(1.0, Point3d.create(5, 5, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2798
- imodel.saveChanges();
2845
+ saveTestTxn(imodel, true);
2799
2846
  const clipShapePts = [];
2800
2847
  clipShapePts.push(Point3d.create(0, 0, 0));
2801
2848
  clipShapePts.push(Point3d.create(10, 0, 0));
@@ -2830,7 +2877,7 @@ describe("Geometry Containment", () => {
2830
2877
  const rangeInsideXId = createSphereElem(1.0, Point3d.create(7.5, 2.5, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2831
2878
  const rangeOutsideId = createSphereElem(1.0, Point3d.create(7.5, 7.5, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2832
2879
  const rangeOvrGeomOvrId = createSphereElem(1.0, Point3d.create(5, 5, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2833
- imodel.saveChanges();
2880
+ saveTestTxn(imodel, true);
2834
2881
  const clipShapePts = [];
2835
2882
  clipShapePts.push(Point3d.create(0, 0, 0));
2836
2883
  clipShapePts.push(Point3d.create(10, 0, 0));
@@ -2863,7 +2910,7 @@ describe("Geometry Containment", () => {
2863
2910
  const rangeInsideId = createCircleElem(1.0, Point3d.create(0, 0, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2864
2911
  const rangeOutsideId = createCircleElem(1.0, Point3d.create(10, 0, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2865
2912
  const rangeOverlapId = createCircleElem(1.0, Point3d.create(5, 0, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2866
- imodel.saveChanges();
2913
+ saveTestTxn(imodel, true);
2867
2914
  const plane = Plane3dByOriginAndUnitNormal.create(Point3d.create(5, 0, 0), Vector3d.create(-1, 0, 0)); // inward normal...
2868
2915
  const planeSet = ConvexClipPlaneSet.createEmpty();
2869
2916
  planeSet.addPlaneToConvexSet(ClipPlane.createPlane(plane));
@@ -2892,7 +2939,7 @@ describe("Geometry Containment", () => {
2892
2939
  const rangeInsideId = createSphereElem(1.0, Point3d.create(0, 0, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2893
2940
  const rangeOutsideId = createSphereElem(1.0, Point3d.create(10, 0, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2894
2941
  const rangeOverlapId = createSphereElem(1.0, Point3d.create(5, 0, 0), YawPitchRollAngles.createDegrees(0, 0, 0), imodel, seedElement);
2895
- imodel.saveChanges();
2942
+ saveTestTxn(imodel, true);
2896
2943
  const plane = Plane3dByOriginAndUnitNormal.create(Point3d.create(5, 0, 0), Vector3d.create(-1, 0, 0)); // inward normal...
2897
2944
  const planeSet = ConvexClipPlaneSet.createEmpty();
2898
2945
  planeSet.addPlaneToConvexSet(ClipPlane.createPlane(plane));