@itwin/core-backend 5.9.0-dev.1 → 5.9.0-dev.11

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 (752) hide show
  1. package/CHANGELOG.md +30 -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 +74 -23
  79. package/lib/cjs/IModelDb.d.ts.map +1 -1
  80. package/lib/cjs/IModelDb.js +193 -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 +35 -15
  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 +74 -23
  331. package/lib/esm/IModelDb.d.ts.map +1 -1
  332. package/lib/esm/IModelDb.js +195 -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 +36 -16
  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 +112 -0
  500. package/lib/esm/test/IpcHost.test.js.map +1 -1
  501. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  502. package/lib/esm/test/PrintElementTree.js.map +1 -1
  503. package/lib/esm/test/PropertyDb.test.js +2 -2
  504. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  505. package/lib/esm/test/RevisionUtility.js.map +1 -1
  506. package/lib/esm/test/SchemaUtils.test.js +25 -25
  507. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  508. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  509. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +156 -147
  510. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  511. package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -1
  512. package/lib/esm/test/TestChangeSetUtility.js +11 -7
  513. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  514. package/lib/esm/test/TestEditTxn.d.ts +8 -0
  515. package/lib/esm/test/TestEditTxn.d.ts.map +1 -0
  516. package/lib/esm/test/TestEditTxn.js +34 -0
  517. package/lib/esm/test/TestEditTxn.js.map +1 -0
  518. package/lib/esm/test/TestUtils.d.ts +1 -0
  519. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  520. package/lib/esm/test/TestUtils.js +8 -1
  521. package/lib/esm/test/TestUtils.js.map +1 -1
  522. package/lib/esm/test/annotations/Fields.test.js +135 -143
  523. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  524. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  525. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  526. package/lib/esm/test/annotations/TextAnnotation.test.js +156 -99
  527. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  528. package/lib/esm/test/annotations/TextBlock.test.js +5 -3
  529. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  530. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  531. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  532. package/lib/esm/test/categories/Category.test.js +63 -3
  533. package/lib/esm/test/categories/Category.test.js.map +1 -1
  534. package/lib/esm/test/codespec/CodeSpec.test.js +88 -5
  535. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  536. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  537. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  538. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  539. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  540. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  541. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  542. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  543. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  544. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  545. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  546. package/lib/esm/test/ecdb/ECSqlAst.test.js +68 -67
  547. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  548. package/lib/esm/test/ecdb/ECSqlQuery.test.js +6 -6
  549. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  550. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -333
  551. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  552. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  553. package/lib/esm/test/ecdb/QueryReaders.test.js +47 -44
  554. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  555. package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -2
  556. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  557. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  558. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +30 -28
  559. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  560. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  561. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  562. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  563. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  564. package/lib/esm/test/element/DeleteDefinitionElements.test.js +159 -143
  565. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  566. package/lib/esm/test/element/ElementAspect.test.js +90 -82
  567. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  568. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -1
  569. package/lib/esm/test/element/ElementDependencyGraph.test.js +51 -43
  570. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  571. package/lib/esm/test/element/ElementRoundTrip.test.js +176 -177
  572. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  573. package/lib/esm/test/element/ExcludedElements.test.js +2 -2
  574. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  575. package/lib/esm/test/element/ExternalSource.test.js +40 -38
  576. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  577. package/lib/esm/test/element/NullStructArray.test.js +23 -22
  578. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  579. package/lib/esm/test/element/ProjectInformationRecord.test.js +5 -2
  580. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  581. package/lib/esm/test/element/SheetInformationAspect.test.js +43 -11
  582. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  583. package/lib/esm/test/element/UrlLink.test.js +2 -2
  584. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  585. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  586. package/lib/esm/test/font/IModelDbFonts.test.js +87 -73
  587. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  588. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +194 -155
  589. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  590. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +2 -4
  591. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  592. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  593. package/lib/esm/test/hubaccess/Rebase.test.js +369 -303
  594. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  595. package/lib/esm/test/hubaccess/SemanticRebase.test.js +467 -392
  596. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  597. package/lib/esm/test/imageData.js.map +1 -1
  598. package/lib/esm/test/imodel/Code.test.js +31 -31
  599. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  600. package/lib/esm/test/imodel/ElementTreeWalker.test.js +57 -48
  601. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  602. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  603. package/lib/esm/test/imodel/IModel.test.js +463 -388
  604. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  605. package/lib/esm/test/imodel/ProjectExtents.test.js +2 -2
  606. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  607. package/lib/esm/test/imodel/SchemaXmlImport.test.js +77 -13
  608. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  609. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  610. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  611. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -1
  612. package/lib/esm/test/incrementalSchemaLocater/TestContext.js +2 -2
  613. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  614. package/lib/esm/test/index.d.ts +1 -0
  615. package/lib/esm/test/index.d.ts.map +1 -1
  616. package/lib/esm/test/index.js +1 -0
  617. package/lib/esm/test/index.js.map +1 -1
  618. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  619. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  620. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  621. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  622. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  623. package/lib/esm/test/rpc/response.test.js.map +1 -1
  624. package/lib/esm/test/schema/ClassRegistry.test.js +122 -121
  625. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  626. package/lib/esm/test/schema/FunctionalDomain.test.js +36 -34
  627. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  628. package/lib/esm/test/schema/GenericDomain.test.js +114 -94
  629. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  630. package/lib/esm/test/schema/IModelSchemaContext.test.js +11 -10
  631. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  632. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +226 -211
  633. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  634. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +1 -3
  635. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -1
  636. package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -247
  637. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  638. package/lib/esm/test/standalone/ChangeMerge.test.js +101 -82
  639. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  640. package/lib/esm/test/standalone/ChangesetReader.test.js +242 -213
  641. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  642. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  643. package/lib/esm/test/standalone/DisplayStyle.test.js +43 -40
  644. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  645. package/lib/esm/test/standalone/Drawing.test.js +4 -3
  646. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  647. package/lib/esm/test/standalone/EditTxn.test.d.ts +2 -0
  648. package/lib/esm/test/standalone/EditTxn.test.d.ts.map +1 -0
  649. package/lib/esm/test/standalone/EditTxn.test.js +219 -0
  650. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -0
  651. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  652. package/lib/esm/test/standalone/ElementMesh.test.js +16 -13
  653. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  654. package/lib/esm/test/standalone/ExportGraphics.test.js +40 -34
  655. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  656. package/lib/esm/test/standalone/GeometryChangeEvents.test.js +11 -15
  657. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  658. package/lib/esm/test/standalone/GeometryStream.test.js +212 -165
  659. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  660. package/lib/esm/test/standalone/HubMock.test.js +31 -25
  661. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  662. package/lib/esm/test/standalone/IModelLimits.test.js +11 -8
  663. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  664. package/lib/esm/test/standalone/IModelWrite.test.d.ts +2 -2
  665. package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
  666. package/lib/esm/test/standalone/IModelWrite.test.js +211 -169
  667. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  668. package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts +2 -0
  669. package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts.map +1 -0
  670. package/lib/esm/test/standalone/ITwinWorkspace.test.js +236 -0
  671. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -0
  672. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +25 -22
  673. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  674. package/lib/esm/test/standalone/IntegrityCheck.test.js +20 -18
  675. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  676. package/lib/esm/test/standalone/MergeConflict.test.d.ts +2 -2
  677. package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -1
  678. package/lib/esm/test/standalone/MergeConflict.test.js +49 -33
  679. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  680. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  681. package/lib/esm/test/standalone/RenderMaterialElement.test.js +5 -5
  682. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  683. package/lib/esm/test/standalone/RenderTimeline.test.js +3 -2
  684. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  685. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  686. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  687. package/lib/esm/test/standalone/SectionDrawing.test.js +7 -7
  688. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  689. package/lib/esm/test/standalone/ServerBasedLocks.test.js +928 -22
  690. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  691. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  692. package/lib/esm/test/standalone/Settings.test.js +26 -4
  693. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  694. package/lib/esm/test/standalone/SettingsSchemas.test.js +2 -1
  695. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  696. package/lib/esm/test/standalone/SnapshotDb.test.js +3 -1
  697. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  698. package/lib/esm/test/standalone/StandaloneDb.test.js +27 -26
  699. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  700. package/lib/esm/test/standalone/Texture.test.js +5 -4
  701. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  702. package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -1
  703. package/lib/esm/test/standalone/TileCache.test.js +5 -3
  704. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  705. package/lib/esm/test/standalone/TileTree.test.js +35 -31
  706. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  707. package/lib/esm/test/standalone/TxnManager.test.js +700 -653
  708. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  709. package/lib/esm/test/standalone/ViewDefinition.test.js +295 -229
  710. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  711. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  712. package/lib/esm/test/standalone/Workspace.test.js +72 -22
  713. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  714. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  715. package/lib/esm/test/workspace/SettingsDb.test.js +28 -456
  716. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  717. package/lib/esm/workspace/Settings.d.ts +11 -5
  718. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  719. package/lib/esm/workspace/Settings.js.map +1 -1
  720. package/lib/esm/workspace/SettingsDb.d.ts +20 -99
  721. package/lib/esm/workspace/SettingsDb.d.ts.map +1 -1
  722. package/lib/esm/workspace/SettingsDb.js +20 -6
  723. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  724. package/lib/esm/workspace/SettingsEditor.d.ts +40 -226
  725. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
  726. package/lib/esm/workspace/SettingsEditor.js +85 -24
  727. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  728. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  729. package/lib/esm/workspace/Workspace.d.ts +7 -11
  730. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  731. package/lib/esm/workspace/Workspace.js.map +1 -1
  732. package/lib/esm/workspace/WorkspaceEditor.d.ts +14 -0
  733. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  734. package/lib/esm/workspace/WorkspaceEditor.js +1 -1
  735. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  736. package/package.json +14 -14
  737. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +0 -38
  738. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
  739. package/lib/cjs/internal/workspace/SettingsDbImpl.js +0 -108
  740. package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +0 -1
  741. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +0 -14
  742. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
  743. package/lib/cjs/internal/workspace/SettingsSqliteDb.js +0 -40
  744. package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +0 -1
  745. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +0 -38
  746. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
  747. package/lib/esm/internal/workspace/SettingsDbImpl.js +0 -104
  748. package/lib/esm/internal/workspace/SettingsDbImpl.js.map +0 -1
  749. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +0 -14
  750. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
  751. package/lib/esm/internal/workspace/SettingsSqliteDb.js +0 -36
  752. package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +0 -1
@@ -3,6 +3,7 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { DbResult, Id64 } from "@itwin/core-bentley";
6
+ import { EditTxn, withEditTxn } from "../../EditTxn";
6
7
  import { Code, ColorDef, IModel, IModelVersion, LockState, QueryRowFormat, SchemaState, SubCategoryAppearance, } from "@itwin/core-common";
7
8
  import { Arc3d, IModelJson, Point2d, Point3d } from "@itwin/core-geometry";
8
9
  import * as chai from "chai";
@@ -17,15 +18,16 @@ import { HubMock } from "../../internal/HubMock";
17
18
  import { _nativeDb, BriefcaseDb, BriefcaseManager, ChannelControl, CodeService, DefinitionModel, DocumentListModel, Drawing, DrawingGraphic, SpatialCategory, Subject, } from "../../core-backend";
18
19
  import { IModelTestUtils, TestUserType } from "../IModelTestUtils";
19
20
  chai.use(chaiAsPromised);
20
- export async function createNewModelAndCategory(rwIModel, parent) {
21
+ export async function createNewModelAndCategory(txn, parent) {
22
+ const rwIModel = txn.iModel;
21
23
  // Create a new physical model.
22
- const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel"), true, parent);
24
+ const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(txn, IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel"), true, parent);
23
25
  // Find or create a SpatialCategory.
24
26
  const dictionary = rwIModel.models.getModel(IModel.dictionaryId);
25
27
  const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, "ThisTestSpatialCategory");
26
28
  const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);
27
- const spatialCategoryId = rwIModel.elements.insertElement(category.toJSON());
28
- category.setDefaultAppearance(new SubCategoryAppearance({ color: 0xff0000 }));
29
+ const spatialCategoryId = txn.insertElement(category.toJSON());
30
+ category.setDefaultAppearance(txn, new SubCategoryAppearance({ color: 0xff0000 }));
29
31
  // const spatialCategoryId: Id64String = SpatialCategory.insert(rwIModel, IModel.dictionaryId, newCategoryCode.value!, new SubCategoryAppearance({ color: 0xff0000 }));
30
32
  return { modelId, spatialCategoryId };
31
33
  }
@@ -33,9 +35,11 @@ describe("IModelWriteTest", () => {
33
35
  let managerAccessToken;
34
36
  let superAccessToken;
35
37
  let iTwinId;
36
- before(() => {
38
+ before(async () => {
37
39
  HubMock.startup("IModelWriteTest", KnownTestLocations.outputDir);
38
40
  iTwinId = HubMock.iTwinId;
41
+ managerAccessToken = await HubWrappers.getAccessToken(TestUserType.Manager);
42
+ superAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);
39
43
  });
40
44
  after(() => HubMock.shutdown());
41
45
  it("Check busyTimeout option", async () => {
@@ -60,14 +64,16 @@ describe("IModelWriteTest", () => {
60
64
  };
61
65
  const seconds = (s) => s * 1000;
62
66
  const db = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
63
- db.saveChanges();
67
+ const dbTxn = new EditTxn(db, "imodel write");
68
+ dbTxn.start();
69
+ dbTxn.saveChanges();
64
70
  // lock db so another connection cannot write to it.
65
- db.saveFileProperty({ name: "test", namespace: "test" }, "");
71
+ dbTxn.saveFileProperty({ name: "test", namespace: "test" }, "");
66
72
  assert.isAtMost(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(0) }), seconds(1), "open should fail with busy error instantly");
67
73
  assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(1) }), seconds(1), "open should fail with atleast 1 sec delay due to retry");
68
74
  assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(2) }), seconds(2), "open should fail with atleast 2 sec delay due to retry");
69
75
  assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(3) }), seconds(3), "open should fail with atleast 3 sec delay due to retry");
70
- db.abandonChanges();
76
+ dbTxn.end("abandon");
71
77
  db.close();
72
78
  });
73
79
  it("WatchForChanges", async () => {
@@ -87,26 +93,34 @@ describe("IModelWriteTest", () => {
87
93
  return fsWatcher;
88
94
  };
89
95
  const watchStubResult = sinon.stub(fs, "watch").callsFake(watchStub);
90
- const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
91
- bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
92
- const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
93
- const code1 = IModelTestUtils.getUniqueModelCode(bc, "newPhysicalModel1");
94
- await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc, code1, true);
95
- bc.saveChanges();
96
- // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected
97
- // in the readonly briefcase until the file watcher fires.
98
- expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());
99
- // trigger watcher via stub
100
- fsWatcher.callback();
101
- // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection
102
- expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());
103
- roBC.close();
96
+ let bc;
97
+ let roBC;
98
+ try {
99
+ bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
100
+ bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
101
+ roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
102
+ const bcTxn = new EditTxn(bc, "imodel write");
103
+ bcTxn.start();
104
+ const code1 = IModelTestUtils.getUniqueModelCode(bc, "newPhysicalModel1");
105
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bcTxn, code1, true);
106
+ bcTxn.end();
107
+ // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected
108
+ // in the readonly briefcase until the file watcher fires.
109
+ expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());
110
+ // trigger watcher via stub
111
+ fsWatcher.callback();
112
+ // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection
113
+ expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());
114
+ }
115
+ finally {
116
+ roBC?.close();
117
+ bc?.close();
118
+ // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT
119
+ // call sinon.restore() here. This is because sinon.restore() will restore the stubs for
120
+ // CloudSqlite that HubMock.startup() put in place.
121
+ watchStubResult.restore();
122
+ }
104
123
  expect(nClosed).equal(1);
105
- bc.close();
106
- // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT
107
- // call sinon.restore() here. This is because sinon.restore() will restore the stubs for
108
- // CloudSqlite that HubMock.startup() put in place.
109
- watchStubResult.restore();
110
124
  });
111
125
  function expectEqualChangesets(a, b) {
112
126
  expect(a.id).to.equal(b.id);
@@ -130,42 +144,49 @@ describe("IModelWriteTest", () => {
130
144
  return fsWatcher;
131
145
  };
132
146
  const watchStubResult = sinon.stub(fs, "watch").callsFake(watchStub);
133
- const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
134
- bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
135
- const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
136
- const code1 = IModelTestUtils.getUniqueModelCode(bc, "newPhysicalModel1");
137
- await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc, code1, true);
138
- bc.saveChanges();
139
- // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected
140
- // in the readonly briefcase until the file watcher fires.
141
- expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());
142
- // trigger watcher via stub
143
- fsWatcher.callback();
144
- // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection
145
- expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());
146
- // Push the changes to the hub
147
- const prePushChangeset = bc.changeset;
148
- let eventRaised = false;
149
- roBC.onChangesetChanged.addOnce((prevCS) => {
150
- expectEqualChangesets(prevCS, prePushChangeset);
151
- eventRaised = true;
152
- });
153
- await bc.pushChanges({ accessToken: adminAccessToken, description: "test" });
154
- const postPushChangeset = bc.changeset;
155
- assert(!!postPushChangeset);
156
- expect(prePushChangeset !== postPushChangeset, "changes should be pushed");
157
- // trigger watcher via stub
158
- fsWatcher.callback();
159
- expectEqualChangesets(roBC.changeset, postPushChangeset);
160
- expect(roBC[_nativeDb].getCurrentTxnId(), "txn should be updated").equal(bc[_nativeDb].getCurrentTxnId());
161
- expect(eventRaised).to.be.true;
162
- roBC.close();
147
+ let bc;
148
+ let roBC;
149
+ try {
150
+ bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
151
+ bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
152
+ roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
153
+ const bcTxn = new EditTxn(bc, "imodel write");
154
+ bcTxn.start();
155
+ const code1 = IModelTestUtils.getUniqueModelCode(bc, "newPhysicalModel1");
156
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bcTxn, code1, true);
157
+ bcTxn.end();
158
+ // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected
159
+ // in the readonly briefcase until the file watcher fires.
160
+ expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());
161
+ // trigger watcher via stub
162
+ fsWatcher.callback();
163
+ // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection
164
+ expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());
165
+ const prePushChangeset = bc.changeset;
166
+ let eventRaised = false;
167
+ roBC.onChangesetChanged.addOnce((prevCS) => {
168
+ expectEqualChangesets(prevCS, prePushChangeset);
169
+ eventRaised = true;
170
+ });
171
+ await bc.pushChanges({ accessToken: adminAccessToken, description: "test" });
172
+ const postPushChangeset = bc.changeset;
173
+ assert(!!postPushChangeset);
174
+ expect(prePushChangeset !== postPushChangeset, "changes should be pushed");
175
+ // trigger watcher via stub
176
+ fsWatcher.callback();
177
+ expectEqualChangesets(roBC.changeset, postPushChangeset);
178
+ expect(roBC[_nativeDb].getCurrentTxnId(), "txn should be updated").equal(bc[_nativeDb].getCurrentTxnId());
179
+ expect(eventRaised).to.be.true;
180
+ }
181
+ finally {
182
+ roBC?.close();
183
+ bc?.close();
184
+ // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT
185
+ // call sinon.restore() here. This is because sinon.restore() will restore the stubs for
186
+ // CloudSqlite that HubMock.startup() put in place.
187
+ watchStubResult.restore();
188
+ }
163
189
  expect(nClosed).equal(1);
164
- bc.close();
165
- // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT
166
- // call sinon.restore() here. This is because sinon.restore() will restore the stubs for
167
- // CloudSqlite that HubMock.startup() put in place.
168
- watchStubResult.restore();
169
190
  });
170
191
  it("WatchForChanges - pull", async () => {
171
192
  const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);
@@ -176,19 +197,6 @@ describe("IModelWriteTest", () => {
176
197
  const args = { iTwinId, iModelId };
177
198
  const initialDb = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, ...args });
178
199
  const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, ...args });
179
- // Push some changes - prep for pull workflow.
180
- const bc1 = await BriefcaseDb.open({ fileName: initialDb.fileName });
181
- bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);
182
- const code2 = IModelTestUtils.getUniqueModelCode(bc1, "newPhysicalModel2");
183
- await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc1, code2, true);
184
- const prePushChangeset = bc1.changeset;
185
- bc1.saveChanges();
186
- await bc1.pushChanges({ accessToken: adminAccessToken, description: "test" });
187
- const postPushChangeset = bc1.changeset;
188
- assert(!!prePushChangeset);
189
- expect(prePushChangeset !== postPushChangeset, "changes should be pushed");
190
- bc1.close();
191
- // Writer that pulls + watcher.
192
200
  let nClosed = 0;
193
201
  const fsWatcher = {
194
202
  callback: () => { },
@@ -198,32 +206,53 @@ describe("IModelWriteTest", () => {
198
206
  fsWatcher.callback = fn;
199
207
  return fsWatcher;
200
208
  };
209
+ // Push some changes - prep for pull workflow.
210
+ let bc1;
211
+ let bc;
212
+ let roBC;
201
213
  const watchStubResult = sinon.stub(fs, "watch").callsFake(watchStub);
202
- const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
203
- bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
204
- const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
205
- const prePullChangeset = bc.changeset;
206
- let eventRaised = false;
207
- roBC.onChangesetChanged.addOnce((prevCS) => {
208
- expectEqualChangesets(prevCS, prePushChangeset);
209
- eventRaised = true;
210
- });
211
- await bc.pullChanges();
212
- const postPullChangeset = bc.changeset;
213
- assert(!!postPullChangeset);
214
- expect(prePullChangeset !== postPullChangeset, "changes should be pulled");
215
- // trigger watcher via stub
216
- fsWatcher.callback();
217
- expectEqualChangesets(roBC.changeset, postPullChangeset);
218
- expect(roBC[_nativeDb].getCurrentTxnId(), "txn should be updated").equal(bc[_nativeDb].getCurrentTxnId());
219
- expect(eventRaised).to.be.true;
220
- roBC.close();
214
+ try {
215
+ bc1 = await BriefcaseDb.open({ fileName: initialDb.fileName });
216
+ bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);
217
+ const bc1Txn = new EditTxn(bc1, "imodel write");
218
+ bc1Txn.start();
219
+ const code2 = IModelTestUtils.getUniqueModelCode(bc1, "newPhysicalModel2");
220
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc1Txn, code2, true);
221
+ const prePushChangeset = bc1.changeset;
222
+ bc1Txn.end();
223
+ await bc1.pushChanges({ accessToken: adminAccessToken, description: "test" });
224
+ const postPushChangeset = bc1.changeset;
225
+ assert(!!prePushChangeset);
226
+ expect(prePushChangeset !== postPushChangeset, "changes should be pushed");
227
+ bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
228
+ bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
229
+ roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
230
+ const prePullChangeset = bc.changeset;
231
+ let eventRaised = false;
232
+ roBC.onChangesetChanged.addOnce((prevCS) => {
233
+ expectEqualChangesets(prevCS, prePushChangeset);
234
+ eventRaised = true;
235
+ });
236
+ await bc.pullChanges();
237
+ const postPullChangeset = bc.changeset;
238
+ assert(!!postPullChangeset);
239
+ expect(prePullChangeset !== postPullChangeset, "changes should be pulled");
240
+ // trigger watcher via stub
241
+ fsWatcher.callback();
242
+ expectEqualChangesets(roBC.changeset, postPullChangeset);
243
+ expect(roBC[_nativeDb].getCurrentTxnId(), "txn should be updated").equal(bc[_nativeDb].getCurrentTxnId());
244
+ expect(eventRaised).to.be.true;
245
+ }
246
+ finally {
247
+ roBC?.close();
248
+ bc?.close();
249
+ bc1?.close();
250
+ // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT
251
+ // call sinon.restore() here. This is because sinon.restore() will restore the stubs for
252
+ // CloudSqlite that HubMock.startup() put in place.
253
+ watchStubResult.restore();
254
+ }
221
255
  expect(nClosed).equal(1);
222
- bc.close();
223
- // NOTE: Since HubMock.startup() is called in the before() block and not beforeEach(), we CANNOT
224
- // call sinon.restore() here. This is because sinon.restore() will restore the stubs for
225
- // CloudSqlite that HubMock.startup() put in place.
226
- watchStubResult.restore();
227
256
  });
228
257
  it("should handle undo/redo", async () => {
229
258
  const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);
@@ -233,13 +262,15 @@ describe("IModelWriteTest", () => {
233
262
  const rwIModelId = await HubMock.createNewIModel({ accessToken: adminAccessToken, iTwinId, iModelName, description: "TestSubject" });
234
263
  assert.isNotEmpty(rwIModelId);
235
264
  const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: adminAccessToken, iTwinId, iModelId: rwIModelId });
265
+ const rwTxn = new EditTxn(rwIModel, "imodel write");
266
+ rwTxn.start();
236
267
  rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
237
268
  // create and insert a new model with code1
238
269
  const code1 = IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel1");
239
- await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, code1, true);
270
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwTxn, code1, true);
240
271
  assert.isTrue(rwIModel.elements.getElement(code1) !== undefined); // throws if element is not found
241
272
  // create a local txn with that change
242
- rwIModel.saveChanges("inserted newPhysicalModel");
273
+ rwTxn.saveChanges("inserted newPhysicalModel");
243
274
  // Reverse that local txn
244
275
  rwIModel.txns.reverseSingleTxn();
245
276
  try {
@@ -253,8 +284,8 @@ describe("IModelWriteTest", () => {
253
284
  }
254
285
  // Create and insert a model with code2
255
286
  const code2 = IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel2");
256
- await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, code2, true);
257
- rwIModel.saveChanges("inserted generic objects");
287
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwTxn, code2, true);
288
+ rwTxn.end("save", "inserted generic objects");
258
289
  // The iModel should have a model with code1 and not code2
259
290
  assert.isTrue(rwIModel.elements.getElement(code2) !== undefined); // throws if element is not found
260
291
  // Push the changes to the hub
@@ -324,18 +355,19 @@ describe("IModelWriteTest", () => {
324
355
  const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject", accessToken: adminToken });
325
356
  assert.isNotEmpty(rwIModelId);
326
357
  const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });
358
+ const rwTxn = new EditTxn(rwIModel, "imodel write");
327
359
  assert.equal(rwIModel[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);
328
- const schema = `<?xml version="1.0" encoding="UTF-8"?>
329
- <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
330
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
331
- <ECEntityClass typeName="Test2dElement">
332
- <BaseClass>bis:GraphicalElement2d</BaseClass>
333
- <ECProperty propertyName="s" typeName="string"/>
334
- </ECEntityClass>
360
+ const schema = `<?xml version="1.0" encoding="UTF-8"?>
361
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
362
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
363
+ <ECEntityClass typeName="Test2dElement">
364
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
365
+ <ECProperty propertyName="s" typeName="string"/>
366
+ </ECEntityClass>
335
367
  </ECSchema>`;
336
368
  await rwIModel.importSchemaStrings([schema]);
337
369
  rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
338
- rwIModel.saveChanges("user 1: schema changeset");
370
+ rwTxn.start();
339
371
  if (true || "push changes") {
340
372
  // Push the changes to the hub
341
373
  const prePushChangeSetId = rwIModel.changeset.id;
@@ -350,11 +382,11 @@ describe("IModelWriteTest", () => {
350
382
  const codeProps = Code.createEmpty();
351
383
  codeProps.value = "DrawingModel";
352
384
  let totalEl = 0;
353
- const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);
385
+ const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwTxn, codeProps, true);
354
386
  let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, "MyDrawingCategory");
355
387
  if (undefined === drawingCategoryId)
356
- drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, "MyDrawingCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
357
- const insertElements = (imodel, className = "Test2dElement", noOfElements = 10, userProp) => {
388
+ drawingCategoryId = DrawingCategory.insert(rwTxn, IModel.dictionaryId, "MyDrawingCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
389
+ const insertElements = (txn, className = "Test2dElement", noOfElements = 10, userProp) => {
358
390
  for (let m = 0; m < noOfElements; ++m) {
359
391
  const geomArray = [
360
392
  Arc3d.createXY(Point3d.create(0, 0), 5),
@@ -376,16 +408,16 @@ describe("IModelWriteTest", () => {
376
408
  geom: geometryStream,
377
409
  ...prop,
378
410
  };
379
- const id = imodel.elements.insertElement(geomElement);
411
+ const id = txn.insertElement(geomElement);
380
412
  assert.isTrue(Id64.isValidId64(id), "insert worked");
381
413
  }
382
414
  };
383
415
  const str = new Array(1024).join("x");
384
- insertElements(rwIModel, "Test2dElement", 1024, () => {
416
+ insertElements(rwTxn, "Test2dElement", 1024, () => {
385
417
  return { s: str };
386
418
  });
387
419
  assert.equal(1357648, rwIModel[_nativeDb].getChangesetSize());
388
- rwIModel.saveChanges("user 1: data");
420
+ rwTxn.saveChanges("user 1: data");
389
421
  assert.equal(0, rwIModel[_nativeDb].getChangesetSize());
390
422
  await rwIModel.pushChanges({ description: "schema changeset", accessToken: adminToken });
391
423
  rwIModel.close();
@@ -404,6 +436,8 @@ describe("IModelWriteTest", () => {
404
436
  };
405
437
  const briefcaseDb = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
406
438
  briefcaseDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);
439
+ const briefcaseDbTxn = new EditTxn(briefcaseDb, "imodel write");
440
+ briefcaseDbTxn.start();
407
441
  let firstNonRootElement = { id: undefined, codeValue: "test" };
408
442
  // eslint-disable-next-line @typescript-eslint/no-deprecated
409
443
  briefcaseDb.withPreparedStatement("SELECT * from Bis.Element LIMIT 1 OFFSET 1", (stmt) => {
@@ -413,16 +447,16 @@ describe("IModelWriteTest", () => {
413
447
  });
414
448
  // make change to the briefcaseDb that does not affect code, e.g., save file property
415
449
  // expect no error from verifyCode
416
- expect(() => briefcaseDb.saveFileProperty({ name: "codeServiceProp", namespace: "codeService", id: 1, subId: 1 }, "codeService test")).to.not.throw();
450
+ expect(() => briefcaseDbTxn.saveFileProperty({ name: "codeServiceProp", namespace: "codeService", id: 1, subId: 1 }, "codeService test")).to.not.throw();
417
451
  // make change to the briefcaseDb that affects code that will invoke verifyCode, e.g., update an element with a non-null code
418
452
  // expect error from verifyCode
419
453
  let newProps = { id: firstNonRootElement.id, code: { ...Code.createEmpty(), value: firstNonRootElement.codeValue }, classFullName: undefined, model: undefined };
420
454
  await briefcaseDb.locks.acquireLocks({ exclusive: firstNonRootElement.id });
421
- expect(() => briefcaseDb.elements.updateElement(newProps)).to.throw(CodeService.Error);
455
+ expect(() => briefcaseDbTxn.updateElement(newProps)).to.throw(CodeService.Error);
422
456
  // make change to the briefcaseDb that will invoke verifyCode with a null(empty) code, e.g., update an element with a null(empty) code
423
457
  // expect no error from verifyCode
424
458
  newProps = { id: firstNonRootElement.id, code: Code.createEmpty(), classFullName: undefined, model: undefined };
425
- expect(() => briefcaseDb.elements.updateElement(newProps)).to.not.throw();
459
+ expect(() => briefcaseDbTxn.updateElement(newProps)).to.not.throw();
426
460
  briefcaseDb.close();
427
461
  // throw "NoCodeIndex", this error should get ignored because it means the iModel isn't enforcing codes. updating an element with an empty code and a non empty code should work without issue.
428
462
  CodeService.createForIModel = async () => {
@@ -430,13 +464,15 @@ describe("IModelWriteTest", () => {
430
464
  };
431
465
  const briefcaseDb2 = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
432
466
  briefcaseDb2.channels.addAllowedChannel(ChannelControl.sharedChannelName);
467
+ const briefcaseDb2Txn = new EditTxn(briefcaseDb2, "imodel write");
468
+ briefcaseDb2Txn.start();
433
469
  await briefcaseDb2.locks.acquireLocks({ exclusive: firstNonRootElement.id });
434
470
  // expect no error from verifyCode for empty code
435
- expect(() => briefcaseDb2.elements.updateElement(newProps)).to.not.throw();
471
+ expect(() => briefcaseDb2Txn.updateElement(newProps)).to.not.throw();
436
472
  newProps = { id: firstNonRootElement.id, code: { ...Code.createEmpty(), value: firstNonRootElement.codeValue }, classFullName: undefined, model: undefined };
437
473
  // make change to the briefcaseDb that affects code that will invoke verifyCode, e.g., update an element with a non-null code
438
474
  // expect no error from verifyCode
439
- expect(() => briefcaseDb2.elements.updateElement(newProps)).to.not.throw();
475
+ expect(() => briefcaseDb2Txn.updateElement(newProps)).to.not.throw();
440
476
  // clean up
441
477
  CodeService.createForIModel = originalCreateForIModel;
442
478
  briefcaseDb2.close();
@@ -450,22 +486,25 @@ describe("IModelWriteTest", () => {
450
486
  const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject" });
451
487
  assert.isNotEmpty(rwIModelId);
452
488
  const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });
489
+ const rwTxn = new EditTxn(rwIModel, "imodel write");
453
490
  const rwIModel2 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: userToken });
491
+ const rwTxn2 = new EditTxn(rwIModel2, "imodel write");
492
+ rwTxn2.start();
454
493
  // enable change tracking
455
494
  assert.equal(rwIModel[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);
456
495
  assert.equal(rwIModel2[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);
457
- const schema = `<?xml version="1.0" encoding="UTF-8"?>
458
- <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
459
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
460
- <ECEntityClass typeName="Test2dElement">
461
- <BaseClass>bis:GraphicalElement2d</BaseClass>
462
- <ECProperty propertyName="s" typeName="string"/>
463
- </ECEntityClass>
496
+ const schema = `<?xml version="1.0" encoding="UTF-8"?>
497
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
498
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
499
+ <ECEntityClass typeName="Test2dElement">
500
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
501
+ <ECProperty propertyName="s" typeName="string"/>
502
+ </ECEntityClass>
464
503
  </ECSchema>`;
465
504
  await rwIModel.importSchemaStrings([schema]);
466
505
  rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
467
506
  rwIModel2.channels.addAllowedChannel(ChannelControl.sharedChannelName);
468
- rwIModel.saveChanges("user 1: schema changeset");
507
+ rwTxn.start();
469
508
  if (true || "push changes") {
470
509
  // Push the changes to the hub
471
510
  const prePushChangeSetId = rwIModel.changeset.id;
@@ -480,11 +519,11 @@ describe("IModelWriteTest", () => {
480
519
  codeProps.value = "DrawingModel";
481
520
  let totalEl = 0;
482
521
  await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });
483
- const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);
522
+ const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwTxn, codeProps, true);
484
523
  let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, "MyDrawingCategory");
485
524
  if (undefined === drawingCategoryId)
486
- drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, "MyDrawingCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
487
- const insertElements = (imodel, className = "Test2dElement", noOfElements = 10, userProp) => {
525
+ drawingCategoryId = DrawingCategory.insert(rwTxn, IModel.dictionaryId, "MyDrawingCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
526
+ const insertElements = (txn, className = "Test2dElement", noOfElements = 10, userProp) => {
488
527
  for (let m = 0; m < noOfElements; ++m) {
489
528
  const geomArray = [
490
529
  Arc3d.createXY(Point3d.create(0, 0), 5),
@@ -506,15 +545,15 @@ describe("IModelWriteTest", () => {
506
545
  geom: geometryStream,
507
546
  ...prop,
508
547
  };
509
- const id = imodel.elements.insertElement(geomElement);
548
+ const id = txn.insertElement(geomElement);
510
549
  assert.isTrue(Id64.isValidId64(id), "insert worked");
511
550
  }
512
551
  };
513
- insertElements(rwIModel, "Test2dElement", 10, (n) => {
552
+ insertElements(rwTxn, "Test2dElement", 10, (n) => {
514
553
  return { s: `s-${n}` };
515
554
  });
516
555
  assert.equal(3889, rwIModel[_nativeDb].getChangesetSize());
517
- rwIModel.saveChanges("user 1: data changeset");
556
+ rwTxn.saveChanges("user 1: data changeset");
518
557
  if (true || "push changes") {
519
558
  // Push the changes to the hub
520
559
  const prePushChangeSetId = rwIModel.changeset.id;
@@ -560,11 +599,11 @@ describe("IModelWriteTest", () => {
560
599
  assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);
561
600
  // create some element and push those changes
562
601
  await rwIModel2.locks.acquireLocks({ shared: drawingModelId });
563
- insertElements(rwIModel2, "Test2dElement", 10, (n) => {
602
+ insertElements(rwTxn2, "Test2dElement", 10, (n) => {
564
603
  return { s: `s-${n}` };
565
604
  });
566
605
  assert.equal(0, rwIModel[_nativeDb].getChangesetSize());
567
- rwIModel2.saveChanges("user 2: data changeset");
606
+ rwTxn2.saveChanges("user 2: data changeset");
568
607
  if (true || "push changes") {
569
608
  // Push the changes to the hub
570
609
  const prePushChangeSetId = rwIModel2.changeset.id;
@@ -578,23 +617,22 @@ describe("IModelWriteTest", () => {
578
617
  }
579
618
  await rwIModel.pullChanges({ accessToken: adminToken });
580
619
  // second schema import ==============================================================
581
- const schemaV2 = `<?xml version="1.0" encoding="UTF-8"?>
582
- <ECSchema schemaName="TestDomain" alias="ts" version="01.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
583
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
584
- <ECEntityClass typeName="Test2dElement">
585
- <BaseClass>bis:GraphicalElement2d</BaseClass>
586
- <ECProperty propertyName="s" typeName="string"/>
587
- <ECProperty propertyName="v" typeName="string"/>
588
- </ECEntityClass>
589
- <ECEntityClass typeName="Test2dElement2nd">
590
- <BaseClass>bis:GraphicalElement2d</BaseClass>
591
- <ECProperty propertyName="t" typeName="string"/>
592
- <ECProperty propertyName="r" typeName="string"/>
593
- </ECEntityClass>
620
+ const schemaV2 = `<?xml version="1.0" encoding="UTF-8"?>
621
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
622
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
623
+ <ECEntityClass typeName="Test2dElement">
624
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
625
+ <ECProperty propertyName="s" typeName="string"/>
626
+ <ECProperty propertyName="v" typeName="string"/>
627
+ </ECEntityClass>
628
+ <ECEntityClass typeName="Test2dElement2nd">
629
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
630
+ <ECProperty propertyName="t" typeName="string"/>
631
+ <ECProperty propertyName="r" typeName="string"/>
632
+ </ECEntityClass>
594
633
  </ECSchema>`;
595
634
  await rwIModel.importSchemaStrings([schemaV2]);
596
635
  assert.equal(0, rwIModel[_nativeDb].getChangesetSize());
597
- rwIModel.saveChanges("user 1: schema changeset2");
598
636
  if (true || "push changes") {
599
637
  // Push the changes to the hub
600
638
  const prePushChangeSetId = rwIModel.changeset.id;
@@ -607,19 +645,19 @@ describe("IModelWriteTest", () => {
607
645
  }
608
646
  // create some element and push those changes
609
647
  await rwIModel.locks.acquireLocks({ shared: drawingModelId });
610
- insertElements(rwIModel, "Test2dElement", 10, (n) => {
648
+ insertElements(rwTxn, "Test2dElement", 10, (n) => {
611
649
  return {
612
650
  s: `s-${n}`, v: `v-${n}`,
613
651
  };
614
652
  });
615
653
  // create some element and push those changes
616
- insertElements(rwIModel, "Test2dElement2nd", 10, (n) => {
654
+ insertElements(rwTxn, "Test2dElement2nd", 10, (n) => {
617
655
  return {
618
656
  t: `t-${n}`, r: `r-${n}`,
619
657
  };
620
658
  });
621
659
  assert.equal(6266, rwIModel[_nativeDb].getChangesetSize());
622
- rwIModel.saveChanges("user 1: data changeset");
660
+ rwTxn.saveChanges("user 1: data changeset");
623
661
  if (true || "push changes") {
624
662
  // Push the changes to the hub
625
663
  const prePushChangeSetId = rwIModel.changeset.id;
@@ -767,8 +805,7 @@ describe("IModelWriteTest", () => {
767
805
  newExtents.low.y += 100;
768
806
  newExtents.high.x += 100;
769
807
  newExtents.high.y += 100;
770
- iModel.updateProjectExtents(newExtents);
771
- iModel.saveChanges("update project extents");
808
+ withEditTxn(iModel, "update project extents", (txn) => txn.updateProjectExtents(newExtents));
772
809
  await iModel.pushChanges({ description: "update project extents" });
773
810
  await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel);
774
811
  const iModelBeforeExtentsChange = await HubWrappers.downloadAndOpenBriefcase({ accessToken, iTwinId, iModelId, asOf: IModelVersion.asOfChangeSet(changesetIdBeforeExtentsChange).toJSON() });
@@ -792,14 +829,16 @@ describe("IModelWriteTest", () => {
792
829
  const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName: "subModelCoveredByParentLockTest", version0 });
793
830
  let iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId });
794
831
  iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
832
+ const iModelTxn = new EditTxn(iModel, "imodel write");
833
+ iModelTxn.start();
795
834
  /*
796
835
  Job Subject
797
836
  +- DefinitionPartition -- [DefinitionModel]
798
837
  */
799
838
  await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });
800
- const jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, "JobSubject").insert();
801
- const definitionModelId = DefinitionModel.insert(iModel, jobSubjectId, "Definition");
802
- iModel.saveChanges();
839
+ const jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, "JobSubject").insert(iModelTxn);
840
+ const definitionModelId = DefinitionModel.insert(iModelTxn, jobSubjectId, "Definition");
841
+ iModelTxn.end();
803
842
  const locks = iModel.locks;
804
843
  expect(locks.isServerBased).true;
805
844
  await iModel.pushChanges({ description: "create model" });
@@ -813,16 +852,17 @@ describe("IModelWriteTest", () => {
813
852
  assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));
814
853
  assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));
815
854
  assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));
855
+ iModelTxn.start();
816
856
  await iModel.locks.acquireLocks({ exclusive: jobSubjectId });
817
857
  iModel.locks.checkExclusiveLock(jobSubjectId, "", "");
818
858
  iModel.locks.checkSharedLock(jobSubjectId, "", "");
819
859
  iModel.locks.checkSharedLock(definitionModelId, "", "");
820
860
  iModel.locks.checkExclusiveLock(definitionModelId, "", "");
821
- const spatialCategoryId = SpatialCategory.insert(iModel, definitionModelId, "SpatialCategory", new SubCategoryAppearance()); // throws if we get locking error
822
- const drawingCategoryId = DrawingCategory.insert(iModel, definitionModelId, "DrawingCategory", new SubCategoryAppearance());
861
+ const spatialCategoryId = SpatialCategory.insert(iModelTxn, definitionModelId, "SpatialCategory", new SubCategoryAppearance()); // throws if we get locking error
862
+ const drawingCategoryId = DrawingCategory.insert(iModelTxn, definitionModelId, "DrawingCategory", new SubCategoryAppearance());
823
863
  assert.isTrue(iModel.elements.getElement(spatialCategoryId).model === definitionModelId);
824
864
  assert.isTrue(iModel.elements.getElement(drawingCategoryId).model === definitionModelId);
825
- iModel.saveChanges();
865
+ iModelTxn.end();
826
866
  await iModel.pushChanges({ description: "insert category" });
827
867
  /*
828
868
  Create some more nesting.
@@ -837,19 +877,20 @@ describe("IModelWriteTest", () => {
837
877
  assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));
838
878
  assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));
839
879
  assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));
880
+ iModelTxn.start();
840
881
  await iModel.locks.acquireLocks({ exclusive: jobSubjectId });
841
882
  iModel.locks.checkExclusiveLock(jobSubjectId, "", "");
842
883
  iModel.locks.checkSharedLock(IModel.repositoryModelId, "", "");
843
- const childSubjectId = Subject.insert(iModel, jobSubjectId, "Child Subject");
844
- const documentListModelId = DocumentListModel.insert(iModel, childSubjectId, "Document"); // creates DocumentList and DocumentListModel
884
+ const childSubjectId = Subject.insert(iModelTxn, jobSubjectId, "Child Subject");
885
+ const documentListModelId = DocumentListModel.insert(iModelTxn, childSubjectId, "Document"); // creates DocumentList and DocumentListModel
845
886
  assert.isTrue(Id64.isValidId64(documentListModelId));
846
- const drawingModelId = Drawing.insert(iModel, documentListModelId, "Drawing"); // creates Drawing and DrawingModel
887
+ const drawingModelId = Drawing.insert(iModelTxn, documentListModelId, "Drawing"); // creates Drawing and DrawingModel
847
888
  assert.isTrue(iModel.elements.getElement(childSubjectId).parent?.id === jobSubjectId);
848
889
  assert.isTrue(iModel.elements.getElement(childSubjectId).model === IModel.repositoryModelId);
849
890
  assert.isTrue(iModel.elements.getElement(documentListModelId).parent?.id === childSubjectId);
850
891
  assert.isTrue(iModel.elements.getElement(documentListModelId).model === IModel.repositoryModelId);
851
892
  assert.isTrue(iModel.elements.getElement(drawingModelId).model === documentListModelId);
852
- iModel.saveChanges();
893
+ iModelTxn.end();
853
894
  await iModel.pushChanges({ description: "insert doc list with nested drawing model" });
854
895
  /*
855
896
  Verify that even a deeply nested insertion is covered by the exclusive lock on the top-level parent.
@@ -867,6 +908,7 @@ describe("IModelWriteTest", () => {
867
908
  assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));
868
909
  assert.isFalse(iModel.locks.holdsSharedLock(documentListModelId));
869
910
  assert.isFalse(iModel.locks.holdsSharedLock(drawingModelId));
911
+ iModelTxn.start();
870
912
  await iModel.locks.acquireLocks({ exclusive: jobSubjectId });
871
913
  iModel.locks.checkExclusiveLock(jobSubjectId, "", "");
872
914
  iModel.locks.checkSharedLock(IModel.repositoryModelId, "", "");
@@ -881,9 +923,9 @@ describe("IModelWriteTest", () => {
881
923
  geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),
882
924
  placement: { origin: Point2d.create(2, 2), angle: 0 },
883
925
  };
884
- const drawingGraphicId1 = iModel.elements.insertElement(drawingGraphicProps1);
926
+ const drawingGraphicId1 = iModelTxn.insertElement(drawingGraphicProps1);
885
927
  assert.isTrue(iModel.elements.getElement(drawingGraphicId1).model === drawingModelId);
886
- iModel.saveChanges();
928
+ iModelTxn.end();
887
929
  expect(iModel.locks.holdsExclusiveLock(drawingModelId)).true;
888
930
  const fileName = iModel[_nativeDb].getFilePath();
889
931
  iModel.close(); // close rw