@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
@@ -8,11 +8,13 @@ import { assert, expect } from "chai";
8
8
  import * as chaiAsPromised from "chai-as-promised";
9
9
  import * as path from "path";
10
10
  import { BeEvent, DbResult, Guid, Id64, IModelStatus, omit } from "@itwin/core-bentley";
11
+ import { withEditTxn } from "../EditTxn";
11
12
  import { Base64EncodedString, Code, CodeScopeSpec, ColorDef, Environment, FontType, GeometryParams, GeometryStreamBuilder, ImageSourceFormat, IModel, IModelError, IModelReadRpcInterface, IModelVersion, PlanProjectionSettings, RelatedElement, RpcConfiguration, RpcManager, RpcPendingResponse, SkyBoxImageType, SubCategoryAppearance, SubCategoryOverride, SyncMode, } from "@itwin/core-common";
12
13
  import { Box, Cone, LineString3d, Point2d, Point3d, Range2d, Range3d, StandardViewIndex, Vector3d, YawPitchRollAngles } from "@itwin/core-geometry";
13
14
  import { CheckpointManager, V2CheckpointManager } from "../CheckpointManager";
14
15
  import { ClassRegistry } from "../ClassRegistry";
15
16
  import { _nativeDb, AuxCoordSystem2d, BriefcaseDb, BriefcaseLocalValue, BriefcaseManager, CategorySelector, ChannelControl, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, Element, ElementOwnsChildElements, ElementOwnsMultiAspects, ElementOwnsUniqueAspect, ExternalSource, ExternalSourceIsInRepository, FunctionalModel, FunctionalSchema, GroupModel, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, Model, ModelSelector, OrthographicViewDefinition, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, SubjectOwnsPartitionElements, Texture, ViewDefinition, } from "../core-backend";
17
+ import { _hubAccess } from "../internal/Symbols";
16
18
  import { DefinitionPartition, Drawing, DrawingGraphic, GeometryPart, LinkElement, PhysicalElement, RepositoryLink, Subject } from "../Element";
17
19
  import { DefinitionModel, DocumentListModel, DrawingModel, InformationRecordModel, SpatialLocationModel } from "../Model";
18
20
  import { DrawingGraphicRepresentsElement, ElementDrivesElement } from "../Relationship";
@@ -20,7 +22,6 @@ import { RpcBriefcaseUtility } from "../rpc-impl/RpcBriefcaseUtility";
20
22
  import { Schema, Schemas } from "../Schema";
21
23
  import { HubMock } from "../internal/HubMock";
22
24
  import { KnownTestLocations } from "./KnownTestLocations";
23
- import { _hubAccess } from "../internal/Symbols";
24
25
  chai.use(chaiAsPromised);
25
26
  /* eslint-disable @typescript-eslint/explicit-member-accessibility */
26
27
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
@@ -34,15 +35,15 @@ export class TestElementDrivesElement extends ElementDrivesElement {
34
35
  static get className() { return "TestElementDrivesElement"; }
35
36
  static rootChanged = new BeEvent();
36
37
  static deletedDependency = new BeEvent();
37
- static onRootChanged(props, imodel) { this.rootChanged.raiseEvent(props, imodel); }
38
- static onDeletedDependency(props, imodel) { this.deletedDependency.raiseEvent(props, imodel); }
38
+ static onRootChangedArg(arg) { this.rootChanged.raiseEvent(arg); }
39
+ static onDeletedDependencyArg(arg) { this.deletedDependency.raiseEvent(arg); }
39
40
  }
40
41
  export class TestPhysicalObject extends PhysicalElement {
41
42
  static get className() { return "TestPhysicalObject"; }
42
43
  static beforeOutputsHandled = new BeEvent();
43
44
  static allInputsHandled = new BeEvent();
44
- static onBeforeOutputsHandled(id, imodel) { this.beforeOutputsHandled.raiseEvent(id, imodel); }
45
- static onAllInputsHandled(id, imodel) { this.allInputsHandled.raiseEvent(id, imodel); }
45
+ static onBeforeOutputsHandledArg(arg) { this.beforeOutputsHandled.raiseEvent(arg); }
46
+ static onAllInputsHandledArg(arg) { this.allInputsHandled.raiseEvent(arg); }
46
47
  }
47
48
  /** the types of users available for tests */
48
49
  export var TestUserType;
@@ -58,6 +59,10 @@ export var TestUserType;
58
59
  */
59
60
  export class HubWrappers {
60
61
  static get hubMock() { return HubMock; }
62
+ static isTransientBriefcaseOpenError(error) {
63
+ const message = error instanceof Error ? error.message : String(error);
64
+ return message.includes("EBUSY") || message.includes("EPERM") || message.includes("database is locked");
65
+ }
61
66
  static async getAccessToken(user) {
62
67
  return TestUserType[user];
63
68
  }
@@ -102,14 +107,24 @@ export class HubWrappers {
102
107
  }
103
108
  /** Helper to open a briefcase db directly with the BriefcaseManager API */
104
109
  static async downloadAndOpenBriefcase(args) {
105
- const props = await BriefcaseManager.downloadBriefcase(args);
106
- if (args.noLock) {
107
- const briefcase = await BriefcaseDb.open({ fileName: props.fileName });
108
- briefcase[_nativeDb].saveLocalValue(BriefcaseLocalValue.NoLocking, "true");
109
- briefcase.saveChanges();
110
- briefcase.close();
110
+ const maxAttempts = 10;
111
+ for (let attempt = 1;; attempt++) {
112
+ try {
113
+ const props = await BriefcaseManager.downloadBriefcase(args);
114
+ if (args.noLock) {
115
+ const briefcase = await BriefcaseDb.open({ fileName: props.fileName });
116
+ briefcase[_nativeDb].saveLocalValue(BriefcaseLocalValue.NoLocking, "true");
117
+ briefcase[_nativeDb].saveChanges();
118
+ briefcase.close();
119
+ }
120
+ return await BriefcaseDb.open({ fileName: props.fileName });
121
+ }
122
+ catch (error) {
123
+ if (attempt >= maxAttempts || !this.isTransientBriefcaseOpenError(error))
124
+ throw error;
125
+ await new Promise((resolve) => setTimeout(resolve, attempt * 250));
126
+ }
111
127
  }
112
- return BriefcaseDb.open({ fileName: props.fileName });
113
128
  }
114
129
  /** Opens the specific iModel as a Briefcase through the same workflow the IModelReadRpc.getConnectionProps method will use. Replicates the way a frontend would open the iModel. */
115
130
  static async openBriefcaseUsingRpc(args) {
@@ -291,8 +306,8 @@ export class IModelTestUtils {
291
306
  return { id: result };
292
307
  }
293
308
  /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */
294
- static createAndInsertPhysicalPartition(testDb, newModelCode, parentId) {
295
- const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;
309
+ static createAndInsertPhysicalPartition(txn, newModelCode, parentId) {
310
+ const model = parentId ? txn.iModel.elements.getElement(parentId).model : IModel.repositoryModelId;
296
311
  const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);
297
312
  const modeledElementProps = {
298
313
  classFullName: PhysicalPartition.classFullName,
@@ -300,12 +315,12 @@ export class IModelTestUtils {
300
315
  model,
301
316
  code: newModelCode,
302
317
  };
303
- const modeledElement = testDb.elements.createElement(modeledElementProps);
304
- return testDb.elements.insertElement(modeledElement.toJSON());
318
+ const modeledElement = txn.iModel.elements.createElement(modeledElementProps);
319
+ return txn.insertElement(modeledElement.toJSON());
305
320
  }
306
321
  /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */
307
- static async createAndInsertPhysicalPartitionAsync(testDb, newModelCode, parentId) {
308
- const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;
322
+ static async createAndInsertPhysicalPartitionAsync(txn, newModelCode, parentId) {
323
+ const model = parentId ? txn.iModel.elements.getElement(parentId).model : IModel.repositoryModelId;
309
324
  const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);
310
325
  const modeledElementProps = {
311
326
  classFullName: PhysicalPartition.classFullName,
@@ -313,23 +328,25 @@ export class IModelTestUtils {
313
328
  model,
314
329
  code: newModelCode,
315
330
  };
316
- const modeledElement = testDb.elements.createElement(modeledElementProps);
317
- await testDb.locks.acquireLocks({ shared: model });
318
- return testDb.elements.insertElement(modeledElement.toJSON());
331
+ const modeledElement = txn.iModel.elements.createElement(modeledElementProps);
332
+ await txn.iModel.locks.acquireLocks({ shared: model });
333
+ return txn.insertElement(modeledElement.toJSON());
319
334
  }
320
335
  /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */
321
- static createAndInsertPhysicalModel(testDb, modeledElementRef, privateModel = false) {
322
- const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName, isPrivate: privateModel });
323
- const newModelId = newModel.id = testDb.models.insertModel(newModel.toJSON());
336
+ static createAndInsertPhysicalModel(txn, modeledElementRef, privateModel = false) {
337
+ const newModel = txn.iModel.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName, isPrivate: privateModel });
338
+ const newModelId = txn.insertModel(newModel.toJSON());
339
+ newModel.id = newModelId;
324
340
  assert.isTrue(Id64.isValidId64(newModelId));
325
341
  assert.isTrue(Id64.isValidId64(newModel.id));
326
342
  assert.deepEqual(newModelId, newModel.id);
327
343
  return newModelId;
328
344
  }
329
345
  /** Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel. */
330
- static async createAndInsertPhysicalModelAsync(testDb, modeledElementRef, privateModel = false) {
331
- const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName, isPrivate: privateModel });
332
- const newModelId = newModel.insert();
346
+ static async createAndInsertPhysicalModelAsync(txn, modeledElementRef, privateModel = false) {
347
+ const newModel = txn.iModel.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName, isPrivate: privateModel });
348
+ const newModelId = txn.insertModel(newModel.toJSON());
349
+ newModel.id = newModelId;
333
350
  assert.isTrue(Id64.isValidId64(newModelId));
334
351
  assert.isTrue(Id64.isValidId64(newModel.id));
335
352
  assert.deepEqual(newModelId, newModel.id);
@@ -339,25 +356,25 @@ export class IModelTestUtils {
339
356
  * Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel.
340
357
  * @return [modeledElementId, modelId]
341
358
  */
342
- static createAndInsertPhysicalPartitionAndModel(testImodel, newModelCode, privateModel = false, parent) {
343
- const eid = IModelTestUtils.createAndInsertPhysicalPartition(testImodel, newModelCode, parent);
359
+ static createAndInsertPhysicalPartitionAndModel(txn, newModelCode, privateModel = false, parent) {
360
+ const eid = IModelTestUtils.createAndInsertPhysicalPartition(txn, newModelCode, parent);
344
361
  const modeledElementRef = new RelatedElement({ id: eid });
345
- const mid = IModelTestUtils.createAndInsertPhysicalModel(testImodel, modeledElementRef, privateModel);
362
+ const mid = IModelTestUtils.createAndInsertPhysicalModel(txn, modeledElementRef, privateModel);
346
363
  return [eid, mid];
347
364
  }
348
365
  /**
349
366
  * Create and insert a PhysicalPartition element (in the repositoryModel) and an associated PhysicalModel.
350
367
  * @return [modeledElementId, modelId]
351
368
  */
352
- static async createAndInsertPhysicalPartitionAndModelAsync(testImodel, newModelCode, privateModel = false, parentId) {
353
- const eid = await IModelTestUtils.createAndInsertPhysicalPartitionAsync(testImodel, newModelCode, parentId);
369
+ static async createAndInsertPhysicalPartitionAndModelAsync(txn, newModelCode, privateModel = false, parentId) {
370
+ const eid = await IModelTestUtils.createAndInsertPhysicalPartitionAsync(txn, newModelCode, parentId);
354
371
  const modeledElementRef = new RelatedElement({ id: eid });
355
- const mid = await IModelTestUtils.createAndInsertPhysicalModelAsync(testImodel, modeledElementRef, privateModel);
372
+ const mid = await IModelTestUtils.createAndInsertPhysicalModelAsync(txn, modeledElementRef, privateModel);
356
373
  return [eid, mid];
357
374
  }
358
375
  /** Create and insert a Drawing Partition element (in the repositoryModel). */
359
- static createAndInsertDrawingPartition(testDb, newModelCode, parentId) {
360
- const model = parentId ? testDb.elements.getElement(parentId).model : IModel.repositoryModelId;
376
+ static createAndInsertDrawingPartition(txn, newModelCode, parentId) {
377
+ const model = parentId ? txn.iModel.elements.getElement(parentId).model : IModel.repositoryModelId;
361
378
  const parent = new SubjectOwnsPartitionElements(parentId || IModel.rootSubjectId);
362
379
  const modeledElementProps = {
363
380
  classFullName: Drawing.classFullName,
@@ -365,13 +382,14 @@ export class IModelTestUtils {
365
382
  model,
366
383
  code: newModelCode,
367
384
  };
368
- const modeledElement = testDb.elements.createElement(modeledElementProps);
369
- return testDb.elements.insertElement(modeledElement.toJSON());
385
+ const modeledElement = txn.iModel.elements.createElement(modeledElementProps);
386
+ return txn.insertElement(modeledElement.toJSON());
370
387
  }
371
388
  /** Create and insert a DrawingModel associated with Drawing Partition. */
372
- static createAndInsertDrawingModel(testDb, modeledElementRef, privateModel = false) {
373
- const newModel = testDb.models.createModel({ modeledElement: modeledElementRef, classFullName: DrawingModel.classFullName, isPrivate: privateModel });
374
- const newModelId = newModel.insert();
389
+ static createAndInsertDrawingModel(txn, modeledElementRef, privateModel = false) {
390
+ const newModel = txn.iModel.models.createModel({ modeledElement: modeledElementRef, classFullName: DrawingModel.classFullName, isPrivate: privateModel });
391
+ const newModelId = txn.insertModel(newModel.toJSON());
392
+ newModel.id = newModelId;
375
393
  assert.isTrue(Id64.isValidId64(newModelId));
376
394
  assert.isTrue(Id64.isValidId64(newModel.id));
377
395
  assert.deepEqual(newModelId, newModel.id);
@@ -381,10 +399,10 @@ export class IModelTestUtils {
381
399
  * Create and insert a Drawing Partition element (in the repositoryModel) and an associated DrawingModel.
382
400
  * @return [modeledElementId, modelId]
383
401
  */
384
- static createAndInsertDrawingPartitionAndModel(testImodel, newModelCode, privateModel = false, parent) {
385
- const eid = IModelTestUtils.createAndInsertDrawingPartition(testImodel, newModelCode, parent);
402
+ static createAndInsertDrawingPartitionAndModel(txn, newModelCode, privateModel = false, parent) {
403
+ const eid = IModelTestUtils.createAndInsertDrawingPartition(txn, newModelCode, parent);
386
404
  const modeledElementRef = new RelatedElement({ id: eid });
387
- const mid = IModelTestUtils.createAndInsertDrawingModel(testImodel, modeledElementRef, privateModel);
405
+ const mid = IModelTestUtils.createAndInsertDrawingModel(txn, modeledElementRef, privateModel);
388
406
  return [eid, mid];
389
407
  }
390
408
  static getUniqueSpatialCategoryCode(scopeModel, newCodeBaseValue) {
@@ -475,7 +493,7 @@ export class IModelTestUtils {
475
493
  transp: 0,
476
494
  invisible: false,
477
495
  };
478
- return SpatialCategory.insert(iModelDb, modelId, categoryName, appearance);
496
+ return withEditTxn(iModelDb, (txn) => SpatialCategory.insert(txn, modelId, categoryName, appearance));
479
497
  }
480
498
  static createBoxes(subCategoryIds) {
481
499
  const length = 1.0;
@@ -524,12 +542,6 @@ export class IModelTestUtils {
524
542
  ]));
525
543
  return geometryStreamBuilder.geometryStream;
526
544
  }
527
- static insertTextureElement(iModelDb, modelId, textureName) {
528
- // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in bottom right pixel. The rest of the square is red.
529
- const pngData = [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217, 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65, 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];
530
- const textureData = Buffer.from(pngData).toString("base64");
531
- return Texture.insertTexture(iModelDb, modelId, textureName, ImageSourceFormat.Png, textureData, `Description for ${textureName}`);
532
- }
533
545
  static queryByUserLabel(iModelDb, userLabel) {
534
546
  // eslint-disable-next-line @typescript-eslint/no-deprecated
535
547
  return iModelDb.withPreparedStatement(`SELECT ECInstanceId FROM ${Element.classFullName} WHERE UserLabel=:userLabel`, (statement) => {
@@ -544,17 +556,17 @@ export class IModelTestUtils {
544
556
  return DbResult.BE_SQLITE_ROW === statement.step() ? statement.getValue(0).getId() : Id64.invalid;
545
557
  });
546
558
  }
547
- static insertRepositoryLink(iModelDb, codeValue, url, format) {
559
+ static insertRepositoryLink(txn, codeValue, url, format) {
548
560
  const repositoryLinkProps = {
549
561
  classFullName: RepositoryLink.classFullName,
550
562
  model: IModel.repositoryModelId,
551
- code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),
563
+ code: LinkElement.createCode(txn.iModel, IModel.repositoryModelId, codeValue),
552
564
  url,
553
565
  format,
554
566
  };
555
- return iModelDb.elements.insertElement(repositoryLinkProps);
567
+ return txn.insertElement(repositoryLinkProps);
556
568
  }
557
- static insertExternalSource(iModelDb, repositoryId, userLabel) {
569
+ static insertExternalSource(txn, repositoryId, userLabel) {
558
570
  const externalSourceProps = {
559
571
  classFullName: ExternalSource.classFullName,
560
572
  model: IModel.repositoryModelId,
@@ -564,7 +576,7 @@ export class IModelTestUtils {
564
576
  connectorName: "Connector",
565
577
  connectorVersion: "0.0.1",
566
578
  };
567
- return iModelDb.elements.insertElement(externalSourceProps);
579
+ return txn.insertElement(externalSourceProps);
568
580
  }
569
581
  static dumpIModelInfo(iModelDb) {
570
582
  const outputFileName = `${iModelDb.pathName}.info.txt`;
@@ -647,403 +659,408 @@ export class ExtensiveTestScenario {
647
659
  expect(arialFontId).greaterThan(0);
648
660
  // Initialize project extents
649
661
  const projectExtents = new Range3d(-1000, -1000, -1000, 1000, 1000, 1000);
650
- sourceDb.updateProjectExtents(projectExtents);
651
- // Insert CodeSpecs
652
- const codeSpecId1 = sourceDb.codeSpecs.insert("SourceCodeSpec", CodeScopeSpec.Type.Model);
653
- const codeSpecId2 = sourceDb.codeSpecs.insert("ExtraCodeSpec", CodeScopeSpec.Type.ParentElement);
654
- const codeSpecId3 = sourceDb.codeSpecs.insert("InformationRecords", CodeScopeSpec.Type.Model);
655
- assert.isTrue(Id64.isValidId64(codeSpecId1));
656
- assert.isTrue(Id64.isValidId64(codeSpecId2));
657
- assert.isTrue(Id64.isValidId64(codeSpecId3));
658
- // Insert RepositoryModel structure
659
- const subjectId = Subject.insert(sourceDb, IModel.rootSubjectId, "Subject", "Subject Description");
660
- assert.isTrue(Id64.isValidId64(subjectId));
661
- const sourceOnlySubjectId = Subject.insert(sourceDb, IModel.rootSubjectId, "Only in Source");
662
- assert.isTrue(Id64.isValidId64(sourceOnlySubjectId));
663
- const definitionModelId = DefinitionModel.insert(sourceDb, subjectId, "Definition");
664
- assert.isTrue(Id64.isValidId64(definitionModelId));
665
- const informationModelId = InformationRecordModel.insert(sourceDb, subjectId, "Information");
666
- assert.isTrue(Id64.isValidId64(informationModelId));
667
- const groupModelId = GroupModel.insert(sourceDb, subjectId, "Group");
668
- assert.isTrue(Id64.isValidId64(groupModelId));
669
- const physicalModelId = PhysicalModel.insert(sourceDb, subjectId, "Physical");
670
- assert.isTrue(Id64.isValidId64(physicalModelId));
671
- const spatialLocationModelId = SpatialLocationModel.insert(sourceDb, subjectId, "SpatialLocation", true);
672
- assert.isTrue(Id64.isValidId64(spatialLocationModelId));
673
- const functionalModelId = FunctionalModel.insert(sourceDb, subjectId, "Functional");
674
- assert.isTrue(Id64.isValidId64(functionalModelId));
675
- const documentListModelId = DocumentListModel.insert(sourceDb, subjectId, "Document");
676
- assert.isTrue(Id64.isValidId64(documentListModelId));
677
- const drawingId = Drawing.insert(sourceDb, documentListModelId, "Drawing");
678
- assert.isTrue(Id64.isValidId64(drawingId));
679
- // Insert DefinitionElements
680
- const modelSelectorId = ModelSelector.insert(sourceDb, definitionModelId, "SpatialModels", [physicalModelId, spatialLocationModelId]);
681
- assert.isTrue(Id64.isValidId64(modelSelectorId));
682
- const spatialCategoryId = IModelTestUtils.insertSpatialCategory(sourceDb, definitionModelId, "SpatialCategory", ColorDef.green);
683
- assert.isTrue(Id64.isValidId64(spatialCategoryId));
684
- const sourcePhysicalCategoryId = IModelTestUtils.insertSpatialCategory(sourceDb, definitionModelId, "SourcePhysicalCategory", ColorDef.blue);
685
- assert.isTrue(Id64.isValidId64(sourcePhysicalCategoryId));
686
- const subCategoryId = SubCategory.insert(sourceDb, spatialCategoryId, "SubCategory", { color: ColorDef.blue.toJSON() });
687
- assert.isTrue(Id64.isValidId64(subCategoryId));
688
- const filteredSubCategoryId = SubCategory.insert(sourceDb, spatialCategoryId, "FilteredSubCategory", { color: ColorDef.green.toJSON() });
689
- assert.isTrue(Id64.isValidId64(filteredSubCategoryId));
690
- const drawingCategoryId = DrawingCategory.insert(sourceDb, definitionModelId, "DrawingCategory", new SubCategoryAppearance());
691
- assert.isTrue(Id64.isValidId64(drawingCategoryId));
692
- const spatialCategorySelectorId = CategorySelector.insert(sourceDb, definitionModelId, "SpatialCategories", [spatialCategoryId, sourcePhysicalCategoryId]);
693
- assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));
694
- const drawingCategorySelectorId = CategorySelector.insert(sourceDb, definitionModelId, "DrawingCategories", [drawingCategoryId]);
695
- assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));
696
- const auxCoordSystemProps = {
697
- classFullName: AuxCoordSystem2d.classFullName,
698
- model: definitionModelId,
699
- code: AuxCoordSystem2d.createCode(sourceDb, definitionModelId, "AuxCoordSystem2d"),
700
- };
701
- const auxCoordSystemId = sourceDb.elements.insertElement(auxCoordSystemProps);
702
- assert.isTrue(Id64.isValidId64(auxCoordSystemId));
703
- const textureId = IModelTestUtils.insertTextureElement(sourceDb, definitionModelId, "Texture");
704
- assert.isTrue(Id64.isValidId64(textureId));
705
- const renderMaterialId = RenderMaterialElement.insert(sourceDb, definitionModelId, "RenderMaterial", { paletteName: "PaletteName" });
706
- assert.isTrue(Id64.isValidId64(renderMaterialId));
707
- const geometryPartProps = {
708
- classFullName: GeometryPart.classFullName,
709
- model: definitionModelId,
710
- code: GeometryPart.createCode(sourceDb, definitionModelId, "GeometryPart"),
711
- geom: IModelTestUtils.createBox(Point3d.create(3, 3, 3)),
712
- };
713
- const geometryPartId = sourceDb.elements.insertElement(geometryPartProps);
714
- assert.isTrue(Id64.isValidId64(geometryPartId));
715
- // Insert InformationRecords
716
- const informationRecordProps1 = {
717
- classFullName: "ExtensiveTestScenario:SourceInformationRecord",
718
- model: informationModelId,
719
- code: { spec: codeSpecId3, scope: informationModelId, value: "InformationRecord1" },
720
- commonString: "Common1",
721
- sourceString: "One",
722
- };
723
- const informationRecordId1 = sourceDb.elements.insertElement(informationRecordProps1);
724
- assert.isTrue(Id64.isValidId64(informationRecordId1));
725
- const informationRecordProps2 = {
726
- classFullName: "ExtensiveTestScenario:SourceInformationRecord",
727
- model: informationModelId,
728
- code: { spec: codeSpecId3, scope: informationModelId, value: "InformationRecord2" },
729
- commonString: "Common2",
730
- sourceString: "Two",
731
- };
732
- const informationRecordId2 = sourceDb.elements.insertElement(informationRecordProps2);
733
- assert.isTrue(Id64.isValidId64(informationRecordId2));
734
- const informationRecordProps3 = {
735
- classFullName: "ExtensiveTestScenario:SourceInformationRecord",
736
- model: informationModelId,
737
- code: { spec: codeSpecId3, scope: informationModelId, value: "InformationRecord3" },
738
- commonString: "Common3",
739
- sourceString: "Three",
740
- };
741
- const informationRecordId3 = sourceDb.elements.insertElement(informationRecordProps3);
742
- assert.isTrue(Id64.isValidId64(informationRecordId3));
743
- // Insert PhysicalObject1
744
- const physicalObjectProps1 = {
745
- classFullName: PhysicalObject.classFullName,
746
- model: physicalModelId,
747
- category: spatialCategoryId,
748
- code: Code.createEmpty(),
749
- userLabel: "PhysicalObject1",
750
- geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, subCategoryId, renderMaterialId, geometryPartId),
751
- placement: {
752
- origin: Point3d.create(1, 1, 1),
753
- angles: YawPitchRollAngles.createDegrees(0, 0, 0),
754
- },
755
- };
756
- const physicalObjectId1 = sourceDb.elements.insertElement(physicalObjectProps1);
757
- assert.isTrue(Id64.isValidId64(physicalObjectId1));
758
- // Insert PhysicalObject1 children
759
- const childObjectProps1A = physicalObjectProps1;
760
- childObjectProps1A.userLabel = "ChildObject1A";
761
- childObjectProps1A.parent = new ElementOwnsChildElements(physicalObjectId1);
762
- childObjectProps1A.placement.origin = Point3d.create(0, 1, 1);
763
- const childObjectId1A = sourceDb.elements.insertElement(childObjectProps1A);
764
- assert.isTrue(Id64.isValidId64(childObjectId1A));
765
- const childObjectProps1B = childObjectProps1A;
766
- childObjectProps1B.userLabel = "ChildObject1B";
767
- childObjectProps1B.placement.origin = Point3d.create(1, 0, 1);
768
- const childObjectId1B = sourceDb.elements.insertElement(childObjectProps1B);
769
- assert.isTrue(Id64.isValidId64(childObjectId1B));
770
- // Insert PhysicalObject2
771
- const physicalObjectProps2 = {
772
- classFullName: PhysicalObject.classFullName,
773
- model: physicalModelId,
774
- category: sourcePhysicalCategoryId,
775
- code: Code.createEmpty(),
776
- userLabel: "PhysicalObject2",
777
- geom: IModelTestUtils.createBox(Point3d.create(2, 2, 2)),
778
- placement: {
779
- origin: Point3d.create(2, 2, 2),
780
- angles: YawPitchRollAngles.createDegrees(0, 0, 0),
781
- },
782
- };
783
- const physicalObjectId2 = sourceDb.elements.insertElement(physicalObjectProps2);
784
- assert.isTrue(Id64.isValidId64(physicalObjectId2));
785
- // Insert PhysicalObject3
786
- const physicalObjectProps3 = {
787
- classFullName: PhysicalObject.classFullName,
788
- model: physicalModelId,
789
- category: sourcePhysicalCategoryId,
790
- code: Code.createEmpty(),
791
- federationGuid: ExtensiveTestScenario.federationGuid3,
792
- userLabel: "PhysicalObject3",
793
- };
794
- const physicalObjectId3 = sourceDb.elements.insertElement(physicalObjectProps3);
795
- assert.isTrue(Id64.isValidId64(physicalObjectId3));
796
- // Insert PhysicalObject4
797
- const physicalObjectProps4 = {
798
- classFullName: PhysicalObject.classFullName,
799
- model: physicalModelId,
800
- category: spatialCategoryId,
801
- code: Code.createEmpty(),
802
- userLabel: "PhysicalObject4",
803
- geom: IModelTestUtils.createBoxes([subCategoryId, filteredSubCategoryId]),
804
- placement: {
805
- origin: Point3d.create(4, 4, 4),
806
- angles: YawPitchRollAngles.createDegrees(0, 0, 0),
807
- },
808
- };
809
- const physicalObjectId4 = sourceDb.elements.insertElement(physicalObjectProps4);
810
- assert.isTrue(Id64.isValidId64(physicalObjectId4));
811
- // Insert PhysicalElement1
812
- const sourcePhysicalElementProps = {
813
- classFullName: "ExtensiveTestScenario:SourcePhysicalElement",
814
- model: physicalModelId,
815
- category: sourcePhysicalCategoryId,
816
- code: Code.createEmpty(),
817
- userLabel: "PhysicalElement1",
818
- geom: IModelTestUtils.createBox(Point3d.create(2, 2, 2)),
819
- placement: {
820
- origin: Point3d.create(4, 4, 4),
821
- angles: YawPitchRollAngles.createDegrees(0, 0, 0),
822
- },
823
- sourceString: "S1",
824
- sourceDouble: 1.1,
825
- sourceNavigation: { id: sourcePhysicalCategoryId, relClassName: "ExtensiveTestScenario:SourcePhysicalElementUsesSourceDefinition" },
826
- commonNavigation: { id: sourcePhysicalCategoryId },
827
- commonString: "Common",
828
- commonDouble: 7.3,
829
- sourceBinary: new Uint8Array([1, 3, 5, 7]),
830
- commonBinary: Base64EncodedString.fromUint8Array(new Uint8Array([2, 4, 6, 8])),
831
- extraString: "Extra",
832
- };
833
- const sourcePhysicalElementId = sourceDb.elements.insertElement(sourcePhysicalElementProps);
834
- assert.isTrue(Id64.isValidId64(sourcePhysicalElementId));
835
- assert.doesNotThrow(() => sourceDb.elements.getElement(sourcePhysicalElementId));
836
- // Insert ElementAspects
837
- const aspectProps = {
838
- classFullName: "ExtensiveTestScenario:SourceUniqueAspect",
839
- element: new ElementOwnsUniqueAspect(physicalObjectId1),
840
- commonDouble: 1.1,
841
- commonString: "Unique",
842
- commonLong: physicalObjectId1,
843
- commonBinary: Base64EncodedString.fromUint8Array(new Uint8Array([2, 4, 6, 8])),
844
- sourceDouble: 11.1,
845
- sourceString: "UniqueAspect",
846
- sourceLong: physicalObjectId1,
847
- sourceGuid: ExtensiveTestScenario.uniqueAspectGuid,
848
- extraString: "Extra",
849
- };
850
- sourceDb.elements.insertAspect(aspectProps);
851
- const sourceUniqueAspect = sourceDb.elements.getAspects(physicalObjectId1, "ExtensiveTestScenario:SourceUniqueAspect")[0];
852
- expect(sourceUniqueAspect).to.deep.subsetEqual(omit(aspectProps, ["commonBinary"]), { normalizeClassNameProps: true });
853
- sourceDb.elements.insertAspect({
854
- classFullName: "ExtensiveTestScenario:SourceMultiAspect",
855
- element: new ElementOwnsMultiAspects(physicalObjectId1),
856
- commonDouble: 2.2,
857
- commonString: "Multi",
858
- commonLong: physicalObjectId1,
859
- sourceDouble: 22.2,
860
- sourceString: "MultiAspect",
861
- sourceLong: physicalObjectId1,
862
- sourceGuid: Guid.createValue(),
863
- extraString: "Extra",
864
- });
865
- sourceDb.elements.insertAspect({
866
- classFullName: "ExtensiveTestScenario:SourceMultiAspect",
867
- element: new ElementOwnsMultiAspects(physicalObjectId1),
868
- commonDouble: 3.3,
869
- commonString: "Multi",
870
- commonLong: physicalObjectId1,
871
- sourceDouble: 33.3,
872
- sourceString: "MultiAspect",
873
- sourceLong: physicalObjectId1,
874
- sourceGuid: Guid.createValue(),
875
- extraString: "Extra",
876
- });
877
- sourceDb.elements.insertAspect({
878
- classFullName: "ExtensiveTestScenario:SourceUniqueAspectToExclude",
879
- element: new ElementOwnsUniqueAspect(physicalObjectId1),
880
- description: "SourceUniqueAspect1",
881
- });
882
- sourceDb.elements.insertAspect({
883
- classFullName: "ExtensiveTestScenario:SourceMultiAspectToExclude",
884
- element: new ElementOwnsMultiAspects(physicalObjectId1),
885
- description: "SourceMultiAspect1",
886
- });
887
- // Insert DrawingGraphics
888
- const drawingGraphicProps1 = {
889
- classFullName: DrawingGraphic.classFullName,
890
- model: drawingId,
891
- category: drawingCategoryId,
892
- code: Code.createEmpty(),
893
- userLabel: "DrawingGraphic1",
894
- geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),
895
- placement: { origin: Point2d.create(2, 2), angle: 0 },
896
- };
897
- const drawingGraphicId1 = sourceDb.elements.insertElement(drawingGraphicProps1);
898
- assert.isTrue(Id64.isValidId64(drawingGraphicId1));
899
- const drawingGraphicRepresentsId1 = DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId1, physicalObjectId1);
900
- assert.isTrue(Id64.isValidId64(drawingGraphicRepresentsId1));
901
- const drawingGraphicProps2 = {
902
- classFullName: DrawingGraphic.classFullName,
903
- model: drawingId,
904
- category: drawingCategoryId,
905
- code: Code.createEmpty(),
906
- userLabel: "DrawingGraphic2",
907
- geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),
908
- placement: { origin: Point2d.create(3, 3), angle: 0 },
909
- };
910
- const drawingGraphicId2 = sourceDb.elements.insertElement(drawingGraphicProps2);
911
- assert.isTrue(Id64.isValidId64(drawingGraphicId2));
912
- const drawingGraphicRepresentsId2 = DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId2, physicalObjectId1);
913
- assert.isTrue(Id64.isValidId64(drawingGraphicRepresentsId2));
914
- // Insert DisplayStyles
915
- const displayStyle2dId = DisplayStyle2d.insert(sourceDb, definitionModelId, "DisplayStyle2d");
916
- assert.isTrue(Id64.isValidId64(displayStyle2dId));
917
- const displayStyle3d = DisplayStyle3d.create(sourceDb, definitionModelId, "DisplayStyle3d");
918
- const subCategoryOverride = SubCategoryOverride.fromJSON({ color: ColorDef.from(1, 2, 3).toJSON() });
919
- displayStyle3d.settings.overrideSubCategory(subCategoryId, subCategoryOverride);
920
- displayStyle3d.settings.addExcludedElements(physicalObjectId1);
921
- displayStyle3d.settings.setPlanProjectionSettings(spatialLocationModelId, PlanProjectionSettings.fromJSON({ elevation: 10.0 }));
922
- displayStyle3d.settings.environment = Environment.fromJSON({
923
- sky: {
924
- image: {
925
- type: SkyBoxImageType.Spherical,
926
- texture: textureId,
662
+ await withEditTxn(sourceDb, async (txn) => {
663
+ txn.updateProjectExtents(projectExtents);
664
+ // Insert CodeSpecs
665
+ const codeSpecId1 = sourceDb.codeSpecs.insert(txn, "SourceCodeSpec", CodeScopeSpec.Type.Model);
666
+ const codeSpecId2 = sourceDb.codeSpecs.insert(txn, "ExtraCodeSpec", CodeScopeSpec.Type.ParentElement);
667
+ const codeSpecId3 = sourceDb.codeSpecs.insert(txn, "InformationRecords", CodeScopeSpec.Type.Model);
668
+ assert.isTrue(Id64.isValidId64(codeSpecId1));
669
+ assert.isTrue(Id64.isValidId64(codeSpecId2));
670
+ assert.isTrue(Id64.isValidId64(codeSpecId3));
671
+ // Insert RepositoryModel structure
672
+ const subjectId = Subject.insert(txn, IModel.rootSubjectId, "Subject", "Subject Description");
673
+ assert.isTrue(Id64.isValidId64(subjectId));
674
+ const sourceOnlySubjectId = Subject.insert(txn, IModel.rootSubjectId, "Only in Source");
675
+ assert.isTrue(Id64.isValidId64(sourceOnlySubjectId));
676
+ const definitionModelId = DefinitionModel.insert(txn, subjectId, "Definition");
677
+ assert.isTrue(Id64.isValidId64(definitionModelId));
678
+ const informationModelId = InformationRecordModel.insert(txn, subjectId, "Information");
679
+ assert.isTrue(Id64.isValidId64(informationModelId));
680
+ const groupModelId = GroupModel.insert(txn, subjectId, "Group");
681
+ assert.isTrue(Id64.isValidId64(groupModelId));
682
+ const physicalModelId = PhysicalModel.insert(txn, subjectId, "Physical");
683
+ assert.isTrue(Id64.isValidId64(physicalModelId));
684
+ const spatialLocationModelId = SpatialLocationModel.insert(txn, subjectId, "SpatialLocation", true);
685
+ assert.isTrue(Id64.isValidId64(spatialLocationModelId));
686
+ const functionalModelId = FunctionalModel.insert(txn, subjectId, "Functional");
687
+ assert.isTrue(Id64.isValidId64(functionalModelId));
688
+ const documentListModelId = DocumentListModel.insert(txn, subjectId, "Document");
689
+ assert.isTrue(Id64.isValidId64(documentListModelId));
690
+ const drawingId = Drawing.insert(txn, documentListModelId, "Drawing");
691
+ assert.isTrue(Id64.isValidId64(drawingId));
692
+ // Insert DefinitionElements
693
+ const modelSelectorId = ModelSelector.insert(txn, definitionModelId, "SpatialModels", [physicalModelId, spatialLocationModelId]);
694
+ assert.isTrue(Id64.isValidId64(modelSelectorId));
695
+ const spatialCategoryId = SpatialCategory.insert(txn, definitionModelId, "SpatialCategory", { color: ColorDef.green.toJSON(), transp: 0, invisible: false });
696
+ assert.isTrue(Id64.isValidId64(spatialCategoryId));
697
+ const sourcePhysicalCategoryId = SpatialCategory.insert(txn, definitionModelId, "SourcePhysicalCategory", { color: ColorDef.blue.toJSON(), transp: 0, invisible: false });
698
+ assert.isTrue(Id64.isValidId64(sourcePhysicalCategoryId));
699
+ const subCategoryId = SubCategory.insert(txn, spatialCategoryId, "SubCategory", { color: ColorDef.blue.toJSON() });
700
+ assert.isTrue(Id64.isValidId64(subCategoryId));
701
+ const filteredSubCategoryId = SubCategory.insert(txn, spatialCategoryId, "FilteredSubCategory", { color: ColorDef.green.toJSON() });
702
+ assert.isTrue(Id64.isValidId64(filteredSubCategoryId));
703
+ const drawingCategoryId = DrawingCategory.insert(txn, definitionModelId, "DrawingCategory", new SubCategoryAppearance());
704
+ assert.isTrue(Id64.isValidId64(drawingCategoryId));
705
+ const spatialCategorySelectorId = CategorySelector.insert(txn, definitionModelId, "SpatialCategories", [spatialCategoryId, sourcePhysicalCategoryId]);
706
+ assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));
707
+ const drawingCategorySelectorId = CategorySelector.insert(txn, definitionModelId, "DrawingCategories", [drawingCategoryId]);
708
+ assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));
709
+ const auxCoordSystemProps = {
710
+ classFullName: AuxCoordSystem2d.classFullName,
711
+ model: definitionModelId,
712
+ code: AuxCoordSystem2d.createCode(sourceDb, definitionModelId, "AuxCoordSystem2d"),
713
+ };
714
+ const auxCoordSystemId = txn.insertElement(auxCoordSystemProps);
715
+ assert.isTrue(Id64.isValidId64(auxCoordSystemId));
716
+ const pngData = [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217, 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65, 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];
717
+ const textureId = Texture.insertTexture(txn, definitionModelId, "Texture", ImageSourceFormat.Png, Buffer.from(pngData).toString("base64"), "Description for Texture");
718
+ assert.isTrue(Id64.isValidId64(textureId));
719
+ const renderMaterialId = RenderMaterialElement.insert(txn, definitionModelId, "RenderMaterial", { paletteName: "PaletteName" });
720
+ assert.isTrue(Id64.isValidId64(renderMaterialId));
721
+ const geometryPartProps = {
722
+ classFullName: GeometryPart.classFullName,
723
+ model: definitionModelId,
724
+ code: GeometryPart.createCode(sourceDb, definitionModelId, "GeometryPart"),
725
+ geom: IModelTestUtils.createBox(Point3d.create(3, 3, 3)),
726
+ };
727
+ const geometryPartId = txn.insertElement(geometryPartProps);
728
+ assert.isTrue(Id64.isValidId64(geometryPartId));
729
+ // Insert InformationRecords
730
+ const informationRecordProps1 = {
731
+ classFullName: "ExtensiveTestScenario:SourceInformationRecord",
732
+ model: informationModelId,
733
+ code: { spec: codeSpecId3, scope: informationModelId, value: "InformationRecord1" },
734
+ commonString: "Common1",
735
+ sourceString: "One",
736
+ };
737
+ const informationRecordId1 = txn.insertElement(informationRecordProps1);
738
+ assert.isTrue(Id64.isValidId64(informationRecordId1));
739
+ const informationRecordProps2 = {
740
+ classFullName: "ExtensiveTestScenario:SourceInformationRecord",
741
+ model: informationModelId,
742
+ code: { spec: codeSpecId3, scope: informationModelId, value: "InformationRecord2" },
743
+ commonString: "Common2",
744
+ sourceString: "Two",
745
+ };
746
+ const informationRecordId2 = txn.insertElement(informationRecordProps2);
747
+ assert.isTrue(Id64.isValidId64(informationRecordId2));
748
+ const informationRecordProps3 = {
749
+ classFullName: "ExtensiveTestScenario:SourceInformationRecord",
750
+ model: informationModelId,
751
+ code: { spec: codeSpecId3, scope: informationModelId, value: "InformationRecord3" },
752
+ commonString: "Common3",
753
+ sourceString: "Three",
754
+ };
755
+ const informationRecordId3 = txn.insertElement(informationRecordProps3);
756
+ assert.isTrue(Id64.isValidId64(informationRecordId3));
757
+ // Insert PhysicalObject1
758
+ const physicalObjectProps1 = {
759
+ classFullName: PhysicalObject.classFullName,
760
+ model: physicalModelId,
761
+ category: spatialCategoryId,
762
+ code: Code.createEmpty(),
763
+ userLabel: "PhysicalObject1",
764
+ geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, subCategoryId, renderMaterialId, geometryPartId),
765
+ placement: {
766
+ origin: Point3d.create(1, 1, 1),
767
+ angles: YawPitchRollAngles.createDegrees(0, 0, 0),
927
768
  },
928
- },
929
- });
930
- const displayStyle3dId = displayStyle3d.insert();
931
- assert.isTrue(Id64.isValidId64(displayStyle3dId));
932
- // Insert ViewDefinitions
933
- const viewId = OrthographicViewDefinition.insert(sourceDb, definitionModelId, "Orthographic View", modelSelectorId, spatialCategorySelectorId, displayStyle3dId, projectExtents, StandardViewIndex.Iso);
934
- assert.isTrue(Id64.isValidId64(viewId));
935
- const drawingViewRange = new Range2d(0, 0, 100, 100);
936
- const drawingViewId = DrawingViewDefinition.insert(sourceDb, definitionModelId, "Drawing View", drawingId, drawingCategorySelectorId, displayStyle2dId, drawingViewRange);
937
- assert.isTrue(Id64.isValidId64(drawingViewId));
938
- // Insert instance of SourceRelToExclude to test relationship exclusion by class
939
- const relationship1 = sourceDb.relationships.createInstance({
940
- classFullName: "ExtensiveTestScenario:SourceRelToExclude",
941
- sourceId: spatialCategorySelectorId,
942
- targetId: drawingCategorySelectorId,
943
- });
944
- const relationshipId1 = sourceDb.relationships.insertInstance(relationship1.toJSON());
945
- assert.isTrue(Id64.isValidId64(relationshipId1));
946
- // Insert instance of RelWithProps to test relationship property remapping
947
- const relationship2 = sourceDb.relationships.createInstance({
948
- classFullName: "ExtensiveTestScenario:SourceRelWithProps",
949
- sourceId: spatialCategorySelectorId,
950
- targetId: drawingCategorySelectorId,
951
- sourceString: "One",
952
- sourceDouble: 1.1,
953
- sourceLong: spatialCategoryId,
954
- sourceGuid: Guid.createValue(),
955
- });
956
- const relationshipId2 = sourceDb.relationships.insertInstance(relationship2.toJSON());
957
- assert.isTrue(Id64.isValidId64(relationshipId2));
769
+ };
770
+ const physicalObjectId1 = txn.insertElement(physicalObjectProps1);
771
+ assert.isTrue(Id64.isValidId64(physicalObjectId1));
772
+ // Insert PhysicalObject1 children
773
+ const childObjectProps1A = physicalObjectProps1;
774
+ childObjectProps1A.userLabel = "ChildObject1A";
775
+ childObjectProps1A.parent = new ElementOwnsChildElements(physicalObjectId1);
776
+ childObjectProps1A.placement.origin = Point3d.create(0, 1, 1);
777
+ const childObjectId1A = txn.insertElement(childObjectProps1A);
778
+ assert.isTrue(Id64.isValidId64(childObjectId1A));
779
+ const childObjectProps1B = childObjectProps1A;
780
+ childObjectProps1B.userLabel = "ChildObject1B";
781
+ childObjectProps1B.placement.origin = Point3d.create(1, 0, 1);
782
+ const childObjectId1B = txn.insertElement(childObjectProps1B);
783
+ assert.isTrue(Id64.isValidId64(childObjectId1B));
784
+ // Insert PhysicalObject2
785
+ const physicalObjectProps2 = {
786
+ classFullName: PhysicalObject.classFullName,
787
+ model: physicalModelId,
788
+ category: sourcePhysicalCategoryId,
789
+ code: Code.createEmpty(),
790
+ userLabel: "PhysicalObject2",
791
+ geom: IModelTestUtils.createBox(Point3d.create(2, 2, 2)),
792
+ placement: {
793
+ origin: Point3d.create(2, 2, 2),
794
+ angles: YawPitchRollAngles.createDegrees(0, 0, 0),
795
+ },
796
+ };
797
+ const physicalObjectId2 = txn.insertElement(physicalObjectProps2);
798
+ assert.isTrue(Id64.isValidId64(physicalObjectId2));
799
+ // Insert PhysicalObject3
800
+ const physicalObjectProps3 = {
801
+ classFullName: PhysicalObject.classFullName,
802
+ model: physicalModelId,
803
+ category: sourcePhysicalCategoryId,
804
+ code: Code.createEmpty(),
805
+ federationGuid: ExtensiveTestScenario.federationGuid3,
806
+ userLabel: "PhysicalObject3",
807
+ };
808
+ const physicalObjectId3 = txn.insertElement(physicalObjectProps3);
809
+ assert.isTrue(Id64.isValidId64(physicalObjectId3));
810
+ // Insert PhysicalObject4
811
+ const physicalObjectProps4 = {
812
+ classFullName: PhysicalObject.classFullName,
813
+ model: physicalModelId,
814
+ category: spatialCategoryId,
815
+ code: Code.createEmpty(),
816
+ userLabel: "PhysicalObject4",
817
+ geom: IModelTestUtils.createBoxes([subCategoryId, filteredSubCategoryId]),
818
+ placement: {
819
+ origin: Point3d.create(4, 4, 4),
820
+ angles: YawPitchRollAngles.createDegrees(0, 0, 0),
821
+ },
822
+ };
823
+ const physicalObjectId4 = txn.insertElement(physicalObjectProps4);
824
+ assert.isTrue(Id64.isValidId64(physicalObjectId4));
825
+ // Insert PhysicalElement1
826
+ const sourcePhysicalElementProps = {
827
+ classFullName: "ExtensiveTestScenario:SourcePhysicalElement",
828
+ model: physicalModelId,
829
+ category: sourcePhysicalCategoryId,
830
+ code: Code.createEmpty(),
831
+ userLabel: "PhysicalElement1",
832
+ geom: IModelTestUtils.createBox(Point3d.create(2, 2, 2)),
833
+ placement: {
834
+ origin: Point3d.create(4, 4, 4),
835
+ angles: YawPitchRollAngles.createDegrees(0, 0, 0),
836
+ },
837
+ sourceString: "S1",
838
+ sourceDouble: 1.1,
839
+ sourceNavigation: { id: sourcePhysicalCategoryId, relClassName: "ExtensiveTestScenario:SourcePhysicalElementUsesSourceDefinition" },
840
+ commonNavigation: { id: sourcePhysicalCategoryId },
841
+ commonString: "Common",
842
+ commonDouble: 7.3,
843
+ sourceBinary: new Uint8Array([1, 3, 5, 7]),
844
+ commonBinary: Base64EncodedString.fromUint8Array(new Uint8Array([2, 4, 6, 8])),
845
+ extraString: "Extra",
846
+ };
847
+ const sourcePhysicalElementId = txn.insertElement(sourcePhysicalElementProps);
848
+ assert.isTrue(Id64.isValidId64(sourcePhysicalElementId));
849
+ assert.doesNotThrow(() => sourceDb.elements.getElement(sourcePhysicalElementId));
850
+ // Insert ElementAspects
851
+ const aspectProps = {
852
+ classFullName: "ExtensiveTestScenario:SourceUniqueAspect",
853
+ element: new ElementOwnsUniqueAspect(physicalObjectId1),
854
+ commonDouble: 1.1,
855
+ commonString: "Unique",
856
+ commonLong: physicalObjectId1,
857
+ commonBinary: Base64EncodedString.fromUint8Array(new Uint8Array([2, 4, 6, 8])),
858
+ sourceDouble: 11.1,
859
+ sourceString: "UniqueAspect",
860
+ sourceLong: physicalObjectId1,
861
+ sourceGuid: ExtensiveTestScenario.uniqueAspectGuid,
862
+ extraString: "Extra",
863
+ };
864
+ txn.insertAspect(aspectProps);
865
+ const sourceUniqueAspect = sourceDb.elements.getAspects(physicalObjectId1, "ExtensiveTestScenario:SourceUniqueAspect")[0];
866
+ expect(sourceUniqueAspect).to.deep.subsetEqual(omit(aspectProps, ["commonBinary"]), { normalizeClassNameProps: true });
867
+ txn.insertAspect({
868
+ classFullName: "ExtensiveTestScenario:SourceMultiAspect",
869
+ element: new ElementOwnsMultiAspects(physicalObjectId1),
870
+ commonDouble: 2.2,
871
+ commonString: "Multi",
872
+ commonLong: physicalObjectId1,
873
+ sourceDouble: 22.2,
874
+ sourceString: "MultiAspect",
875
+ sourceLong: physicalObjectId1,
876
+ sourceGuid: Guid.createValue(),
877
+ extraString: "Extra",
878
+ });
879
+ txn.insertAspect({
880
+ classFullName: "ExtensiveTestScenario:SourceMultiAspect",
881
+ element: new ElementOwnsMultiAspects(physicalObjectId1),
882
+ commonDouble: 3.3,
883
+ commonString: "Multi",
884
+ commonLong: physicalObjectId1,
885
+ sourceDouble: 33.3,
886
+ sourceString: "MultiAspect",
887
+ sourceLong: physicalObjectId1,
888
+ sourceGuid: Guid.createValue(),
889
+ extraString: "Extra",
890
+ });
891
+ txn.insertAspect({
892
+ classFullName: "ExtensiveTestScenario:SourceUniqueAspectToExclude",
893
+ element: new ElementOwnsUniqueAspect(physicalObjectId1),
894
+ description: "SourceUniqueAspect1",
895
+ });
896
+ txn.insertAspect({
897
+ classFullName: "ExtensiveTestScenario:SourceMultiAspectToExclude",
898
+ element: new ElementOwnsMultiAspects(physicalObjectId1),
899
+ description: "SourceMultiAspect1",
900
+ });
901
+ // Insert DrawingGraphics
902
+ const drawingGraphicProps1 = {
903
+ classFullName: DrawingGraphic.classFullName,
904
+ model: drawingId,
905
+ category: drawingCategoryId,
906
+ code: Code.createEmpty(),
907
+ userLabel: "DrawingGraphic1",
908
+ geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),
909
+ placement: { origin: Point2d.create(2, 2), angle: 0 },
910
+ };
911
+ const drawingGraphicId1 = txn.insertElement(drawingGraphicProps1);
912
+ assert.isTrue(Id64.isValidId64(drawingGraphicId1));
913
+ const drawingGraphicRepresentsId1 = DrawingGraphicRepresentsElement.insert(txn, drawingGraphicId1, physicalObjectId1);
914
+ assert.isTrue(Id64.isValidId64(drawingGraphicRepresentsId1));
915
+ const drawingGraphicProps2 = {
916
+ classFullName: DrawingGraphic.classFullName,
917
+ model: drawingId,
918
+ category: drawingCategoryId,
919
+ code: Code.createEmpty(),
920
+ userLabel: "DrawingGraphic2",
921
+ geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),
922
+ placement: { origin: Point2d.create(3, 3), angle: 0 },
923
+ };
924
+ const drawingGraphicId2 = txn.insertElement(drawingGraphicProps2);
925
+ assert.isTrue(Id64.isValidId64(drawingGraphicId2));
926
+ const drawingGraphicRepresentsId2 = DrawingGraphicRepresentsElement.insert(txn, drawingGraphicId2, physicalObjectId1);
927
+ assert.isTrue(Id64.isValidId64(drawingGraphicRepresentsId2));
928
+ // Insert DisplayStyles
929
+ const displayStyle2dId = DisplayStyle2d.insert(txn, definitionModelId, "DisplayStyle2d");
930
+ assert.isTrue(Id64.isValidId64(displayStyle2dId));
931
+ const displayStyle3d = DisplayStyle3d.create(sourceDb, definitionModelId, "DisplayStyle3d");
932
+ const subCategoryOverride = SubCategoryOverride.fromJSON({ color: ColorDef.from(1, 2, 3).toJSON() });
933
+ displayStyle3d.settings.overrideSubCategory(subCategoryId, subCategoryOverride);
934
+ displayStyle3d.settings.addExcludedElements(physicalObjectId1);
935
+ displayStyle3d.settings.setPlanProjectionSettings(spatialLocationModelId, PlanProjectionSettings.fromJSON({ elevation: 10.0 }));
936
+ displayStyle3d.settings.environment = Environment.fromJSON({
937
+ sky: {
938
+ image: {
939
+ type: SkyBoxImageType.Spherical,
940
+ texture: textureId,
941
+ },
942
+ },
943
+ });
944
+ const displayStyle3dId = displayStyle3d.insert(txn);
945
+ assert.isTrue(Id64.isValidId64(displayStyle3dId));
946
+ // Insert ViewDefinitions
947
+ const viewId = OrthographicViewDefinition.insert(txn, definitionModelId, "Orthographic View", modelSelectorId, spatialCategorySelectorId, displayStyle3dId, projectExtents, StandardViewIndex.Iso);
948
+ assert.isTrue(Id64.isValidId64(viewId));
949
+ const drawingViewRange = new Range2d(0, 0, 100, 100);
950
+ const drawingViewId = DrawingViewDefinition.insert(txn, definitionModelId, "Drawing View", drawingId, drawingCategorySelectorId, displayStyle2dId, drawingViewRange);
951
+ assert.isTrue(Id64.isValidId64(drawingViewId));
952
+ // Insert instance of SourceRelToExclude to test relationship exclusion by class
953
+ const relationship1 = sourceDb.relationships.createInstance({
954
+ classFullName: "ExtensiveTestScenario:SourceRelToExclude",
955
+ sourceId: spatialCategorySelectorId,
956
+ targetId: drawingCategorySelectorId,
957
+ });
958
+ const relationshipId1 = txn.insertRelationship(relationship1.toJSON());
959
+ assert.isTrue(Id64.isValidId64(relationshipId1));
960
+ // Insert instance of RelWithProps to test relationship property remapping
961
+ const relationship2 = sourceDb.relationships.createInstance({
962
+ classFullName: "ExtensiveTestScenario:SourceRelWithProps",
963
+ sourceId: spatialCategorySelectorId,
964
+ targetId: drawingCategorySelectorId,
965
+ sourceString: "One",
966
+ sourceDouble: 1.1,
967
+ sourceLong: spatialCategoryId,
968
+ sourceGuid: Guid.createValue(),
969
+ });
970
+ const relationshipId2 = txn.insertRelationship(relationship2.toJSON());
971
+ assert.isTrue(Id64.isValidId64(relationshipId2));
972
+ }); // end withEditTxn
958
973
  }
959
974
  static updateDb(sourceDb) {
960
- // Update Subject element
961
- const subjectId = sourceDb.elements.queryElementIdByCode(Subject.createCode(sourceDb, IModel.rootSubjectId, "Subject"));
962
- assert.isTrue(Id64.isValidId64(subjectId));
963
- const subject = sourceDb.elements.getElement(subjectId);
964
- subject.description = "Subject description (Updated)";
965
- sourceDb.elements.updateElement(subject.toJSON());
966
- // Update spatialCategory element
967
- const definitionModelId = sourceDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(sourceDb, subjectId, "Definition"));
968
- assert.isTrue(Id64.isValidId64(definitionModelId));
969
- const spatialCategoryId = sourceDb.elements.queryElementIdByCode(SpatialCategory.createCode(sourceDb, definitionModelId, "SpatialCategory"));
970
- assert.isTrue(Id64.isValidId64(spatialCategoryId));
971
- const spatialCategory = sourceDb.elements.getElement(spatialCategoryId);
972
- spatialCategory.federationGuid = Guid.createValue();
973
- sourceDb.elements.updateElement(spatialCategory.toJSON());
974
- // Update relationship properties
975
- const spatialCategorySelectorId = sourceDb.elements.queryElementIdByCode(CategorySelector.createCode(sourceDb, definitionModelId, "SpatialCategories"));
976
- assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));
977
- const drawingCategorySelectorId = sourceDb.elements.queryElementIdByCode(CategorySelector.createCode(sourceDb, definitionModelId, "DrawingCategories"));
978
- assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));
979
- const relWithProps = sourceDb.relationships.getInstanceProps("ExtensiveTestScenario:SourceRelWithProps", { sourceId: spatialCategorySelectorId, targetId: drawingCategorySelectorId });
980
- assert.equal(relWithProps.sourceString, "One");
981
- assert.equal(relWithProps.sourceDouble, 1.1);
982
- relWithProps.sourceString += "-Updated";
983
- relWithProps.sourceDouble = 1.2;
984
- sourceDb.relationships.updateInstance(relWithProps);
985
- // Update ElementAspect properties
986
- const physicalObjectId1 = IModelTestUtils.queryByUserLabel(sourceDb, "PhysicalObject1");
987
- const sourceUniqueAspects = sourceDb.elements.getAspects(physicalObjectId1, "ExtensiveTestScenario:SourceUniqueAspect");
988
- assert.equal(sourceUniqueAspects.length, 1);
989
- sourceUniqueAspects[0].asAny.commonString += "-Updated";
990
- sourceUniqueAspects[0].asAny.sourceString += "-Updated";
991
- sourceDb.elements.updateAspect(sourceUniqueAspects[0].toJSON());
992
- const sourceMultiAspects = sourceDb.elements.getAspects(physicalObjectId1, "ExtensiveTestScenario:SourceMultiAspect");
993
- assert.equal(sourceMultiAspects.length, 2);
994
- sourceMultiAspects[1].asAny.commonString += "-Updated";
995
- sourceMultiAspects[1].asAny.sourceString += "-Updated";
996
- sourceDb.elements.updateAspect(sourceMultiAspects[1].toJSON());
997
- // clear NavigationProperty of PhysicalElement1
998
- const physicalElementId1 = IModelTestUtils.queryByUserLabel(sourceDb, "PhysicalElement1");
999
- let physicalElement1 = sourceDb.elements.getElement(physicalElementId1);
1000
- physicalElement1.asAny.commonNavigation = RelatedElement.none;
1001
- physicalElement1.update();
1002
- physicalElement1 = sourceDb.elements.getElement(physicalElementId1);
1003
- assert.isUndefined(physicalElement1.asAny.commonNavigation);
1004
- // delete PhysicalObject3
1005
- const physicalObjectId3 = IModelTestUtils.queryByUserLabel(sourceDb, "PhysicalObject3");
1006
- assert.isTrue(Id64.isValidId64(physicalObjectId3));
1007
- sourceDb.elements.deleteElement(physicalObjectId3);
1008
- assert.equal(Id64.invalid, IModelTestUtils.queryByUserLabel(sourceDb, "PhysicalObject3"));
1009
- // Insert PhysicalObject5
1010
- const physicalObjectProps5 = {
1011
- classFullName: PhysicalObject.classFullName,
1012
- model: physicalElement1.model,
1013
- category: spatialCategoryId,
1014
- code: Code.createEmpty(),
1015
- userLabel: "PhysicalObject5",
1016
- geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),
1017
- placement: {
1018
- origin: Point3d.create(5, 5, 5),
1019
- angles: YawPitchRollAngles.createDegrees(0, 0, 0),
1020
- },
1021
- };
1022
- const physicalObjectId5 = sourceDb.elements.insertElement(physicalObjectProps5);
1023
- assert.isTrue(Id64.isValidId64(physicalObjectId5));
1024
- // delete relationship
1025
- const drawingGraphicId1 = IModelTestUtils.queryByUserLabel(sourceDb, "DrawingGraphic1");
1026
- const drawingGraphicId2 = IModelTestUtils.queryByUserLabel(sourceDb, "DrawingGraphic2");
1027
- const relationship = sourceDb.relationships.getInstance(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId2, targetId: physicalObjectId1 });
1028
- relationship.delete();
1029
- // insert relationships
1030
- DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId1, physicalObjectId5);
1031
- DrawingGraphicRepresentsElement.insert(sourceDb, drawingGraphicId2, physicalObjectId5);
1032
- // update InformationRecord2
1033
- const informationRecordCodeSpec = sourceDb.codeSpecs.getByName("InformationRecords");
1034
- const informationModelId = sourceDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(sourceDb, subjectId, "Information"));
1035
- const informationRecodeCode2 = new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: "InformationRecord2" });
1036
- const informationRecordId2 = sourceDb.elements.queryElementIdByCode(informationRecodeCode2);
1037
- assert.isTrue(Id64.isValidId64(informationRecordId2));
1038
- const informationRecord2 = sourceDb.elements.getElement(informationRecordId2);
1039
- informationRecord2.commonString = `${informationRecord2.commonString}-Updated`;
1040
- informationRecord2.sourceString = `${informationRecord2.sourceString}-Updated`;
1041
- informationRecord2.update();
1042
- // delete InformationRecord3
1043
- const informationRecodeCode3 = new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: "InformationRecord3" });
1044
- const informationRecordId3 = sourceDb.elements.queryElementIdByCode(informationRecodeCode3);
1045
- assert.isTrue(Id64.isValidId64(informationRecordId3));
1046
- sourceDb.elements.deleteElement(informationRecordId3);
975
+ withEditTxn(sourceDb, (txn) => {
976
+ // Update Subject element
977
+ const subjectId = sourceDb.elements.queryElementIdByCode(Subject.createCode(sourceDb, IModel.rootSubjectId, "Subject"));
978
+ assert.isTrue(Id64.isValidId64(subjectId));
979
+ const subject = sourceDb.elements.getElement(subjectId);
980
+ subject.description = "Subject description (Updated)";
981
+ txn.updateElement(subject.toJSON());
982
+ // Update spatialCategory element
983
+ const definitionModelId = sourceDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(sourceDb, subjectId, "Definition"));
984
+ assert.isTrue(Id64.isValidId64(definitionModelId));
985
+ const spatialCategoryId = sourceDb.elements.queryElementIdByCode(SpatialCategory.createCode(sourceDb, definitionModelId, "SpatialCategory"));
986
+ assert.isTrue(Id64.isValidId64(spatialCategoryId));
987
+ const spatialCategory = sourceDb.elements.getElement(spatialCategoryId);
988
+ spatialCategory.federationGuid = Guid.createValue();
989
+ txn.updateElement(spatialCategory.toJSON());
990
+ // Update relationship properties
991
+ const spatialCategorySelectorId = sourceDb.elements.queryElementIdByCode(CategorySelector.createCode(sourceDb, definitionModelId, "SpatialCategories"));
992
+ assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));
993
+ const drawingCategorySelectorId = sourceDb.elements.queryElementIdByCode(CategorySelector.createCode(sourceDb, definitionModelId, "DrawingCategories"));
994
+ assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));
995
+ const relWithProps = sourceDb.relationships.getInstanceProps("ExtensiveTestScenario:SourceRelWithProps", { sourceId: spatialCategorySelectorId, targetId: drawingCategorySelectorId });
996
+ assert.equal(relWithProps.sourceString, "One");
997
+ assert.equal(relWithProps.sourceDouble, 1.1);
998
+ relWithProps.sourceString += "-Updated";
999
+ relWithProps.sourceDouble = 1.2;
1000
+ txn.updateRelationship(relWithProps);
1001
+ // Update ElementAspect properties
1002
+ const physicalObjectId1 = IModelTestUtils.queryByUserLabel(sourceDb, "PhysicalObject1");
1003
+ const sourceUniqueAspects = sourceDb.elements.getAspects(physicalObjectId1, "ExtensiveTestScenario:SourceUniqueAspect");
1004
+ assert.equal(sourceUniqueAspects.length, 1);
1005
+ sourceUniqueAspects[0].asAny.commonString += "-Updated";
1006
+ sourceUniqueAspects[0].asAny.sourceString += "-Updated";
1007
+ txn.updateAspect(sourceUniqueAspects[0].toJSON());
1008
+ const sourceMultiAspects = sourceDb.elements.getAspects(physicalObjectId1, "ExtensiveTestScenario:SourceMultiAspect");
1009
+ assert.equal(sourceMultiAspects.length, 2);
1010
+ sourceMultiAspects[1].asAny.commonString += "-Updated";
1011
+ sourceMultiAspects[1].asAny.sourceString += "-Updated";
1012
+ txn.updateAspect(sourceMultiAspects[1].toJSON());
1013
+ // clear NavigationProperty of PhysicalElement1
1014
+ const physicalElementId1 = IModelTestUtils.queryByUserLabel(sourceDb, "PhysicalElement1");
1015
+ let physicalElement1 = sourceDb.elements.getElement(physicalElementId1);
1016
+ physicalElement1.asAny.commonNavigation = RelatedElement.none;
1017
+ txn.updateElement(physicalElement1.toJSON());
1018
+ physicalElement1 = sourceDb.elements.getElement(physicalElementId1);
1019
+ assert.isUndefined(physicalElement1.asAny.commonNavigation);
1020
+ // delete PhysicalObject3
1021
+ const physicalObjectId3 = IModelTestUtils.queryByUserLabel(sourceDb, "PhysicalObject3");
1022
+ assert.isTrue(Id64.isValidId64(physicalObjectId3));
1023
+ txn.deleteElement(physicalObjectId3);
1024
+ assert.equal(Id64.invalid, IModelTestUtils.queryByUserLabel(sourceDb, "PhysicalObject3"));
1025
+ // Insert PhysicalObject5
1026
+ const physicalObjectProps5 = {
1027
+ classFullName: PhysicalObject.classFullName,
1028
+ model: physicalElement1.model,
1029
+ category: spatialCategoryId,
1030
+ code: Code.createEmpty(),
1031
+ userLabel: "PhysicalObject5",
1032
+ geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),
1033
+ placement: {
1034
+ origin: Point3d.create(5, 5, 5),
1035
+ angles: YawPitchRollAngles.createDegrees(0, 0, 0),
1036
+ },
1037
+ };
1038
+ const physicalObjectId5 = txn.insertElement(physicalObjectProps5);
1039
+ assert.isTrue(Id64.isValidId64(physicalObjectId5));
1040
+ // delete relationship
1041
+ const drawingGraphicId1 = IModelTestUtils.queryByUserLabel(sourceDb, "DrawingGraphic1");
1042
+ const drawingGraphicId2 = IModelTestUtils.queryByUserLabel(sourceDb, "DrawingGraphic2");
1043
+ const relationship = sourceDb.relationships.getInstance(DrawingGraphicRepresentsElement.classFullName, { sourceId: drawingGraphicId2, targetId: physicalObjectId1 });
1044
+ txn.deleteRelationship(relationship.toJSON());
1045
+ // insert relationships
1046
+ DrawingGraphicRepresentsElement.insert(txn, drawingGraphicId1, physicalObjectId5);
1047
+ DrawingGraphicRepresentsElement.insert(txn, drawingGraphicId2, physicalObjectId5);
1048
+ // update InformationRecord2
1049
+ const informationRecordCodeSpec = sourceDb.codeSpecs.getByName("InformationRecords");
1050
+ const informationModelId = sourceDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(sourceDb, subjectId, "Information"));
1051
+ const informationRecodeCode2 = new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: "InformationRecord2" });
1052
+ const informationRecordId2 = sourceDb.elements.queryElementIdByCode(informationRecodeCode2);
1053
+ assert.isTrue(Id64.isValidId64(informationRecordId2));
1054
+ const informationRecord2 = sourceDb.elements.getElement(informationRecordId2);
1055
+ informationRecord2.commonString = `${informationRecord2.commonString}-Updated`;
1056
+ informationRecord2.sourceString = `${informationRecord2.sourceString}-Updated`;
1057
+ txn.updateElement(informationRecord2);
1058
+ // delete InformationRecord3
1059
+ const informationRecodeCode3 = new Code({ spec: informationRecordCodeSpec.id, scope: informationModelId, value: "InformationRecord3" });
1060
+ const informationRecordId3 = sourceDb.elements.queryElementIdByCode(informationRecodeCode3);
1061
+ assert.isTrue(Id64.isValidId64(informationRecordId3));
1062
+ txn.deleteElement(informationRecordId3);
1063
+ }); // end withEditTxn
1047
1064
  }
1048
1065
  static assertUpdatesInDb(iModelDb, assertDeletes = true) {
1049
1066
  // determine which schema was imported