@itwin/core-backend 5.9.0-dev.4 → 5.9.0-dev.6

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 (658) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js +3 -3
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.js.map +1 -1
  8. package/lib/cjs/Category.d.ts +37 -7
  9. package/lib/cjs/Category.d.ts.map +1 -1
  10. package/lib/cjs/Category.js +33 -42
  11. package/lib/cjs/Category.js.map +1 -1
  12. package/lib/cjs/ChangeSummaryManager.js +2 -2
  13. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  14. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  15. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  16. package/lib/cjs/ChangesetECAdaptor.js +253 -250
  17. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  18. package/lib/cjs/ChannelControl.d.ts +29 -0
  19. package/lib/cjs/ChannelControl.d.ts.map +1 -1
  20. package/lib/cjs/ChannelControl.js.map +1 -1
  21. package/lib/cjs/CheckpointManager.js +1 -1
  22. package/lib/cjs/CheckpointManager.js.map +1 -1
  23. package/lib/cjs/ClassRegistry.js +5 -5
  24. package/lib/cjs/ClassRegistry.js.map +1 -1
  25. package/lib/cjs/CloudSqlite.js.map +1 -1
  26. package/lib/cjs/CodeService.js.map +1 -1
  27. package/lib/cjs/CodeSpecs.d.ts +32 -3
  28. package/lib/cjs/CodeSpecs.d.ts.map +1 -1
  29. package/lib/cjs/CodeSpecs.js +48 -20
  30. package/lib/cjs/CodeSpecs.js.map +1 -1
  31. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  32. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  33. package/lib/cjs/DevTools.js.map +1 -1
  34. package/lib/cjs/DisplayStyle.d.ts +18 -3
  35. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  36. package/lib/cjs/DisplayStyle.js +10 -21
  37. package/lib/cjs/DisplayStyle.js.map +1 -1
  38. package/lib/cjs/ECDb.js.map +1 -1
  39. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  40. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  41. package/lib/cjs/ECSqlStatement.js.map +1 -1
  42. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  43. package/lib/cjs/EditTxn.d.ts +262 -0
  44. package/lib/cjs/EditTxn.d.ts.map +1 -0
  45. package/lib/cjs/EditTxn.js +548 -0
  46. package/lib/cjs/EditTxn.js.map +1 -0
  47. package/lib/cjs/Element.d.ts +74 -5
  48. package/lib/cjs/Element.d.ts.map +1 -1
  49. package/lib/cjs/Element.js +63 -75
  50. package/lib/cjs/Element.js.map +1 -1
  51. package/lib/cjs/ElementAspect.d.ts +10 -0
  52. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  53. package/lib/cjs/ElementAspect.js +21 -12
  54. package/lib/cjs/ElementAspect.js.map +1 -1
  55. package/lib/cjs/ElementGraphics.js.map +1 -1
  56. package/lib/cjs/ElementTreeWalker.d.ts +56 -3
  57. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  58. package/lib/cjs/ElementTreeWalker.js +53 -40
  59. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  60. package/lib/cjs/Entity.js.map +1 -1
  61. package/lib/cjs/EntityReferences.js.map +1 -1
  62. package/lib/cjs/ExportGraphics.js.map +1 -1
  63. package/lib/cjs/ExternalSource.d.ts +11 -2
  64. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  65. package/lib/cjs/ExternalSource.js +10 -8
  66. package/lib/cjs/ExternalSource.js.map +1 -1
  67. package/lib/cjs/FontFile.js.map +1 -1
  68. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  69. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  70. package/lib/cjs/GeometrySummary.js +47 -47
  71. package/lib/cjs/GeometrySummary.js.map +1 -1
  72. package/lib/cjs/IModelDb.d.ts +66 -22
  73. package/lib/cjs/IModelDb.d.ts.map +1 -1
  74. package/lib/cjs/IModelDb.js +182 -296
  75. package/lib/cjs/IModelDb.js.map +1 -1
  76. package/lib/cjs/IModelDbFonts.js.map +1 -1
  77. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  78. package/lib/cjs/IModelHost.d.ts +22 -0
  79. package/lib/cjs/IModelHost.d.ts.map +1 -1
  80. package/lib/cjs/IModelHost.js +9 -0
  81. package/lib/cjs/IModelHost.js.map +1 -1
  82. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  83. package/lib/cjs/IModelJsFs.js.map +1 -1
  84. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  85. package/lib/cjs/IpcHost.js +2 -2
  86. package/lib/cjs/IpcHost.js.map +1 -1
  87. package/lib/cjs/LineStyle.d.ts +47 -7
  88. package/lib/cjs/LineStyle.d.ts.map +1 -1
  89. package/lib/cjs/LineStyle.js +38 -33
  90. package/lib/cjs/LineStyle.js.map +1 -1
  91. package/lib/cjs/LocalHub.js +1 -1
  92. package/lib/cjs/LocalHub.js.map +1 -1
  93. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  94. package/lib/cjs/LockControl.js.map +1 -1
  95. package/lib/cjs/Material.d.ts +8 -1
  96. package/lib/cjs/Material.d.ts.map +1 -1
  97. package/lib/cjs/Material.js +6 -12
  98. package/lib/cjs/Material.js.map +1 -1
  99. package/lib/cjs/Model.d.ts +59 -20
  100. package/lib/cjs/Model.d.ts.map +1 -1
  101. package/lib/cjs/Model.js +38 -80
  102. package/lib/cjs/Model.js.map +1 -1
  103. package/lib/cjs/NativeAppStorage.js.map +1 -1
  104. package/lib/cjs/NativeHost.js.map +1 -1
  105. package/lib/cjs/NavigationRelationship.js.map +1 -1
  106. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  107. package/lib/cjs/PropertyStore.js.map +1 -1
  108. package/lib/cjs/Relationship.d.ts +72 -7
  109. package/lib/cjs/Relationship.d.ts.map +1 -1
  110. package/lib/cjs/Relationship.js +39 -21
  111. package/lib/cjs/Relationship.js.map +1 -1
  112. package/lib/cjs/RpcBackend.js.map +1 -1
  113. package/lib/cjs/SQLiteDb.js.map +1 -1
  114. package/lib/cjs/Schema.js.map +1 -1
  115. package/lib/cjs/SchemaSync.js +4 -4
  116. package/lib/cjs/SchemaSync.js.map +1 -1
  117. package/lib/cjs/SchemaUtils.js.map +1 -1
  118. package/lib/cjs/SheetIndex.d.ts +9 -0
  119. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  120. package/lib/cjs/SheetIndex.js +38 -35
  121. package/lib/cjs/SheetIndex.js.map +1 -1
  122. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  123. package/lib/cjs/SqliteStatement.js.map +1 -1
  124. package/lib/cjs/StashManager.js +1 -1
  125. package/lib/cjs/StashManager.js.map +1 -1
  126. package/lib/cjs/Texture.d.ts +6 -0
  127. package/lib/cjs/Texture.d.ts.map +1 -1
  128. package/lib/cjs/Texture.js +6 -14
  129. package/lib/cjs/Texture.js.map +1 -1
  130. package/lib/cjs/TileStorage.js.map +1 -1
  131. package/lib/cjs/TxnManager.d.ts +5 -5
  132. package/lib/cjs/TxnManager.d.ts.map +1 -1
  133. package/lib/cjs/TxnManager.js +23 -7
  134. package/lib/cjs/TxnManager.js.map +1 -1
  135. package/lib/cjs/ViewDefinition.d.ts +21 -1
  136. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  137. package/lib/cjs/ViewDefinition.js +27 -66
  138. package/lib/cjs/ViewDefinition.js.map +1 -1
  139. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  140. package/lib/cjs/ViewStore.js.map +1 -1
  141. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
  142. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  143. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +33 -27
  144. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  145. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  146. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  147. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  148. package/lib/cjs/annotations/TextAnnotationElement.js +6 -5
  149. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  150. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  151. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  152. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  153. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  154. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  155. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  156. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  157. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  158. package/lib/cjs/core-backend.d.ts +1 -0
  159. package/lib/cjs/core-backend.d.ts.map +1 -1
  160. package/lib/cjs/core-backend.js +1 -0
  161. package/lib/cjs/core-backend.js.map +1 -1
  162. package/lib/cjs/domains/FunctionalElements.d.ts +6 -2
  163. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  164. package/lib/cjs/domains/FunctionalElements.js +8 -13
  165. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  166. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  167. package/lib/cjs/domains/GenericElements.d.ts +11 -4
  168. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  169. package/lib/cjs/domains/GenericElements.js +13 -24
  170. package/lib/cjs/domains/GenericElements.js.map +1 -1
  171. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  172. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  173. package/lib/cjs/internal/ChannelAdmin.d.ts +15 -0
  174. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  175. package/lib/cjs/internal/ChannelAdmin.js +5 -3
  176. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  177. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  178. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  179. package/lib/cjs/internal/HubMock.js.map +1 -1
  180. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  181. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  182. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  183. package/lib/cjs/internal/NoLocks.js.map +1 -1
  184. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  185. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  186. package/lib/cjs/internal/Symbols.d.ts +4 -0
  187. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  188. package/lib/cjs/internal/Symbols.js +5 -1
  189. package/lib/cjs/internal/Symbols.js.map +1 -1
  190. package/lib/cjs/internal/annotations/fields.d.ts +3 -2
  191. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  192. package/lib/cjs/internal/annotations/fields.js +7 -6
  193. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  194. package/lib/cjs/internal/cross-package.js.map +1 -1
  195. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  196. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  197. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  198. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  199. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  200. package/lib/cjs/rpc/multipart.js.map +1 -1
  201. package/lib/cjs/rpc/tracing.js.map +1 -1
  202. package/lib/cjs/rpc/web/logging.js.map +1 -1
  203. package/lib/cjs/rpc/web/request.js.map +1 -1
  204. package/lib/cjs/rpc/web/response.js.map +1 -1
  205. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  206. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  207. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  208. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  209. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  210. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  211. package/lib/cjs/workspace/Settings.js.map +1 -1
  212. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  213. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  214. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  215. package/lib/cjs/workspace/Workspace.js.map +1 -1
  216. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  217. package/lib/esm/BackendHubAccess.js.map +1 -1
  218. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  219. package/lib/esm/BisCoreSchema.js.map +1 -1
  220. package/lib/esm/BlobContainerService.js.map +1 -1
  221. package/lib/esm/BriefcaseManager.js +3 -3
  222. package/lib/esm/BriefcaseManager.js.map +1 -1
  223. package/lib/esm/CatalogDb.js.map +1 -1
  224. package/lib/esm/Category.d.ts +37 -7
  225. package/lib/esm/Category.d.ts.map +1 -1
  226. package/lib/esm/Category.js +33 -42
  227. package/lib/esm/Category.js.map +1 -1
  228. package/lib/esm/ChangeSummaryManager.js +2 -2
  229. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  230. package/lib/esm/ChangedElementsDb.js.map +1 -1
  231. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  232. package/lib/esm/ChangesetECAdaptor.js +253 -250
  233. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  234. package/lib/esm/ChannelControl.d.ts +29 -0
  235. package/lib/esm/ChannelControl.d.ts.map +1 -1
  236. package/lib/esm/ChannelControl.js.map +1 -1
  237. package/lib/esm/CheckpointManager.js +1 -1
  238. package/lib/esm/CheckpointManager.js.map +1 -1
  239. package/lib/esm/ClassRegistry.js +5 -5
  240. package/lib/esm/ClassRegistry.js.map +1 -1
  241. package/lib/esm/CloudSqlite.js.map +1 -1
  242. package/lib/esm/CodeService.js.map +1 -1
  243. package/lib/esm/CodeSpecs.d.ts +32 -3
  244. package/lib/esm/CodeSpecs.d.ts.map +1 -1
  245. package/lib/esm/CodeSpecs.js +49 -21
  246. package/lib/esm/CodeSpecs.js.map +1 -1
  247. package/lib/esm/ConcurrentQuery.js.map +1 -1
  248. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  249. package/lib/esm/DevTools.js.map +1 -1
  250. package/lib/esm/DisplayStyle.d.ts +18 -3
  251. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  252. package/lib/esm/DisplayStyle.js +10 -21
  253. package/lib/esm/DisplayStyle.js.map +1 -1
  254. package/lib/esm/ECDb.js.map +1 -1
  255. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  256. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  257. package/lib/esm/ECSqlStatement.js.map +1 -1
  258. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  259. package/lib/esm/EditTxn.d.ts +262 -0
  260. package/lib/esm/EditTxn.d.ts.map +1 -0
  261. package/lib/esm/EditTxn.js +543 -0
  262. package/lib/esm/EditTxn.js.map +1 -0
  263. package/lib/esm/Element.d.ts +74 -5
  264. package/lib/esm/Element.d.ts.map +1 -1
  265. package/lib/esm/Element.js +64 -76
  266. package/lib/esm/Element.js.map +1 -1
  267. package/lib/esm/ElementAspect.d.ts +10 -0
  268. package/lib/esm/ElementAspect.d.ts.map +1 -1
  269. package/lib/esm/ElementAspect.js +22 -13
  270. package/lib/esm/ElementAspect.js.map +1 -1
  271. package/lib/esm/ElementGraphics.js.map +1 -1
  272. package/lib/esm/ElementTreeWalker.d.ts +56 -3
  273. package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
  274. package/lib/esm/ElementTreeWalker.js +53 -40
  275. package/lib/esm/ElementTreeWalker.js.map +1 -1
  276. package/lib/esm/Entity.js.map +1 -1
  277. package/lib/esm/EntityReferences.js.map +1 -1
  278. package/lib/esm/ExportGraphics.js.map +1 -1
  279. package/lib/esm/ExternalSource.d.ts +11 -2
  280. package/lib/esm/ExternalSource.d.ts.map +1 -1
  281. package/lib/esm/ExternalSource.js +10 -8
  282. package/lib/esm/ExternalSource.js.map +1 -1
  283. package/lib/esm/FontFile.js.map +1 -1
  284. package/lib/esm/GeoCoordConfig.js.map +1 -1
  285. package/lib/esm/GeographicCRSServices.js.map +1 -1
  286. package/lib/esm/GeometrySummary.js +47 -47
  287. package/lib/esm/GeometrySummary.js.map +1 -1
  288. package/lib/esm/IModelDb.d.ts +66 -22
  289. package/lib/esm/IModelDb.d.ts.map +1 -1
  290. package/lib/esm/IModelDb.js +184 -298
  291. package/lib/esm/IModelDb.js.map +1 -1
  292. package/lib/esm/IModelDbFonts.js.map +1 -1
  293. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  294. package/lib/esm/IModelHost.d.ts +22 -0
  295. package/lib/esm/IModelHost.d.ts.map +1 -1
  296. package/lib/esm/IModelHost.js +9 -0
  297. package/lib/esm/IModelHost.js.map +1 -1
  298. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  299. package/lib/esm/IModelJsFs.js.map +1 -1
  300. package/lib/esm/ImageSourceConversion.js.map +1 -1
  301. package/lib/esm/IpcHost.js +3 -3
  302. package/lib/esm/IpcHost.js.map +1 -1
  303. package/lib/esm/LineStyle.d.ts +47 -7
  304. package/lib/esm/LineStyle.d.ts.map +1 -1
  305. package/lib/esm/LineStyle.js +38 -33
  306. package/lib/esm/LineStyle.js.map +1 -1
  307. package/lib/esm/LocalHub.js +1 -1
  308. package/lib/esm/LocalHub.js.map +1 -1
  309. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  310. package/lib/esm/LockControl.js.map +1 -1
  311. package/lib/esm/Material.d.ts +8 -1
  312. package/lib/esm/Material.d.ts.map +1 -1
  313. package/lib/esm/Material.js +6 -12
  314. package/lib/esm/Material.js.map +1 -1
  315. package/lib/esm/Model.d.ts +59 -20
  316. package/lib/esm/Model.d.ts.map +1 -1
  317. package/lib/esm/Model.js +39 -81
  318. package/lib/esm/Model.js.map +1 -1
  319. package/lib/esm/NativeAppStorage.js.map +1 -1
  320. package/lib/esm/NativeHost.js.map +1 -1
  321. package/lib/esm/NavigationRelationship.js.map +1 -1
  322. package/lib/esm/PromiseMemoizer.js.map +1 -1
  323. package/lib/esm/PropertyStore.js.map +1 -1
  324. package/lib/esm/Relationship.d.ts +72 -7
  325. package/lib/esm/Relationship.d.ts.map +1 -1
  326. package/lib/esm/Relationship.js +40 -22
  327. package/lib/esm/Relationship.js.map +1 -1
  328. package/lib/esm/RpcBackend.js.map +1 -1
  329. package/lib/esm/SQLiteDb.js.map +1 -1
  330. package/lib/esm/Schema.js.map +1 -1
  331. package/lib/esm/SchemaSync.js +5 -5
  332. package/lib/esm/SchemaSync.js.map +1 -1
  333. package/lib/esm/SchemaUtils.js.map +1 -1
  334. package/lib/esm/SheetIndex.d.ts +9 -0
  335. package/lib/esm/SheetIndex.d.ts.map +1 -1
  336. package/lib/esm/SheetIndex.js +38 -35
  337. package/lib/esm/SheetIndex.js.map +1 -1
  338. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  339. package/lib/esm/SqliteStatement.js.map +1 -1
  340. package/lib/esm/StashManager.js +1 -1
  341. package/lib/esm/StashManager.js.map +1 -1
  342. package/lib/esm/Texture.d.ts +6 -0
  343. package/lib/esm/Texture.d.ts.map +1 -1
  344. package/lib/esm/Texture.js +6 -14
  345. package/lib/esm/Texture.js.map +1 -1
  346. package/lib/esm/TileStorage.js.map +1 -1
  347. package/lib/esm/TxnManager.d.ts +5 -5
  348. package/lib/esm/TxnManager.d.ts.map +1 -1
  349. package/lib/esm/TxnManager.js +23 -7
  350. package/lib/esm/TxnManager.js.map +1 -1
  351. package/lib/esm/ViewDefinition.d.ts +21 -1
  352. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  353. package/lib/esm/ViewDefinition.js +27 -66
  354. package/lib/esm/ViewDefinition.js.map +1 -1
  355. package/lib/esm/ViewStateHydrator.js.map +1 -1
  356. package/lib/esm/ViewStore.js.map +1 -1
  357. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
  358. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  359. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +33 -27
  360. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  361. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  362. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  363. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  364. package/lib/esm/annotations/TextAnnotationElement.js +6 -5
  365. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  366. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  367. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  368. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  369. package/lib/esm/core-backend.d.ts +1 -0
  370. package/lib/esm/core-backend.d.ts.map +1 -1
  371. package/lib/esm/core-backend.js +1 -0
  372. package/lib/esm/core-backend.js.map +1 -1
  373. package/lib/esm/domains/FunctionalElements.d.ts +6 -2
  374. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  375. package/lib/esm/domains/FunctionalElements.js +8 -13
  376. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  377. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  378. package/lib/esm/domains/GenericElements.d.ts +11 -4
  379. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  380. package/lib/esm/domains/GenericElements.js +13 -24
  381. package/lib/esm/domains/GenericElements.js.map +1 -1
  382. package/lib/esm/domains/GenericSchema.js.map +1 -1
  383. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  384. package/lib/esm/internal/ChannelAdmin.d.ts +15 -0
  385. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  386. package/lib/esm/internal/ChannelAdmin.js +6 -4
  387. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  388. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  389. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  390. package/lib/esm/internal/HubMock.js.map +1 -1
  391. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  392. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  393. package/lib/esm/internal/NativePlatform.js.map +1 -1
  394. package/lib/esm/internal/NoLocks.js.map +1 -1
  395. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  396. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  397. package/lib/esm/internal/Symbols.d.ts +4 -0
  398. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  399. package/lib/esm/internal/Symbols.js +4 -0
  400. package/lib/esm/internal/Symbols.js.map +1 -1
  401. package/lib/esm/internal/annotations/fields.d.ts +3 -2
  402. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  403. package/lib/esm/internal/annotations/fields.js +7 -6
  404. package/lib/esm/internal/annotations/fields.js.map +1 -1
  405. package/lib/esm/internal/cross-package.js.map +1 -1
  406. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  407. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  408. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  409. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  410. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  411. package/lib/esm/rpc/multipart.js.map +1 -1
  412. package/lib/esm/rpc/tracing.js.map +1 -1
  413. package/lib/esm/rpc/web/logging.js.map +1 -1
  414. package/lib/esm/rpc/web/request.js.map +1 -1
  415. package/lib/esm/rpc/web/response.js.map +1 -1
  416. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  417. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  418. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  419. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  420. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  421. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  422. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  423. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  424. package/lib/esm/test/AttachDb.test.js +11 -11
  425. package/lib/esm/test/AttachDb.test.js.map +1 -1
  426. package/lib/esm/test/ElementDrivesElement.test.d.ts +20 -19
  427. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  428. package/lib/esm/test/ElementDrivesElement.test.js +134 -119
  429. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  430. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  431. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  432. package/lib/esm/test/IModelHost.test.js +56 -2
  433. package/lib/esm/test/IModelHost.test.js.map +1 -1
  434. package/lib/esm/test/IModelTestUtils.d.ts +23 -23
  435. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  436. package/lib/esm/test/IModelTestUtils.js +466 -449
  437. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  438. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  439. package/lib/esm/test/IpcHost.test.js.map +1 -1
  440. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  441. package/lib/esm/test/PrintElementTree.js.map +1 -1
  442. package/lib/esm/test/PropertyDb.test.js +2 -2
  443. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  444. package/lib/esm/test/RevisionUtility.js.map +1 -1
  445. package/lib/esm/test/SchemaUtils.test.js +25 -25
  446. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  447. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  448. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +156 -147
  449. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  450. package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -1
  451. package/lib/esm/test/TestChangeSetUtility.js +11 -7
  452. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  453. package/lib/esm/test/TestEditTxn.d.ts +8 -0
  454. package/lib/esm/test/TestEditTxn.d.ts.map +1 -0
  455. package/lib/esm/test/TestEditTxn.js +34 -0
  456. package/lib/esm/test/TestEditTxn.js.map +1 -0
  457. package/lib/esm/test/TestUtils.d.ts +1 -0
  458. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  459. package/lib/esm/test/TestUtils.js +8 -1
  460. package/lib/esm/test/TestUtils.js.map +1 -1
  461. package/lib/esm/test/annotations/Fields.test.js +135 -143
  462. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  463. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  464. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  465. package/lib/esm/test/annotations/TextAnnotation.test.js +156 -99
  466. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  467. package/lib/esm/test/annotations/TextBlock.test.js +5 -3
  468. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  469. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  470. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  471. package/lib/esm/test/categories/Category.test.js +63 -3
  472. package/lib/esm/test/categories/Category.test.js.map +1 -1
  473. package/lib/esm/test/codespec/CodeSpec.test.js +88 -5
  474. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  475. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  476. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  477. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  478. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  479. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  480. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  481. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  482. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  483. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  484. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  485. package/lib/esm/test/ecdb/ECSqlAst.test.js +68 -67
  486. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  487. package/lib/esm/test/ecdb/ECSqlQuery.test.js +6 -6
  488. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  489. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -333
  490. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  491. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  492. package/lib/esm/test/ecdb/QueryReaders.test.js +47 -44
  493. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  494. package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -2
  495. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  496. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  497. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +30 -28
  498. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  499. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  500. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  501. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  502. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  503. package/lib/esm/test/element/DeleteDefinitionElements.test.js +159 -143
  504. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  505. package/lib/esm/test/element/ElementAspect.test.js +90 -82
  506. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  507. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -1
  508. package/lib/esm/test/element/ElementDependencyGraph.test.js +51 -43
  509. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  510. package/lib/esm/test/element/ElementRoundTrip.test.js +176 -177
  511. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  512. package/lib/esm/test/element/ExcludedElements.test.js +2 -2
  513. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  514. package/lib/esm/test/element/ExternalSource.test.js +40 -38
  515. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  516. package/lib/esm/test/element/NullStructArray.test.js +23 -22
  517. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  518. package/lib/esm/test/element/ProjectInformationRecord.test.js +5 -2
  519. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  520. package/lib/esm/test/element/SheetInformationAspect.test.js +43 -11
  521. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  522. package/lib/esm/test/element/UrlLink.test.js +2 -2
  523. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  524. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  525. package/lib/esm/test/font/IModelDbFonts.test.js +87 -73
  526. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  527. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +194 -155
  528. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  529. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +2 -4
  530. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  531. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  532. package/lib/esm/test/hubaccess/Rebase.test.js +369 -303
  533. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  534. package/lib/esm/test/hubaccess/SemanticRebase.test.js +467 -392
  535. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  536. package/lib/esm/test/imageData.js.map +1 -1
  537. package/lib/esm/test/imodel/Code.test.js +31 -31
  538. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  539. package/lib/esm/test/imodel/ElementTreeWalker.test.js +57 -48
  540. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  541. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  542. package/lib/esm/test/imodel/IModel.test.js +463 -388
  543. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  544. package/lib/esm/test/imodel/ProjectExtents.test.js +2 -2
  545. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  546. package/lib/esm/test/imodel/SchemaXmlImport.test.js +13 -13
  547. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  548. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  549. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  550. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -1
  551. package/lib/esm/test/incrementalSchemaLocater/TestContext.js +2 -2
  552. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  553. package/lib/esm/test/index.d.ts +1 -0
  554. package/lib/esm/test/index.d.ts.map +1 -1
  555. package/lib/esm/test/index.js +1 -0
  556. package/lib/esm/test/index.js.map +1 -1
  557. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  558. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  559. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  560. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  561. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  562. package/lib/esm/test/rpc/response.test.js.map +1 -1
  563. package/lib/esm/test/schema/ClassRegistry.test.js +122 -121
  564. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  565. package/lib/esm/test/schema/FunctionalDomain.test.js +36 -34
  566. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  567. package/lib/esm/test/schema/GenericDomain.test.js +114 -94
  568. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  569. package/lib/esm/test/schema/IModelSchemaContext.test.js +11 -10
  570. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  571. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +226 -211
  572. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  573. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +1 -3
  574. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -1
  575. package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -247
  576. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  577. package/lib/esm/test/standalone/ChangeMerge.test.js +101 -82
  578. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  579. package/lib/esm/test/standalone/ChangesetReader.test.js +242 -213
  580. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  581. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  582. package/lib/esm/test/standalone/DisplayStyle.test.js +43 -40
  583. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  584. package/lib/esm/test/standalone/Drawing.test.js +4 -3
  585. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  586. package/lib/esm/test/standalone/EditTxn.test.d.ts +2 -0
  587. package/lib/esm/test/standalone/EditTxn.test.d.ts.map +1 -0
  588. package/lib/esm/test/standalone/EditTxn.test.js +219 -0
  589. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -0
  590. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  591. package/lib/esm/test/standalone/ElementMesh.test.js +16 -13
  592. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  593. package/lib/esm/test/standalone/ExportGraphics.test.js +40 -34
  594. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  595. package/lib/esm/test/standalone/GeometryChangeEvents.test.js +11 -15
  596. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  597. package/lib/esm/test/standalone/GeometryStream.test.js +212 -165
  598. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  599. package/lib/esm/test/standalone/HubMock.test.js +31 -25
  600. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  601. package/lib/esm/test/standalone/IModelLimits.test.js +11 -8
  602. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  603. package/lib/esm/test/standalone/IModelWrite.test.d.ts +2 -2
  604. package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
  605. package/lib/esm/test/standalone/IModelWrite.test.js +211 -169
  606. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  607. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  608. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +25 -22
  609. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  610. package/lib/esm/test/standalone/IntegrityCheck.test.js +20 -18
  611. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  612. package/lib/esm/test/standalone/MergeConflict.test.d.ts +2 -2
  613. package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -1
  614. package/lib/esm/test/standalone/MergeConflict.test.js +49 -33
  615. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  616. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  617. package/lib/esm/test/standalone/RenderMaterialElement.test.js +5 -5
  618. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  619. package/lib/esm/test/standalone/RenderTimeline.test.js +3 -2
  620. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  621. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  622. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  623. package/lib/esm/test/standalone/SectionDrawing.test.js +7 -7
  624. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  625. package/lib/esm/test/standalone/ServerBasedLocks.test.js +21 -19
  626. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  627. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  628. package/lib/esm/test/standalone/Settings.test.js +7 -4
  629. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  630. package/lib/esm/test/standalone/SettingsSchemas.test.js +2 -1
  631. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  632. package/lib/esm/test/standalone/SnapshotDb.test.js +3 -1
  633. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  634. package/lib/esm/test/standalone/StandaloneDb.test.js +27 -26
  635. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  636. package/lib/esm/test/standalone/Texture.test.js +5 -4
  637. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  638. package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -1
  639. package/lib/esm/test/standalone/TileCache.test.js +5 -3
  640. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  641. package/lib/esm/test/standalone/TileTree.test.js +35 -31
  642. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  643. package/lib/esm/test/standalone/TxnManager.test.js +700 -653
  644. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  645. package/lib/esm/test/standalone/ViewDefinition.test.js +295 -229
  646. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  647. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  648. package/lib/esm/test/standalone/Workspace.test.js +25 -23
  649. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  650. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  651. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  652. package/lib/esm/workspace/Settings.js.map +1 -1
  653. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  654. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  655. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  656. package/lib/esm/workspace/Workspace.js.map +1 -1
  657. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  658. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"ElementAspect.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementAspect.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { ElementAspectProps, ExternalSourceAspectProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport {\n Element, ElementAspect, ElementMultiAspect, ElementUniqueAspect, ExternalSourceAspect, PhysicalElement, SnapshotDb, SpatialCategory,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"ElementAspect\", () => {\n\n let iModel: SnapshotDb;\n\n before(() => {\n // NOTE: see ElementAspectTests.PresentationRuleScenarios in DgnPlatform\\Tests\\DgnProject\\NonPublished\\ElementAspect_Test.cpp for how ElementAspectTest.bim was created\n const seedFileName = IModelTestUtils.resolveAssetFile(\"ElementAspectTest.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ElementAspectTest.bim\");\n iModel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n });\n\n after(() => {\n iModel.close();\n });\n\n it(\"should be able to get aspects from test file\", () => {\n const element = iModel.elements.getElement(\"0x17\");\n assert.exists(element);\n assert.isTrue(element instanceof PhysicalElement);\n\n const aspect1: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestUniqueAspectNoHandler\")[0];\n assert.exists(aspect1);\n assert.isTrue(aspect1 instanceof ElementUniqueAspect);\n assert.equal(aspect1.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\n assert.equal(aspect1.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\n assert.equal(aspect1.asAny.length, 1);\n assert.equal(JSON.stringify(aspect1), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n // Test getAspects with dot separator\n const aspect1DotSeparator: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestUniqueAspectNoHandler\")[0];\n assert.exists(aspect1DotSeparator);\n assert.isTrue(aspect1DotSeparator instanceof ElementUniqueAspect);\n assert.equal(aspect1DotSeparator.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\n assert.equal(aspect1DotSeparator.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\n assert.equal(aspect1DotSeparator.asAny.length, 1);\n assert.equal(JSON.stringify(aspect1DotSeparator), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n // cross-check getAspects against getAspect\n const aspect1X: ElementAspect = iModel.elements.getAspect(aspect1.id);\n assert.exists(aspect1X);\n assert.isTrue(aspect1X instanceof ElementUniqueAspect);\n assert.equal(aspect1X.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\n assert.equal(aspect1X.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\n assert.equal(aspect1X.asAny.length, 1);\n assert.equal(JSON.stringify(aspect1X), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n const aspect2: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestUniqueAspect\")[0];\n assert.exists(aspect2);\n assert.isTrue(aspect2 instanceof ElementUniqueAspect);\n assert.equal(aspect2.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\n assert.equal(aspect2.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\n assert.isUndefined(aspect2.asAny.length);\n assert.equal(JSON.stringify(aspect2), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n // Test getAspects with dot separator\n const aspect2DotSeparator: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestUniqueAspect\")[0];\n assert.exists(aspect2DotSeparator);\n assert.isTrue(aspect2DotSeparator instanceof ElementUniqueAspect);\n assert.equal(aspect2DotSeparator.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\n assert.equal(aspect2DotSeparator.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\n assert.isUndefined(aspect2DotSeparator.asAny.length);\n assert.equal(JSON.stringify(aspect2DotSeparator), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n // cross-check getAspects against getAspect\n const aspect2X: ElementAspect = iModel.elements.getAspect(aspect2.id);\n assert.exists(aspect2X);\n assert.isTrue(aspect2X instanceof ElementUniqueAspect);\n assert.equal(aspect2X.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\n assert.equal(aspect2X.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\n assert.isUndefined(aspect2X.asAny.length);\n assert.equal(JSON.stringify(aspect2X), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n const uniqueAspects: ElementUniqueAspect[] = iModel.elements.getAspects(element.id, ElementUniqueAspect.classFullName);\n assert.equal(uniqueAspects.length, 2);\n uniqueAspects.forEach((aspect) => {\n assert.isTrue(aspect.classFullName === aspect1.classFullName || aspect.classFullName === aspect2.classFullName);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.exists(aspectX);\n assert.equal(aspectX.schemaName, aspect.schemaName);\n assert.equal(aspectX.className, aspect.className);\n });\n assert.equal(JSON.stringify(uniqueAspects), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}},\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`.replace(/\\s+/g, \"\"));\n\n const multiAspectsA: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestMultiAspectNoHandler\");\n assert.exists(multiAspectsA);\n assert.isArray(multiAspectsA);\n assert.equal(multiAspectsA.length, 2);\n multiAspectsA.forEach((aspect) => {\n assert.isTrue(aspect instanceof ElementMultiAspect);\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\n assert.equal(aspect.className, \"TestMultiAspectNoHandler\");\n assert.exists(aspect.asAny.testMultiAspectProperty);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.exists(aspectX);\n assert.equal(aspectX.schemaName, aspect.schemaName);\n assert.equal(aspectX.className, aspect.className);\n assert.exists(aspectX.asAny.testMultiAspectProperty);\n assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);\n });\n assert.equal(JSON.stringify(multiAspectsA), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\n\n // Test getAspects with dot separator\n const multiAspectsADotSeparator: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestMultiAspectNoHandler\");\n assert.exists(multiAspectsADotSeparator);\n assert.isArray(multiAspectsADotSeparator);\n assert.equal(multiAspectsADotSeparator.length, 2);\n multiAspectsADotSeparator.forEach((aspect) => {\n assert.isTrue(aspect instanceof ElementMultiAspect);\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\n assert.equal(aspect.className, \"TestMultiAspectNoHandler\");\n assert.exists(aspect.asAny.testMultiAspectProperty);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.exists(aspectX);\n assert.equal(aspectX.schemaName, aspect.schemaName);\n assert.equal(aspectX.className, aspect.className);\n assert.exists(aspectX.asAny.testMultiAspectProperty);\n assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);\n });\n assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\n\n const multiAspectsB: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestMultiAspect\");\n assert.exists(multiAspectsB);\n assert.isArray(multiAspectsB);\n assert.equal(multiAspectsB.length, 2);\n multiAspectsB.forEach((aspect) => {\n assert.isTrue(aspect instanceof ElementMultiAspect);\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\n assert.equal(aspect.className, \"TestMultiAspect\");\n assert.exists(aspect.asAny.testMultiAspectProperty);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.isTrue(aspectX instanceof ElementMultiAspect);\n assert.equal(aspectX.schemaName, \"DgnPlatformTest\");\n assert.equal(aspectX.className, \"TestMultiAspect\");\n assert.exists(aspectX.asAny.testMultiAspectProperty);\n });\n assert.equal(JSON.stringify(multiAspectsB), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n\n const multiAspects: ElementAspect[] = iModel.elements.getAspects(element.id, ElementMultiAspect.classFullName);\n assert.equal(multiAspects.length, 4);\n multiAspects.forEach((aspect) => {\n assert.isTrue(aspect.classFullName === multiAspectsA[0].classFullName || aspect.classFullName === multiAspectsB[0].classFullName);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.exists(aspectX);\n assert.equal(aspectX.schemaName, aspect.schemaName);\n assert.equal(aspectX.className, aspect.className);\n });\n assert.equal(JSON.stringify(multiAspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\n\n const rootSubject = iModel.elements.getRootSubject();\n assert.equal(0, iModel.elements.getAspects(rootSubject.id, \"DgnPlatformTest:TestUniqueAspect\").length, \"Don't expect DgnPlatformTest:TestUniqueAspect aspects on the root Subject\");\n assert.equal(0, iModel.elements.getAspects(rootSubject.id, \"DgnPlatformTest:TestMultiAspect\").length, \"Don't expect DgnPlatformTest:TestMultiAspect aspects on the root Subject\");\n assert.equal(0, iModel.elements.getAspects(rootSubject.id).length, \"Don't expect any aspects on the root Subject\");\n\n // The 'Element' property is introduced by ElementUniqueAspect and ElementMultiAspect, but is not available at the ElementAspect base class.\n // Since we're now using instance queries to query ElementUniqueAspect and ElementMultiAspect directly in getAspects(), we can provide ElementAspect to the function as well.\n const aspectList = `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}},\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`.replace(/\\s+/g, \"\");\n\n const aspects: ElementAspect[] = iModel.elements.getAspects(element.id, ElementAspect.classFullName);\n assert.equal(aspects.length, 6);\n assert.equal(JSON.stringify(aspects), aspectList);\n\n const allAspects: ElementAspect[] = iModel.elements.getAspects(element.id);\n assert.equal(allAspects.length, 6);\n assert.equal(JSON.stringify(allAspects), aspectList);\n });\n\n it(\"should be able to insert, update, and delete MultiAspects\", () => {\n const element: Element = iModel.elements.getElement(\"0x17\");\n assert.exists(element);\n assert.isTrue(element instanceof PhysicalElement);\n\n interface Props extends ElementAspectProps { testMultiAspectProperty: string }\n const aspectProps: Props = {\n classFullName: \"DgnPlatformTest:TestMultiAspectNoHandler\",\n element: { id: element.id },\n testMultiAspectProperty: \"MultiAspectInsertTest1\",\n };\n iModel.elements.insertAspect(aspectProps);\n let aspects: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.isAtLeast(aspects.length, 1);\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x21\",\"testMultiAspectProperty\":\"MultiAspectInsertTest1\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n const numAspects = aspects.length;\n\n let found: boolean = false;\n let foundIndex: number = -1;\n for (const aspect of aspects) {\n foundIndex++;\n if (aspect.asAny.testMultiAspectProperty === aspectProps.testMultiAspectProperty) {\n found = true;\n break;\n }\n }\n assert.isTrue(found);\n\n aspects[foundIndex].asAny.testMultiAspectProperty = \"MultiAspectInsertTest1-Updated\";\n iModel.elements.updateAspect(aspects[foundIndex].toJSON());\n\n const aspectsUpdated: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.equal(aspectsUpdated.length, aspects.length);\n assert.equal(aspectsUpdated[foundIndex].asAny.testMultiAspectProperty, \"MultiAspectInsertTest1-Updated\");\n // Check if aspect was updated\n assert.equal(JSON.stringify(aspectsUpdated), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x21\",\"testMultiAspectProperty\":\"MultiAspectInsertTest1-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n\n iModel.elements.deleteAspect(aspects[foundIndex].id);\n aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.equal(numAspects, aspects.length + 1);\n // Check if aspect was deleted\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\n });\n\n it(\"should be able to insert, update, and delete UniqueAspects\", () => {\n const element: Element = iModel.elements.getElement(\"0x17\");\n assert.exists(element);\n assert.isTrue(element instanceof PhysicalElement);\n\n const aspectProps = {\n classFullName: \"DgnPlatformTest:TestUniqueAspectNoHandler\",\n element: { id: element.id },\n testUniqueAspectProperty: \"UniqueAspectInsertTest1\",\n };\n iModel.elements.insertAspect(aspectProps);\n const aspects: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.isTrue(aspects.length === 1);\n assert.equal(aspects[0].asAny.testUniqueAspectProperty, aspectProps.testUniqueAspectProperty);\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"UniqueAspectInsertTest1\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`);\n\n aspects[0].asAny.testUniqueAspectProperty = \"UniqueAspectInsertTest1-Updated\";\n iModel.elements.updateAspect(aspects[0].toJSON());\n const aspectsUpdated: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.equal(aspectsUpdated.length, 1);\n assert.equal(aspectsUpdated[0].asAny.testUniqueAspectProperty, \"UniqueAspectInsertTest1-Updated\");\n assert.equal(JSON.stringify(aspectsUpdated), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"UniqueAspectInsertTest1-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`);\n\n iModel.elements.deleteAspect(aspects[0].id);\n try {\n const noAspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.equal(noAspects.length, 0);\n assert.isTrue(false, \"Expected this line to be skipped\");\n } catch (error) {\n assert.isTrue(error instanceof Error);\n }\n });\n\n it(\"should be able to insert ExternalSourceAspects\", () => {\n const fileName = IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ExternalSourceAspect.bim\");\n let iModelDb = SnapshotDb.createEmpty(fileName, { rootSubject: { name: \"ExternalSourceAspect\" } });\n const elementId: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category\", new SubCategoryAppearance());\n assert.isTrue(Id64.isValidId64(elementId));\n\n const aspectProps: ExternalSourceAspectProps = {\n classFullName: ExternalSourceAspect.classFullName,\n element: { id: elementId },\n scope: { id: IModel.rootSubjectId },\n identifier: \"A\",\n kind: \"Letter\",\n checksum: \"1\",\n version: \"1.0\",\n };\n const aspect = new ExternalSourceAspect(aspectProps, iModelDb);\n expect(aspect).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\n iModelDb.elements.insertAspect(aspectProps);\n\n const aspectJson = aspect.toJSON();\n iModelDb.saveChanges();\n iModelDb.close();\n iModelDb = SnapshotDb.openFile(fileName);\n\n const aspects: ElementAspect[] = iModelDb.elements.getAspects(elementId, aspectProps.classFullName);\n assert.equal(aspects.length, 1);\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x21\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"version\":\"1.0\",\"checksum\":\"1\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`);\n expect(aspects[0]).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\n\n expect(aspectJson).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\n\n assert(aspectProps.scope !== undefined);\n const foundAspects = ExternalSourceAspect.findAllBySource(iModelDb, aspectProps.scope.id, aspectProps.kind, aspectProps.identifier);\n assert.equal(foundAspects.length, 1);\n const foundAspect = foundAspects[0];\n assert.equal(foundAspect.aspectId, aspects[0].id);\n assert.equal(foundAspect.elementId, aspect.element.id);\n });\n\n it(\"should be able to insert multiple ExternalSourceAspects\", () => {\n const fileName = IModelTestUtils.prepareOutputFile(\"MultipleElementAspects\", \"ExternalSourceAspect.bim\");\n let iModelDb = SnapshotDb.createEmpty(fileName, { rootSubject: { name: \"MultipleExternalSourceAspects\" } });\n const e1: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category1\", new SubCategoryAppearance());\n const e2: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category2\", new SubCategoryAppearance());\n\n const scopeId1 = IModel.rootSubjectId;\n const scopeId2 = e1;\n const kind = \"Letter\";\n const kind2 = \"Kind2\";\n\n const aspectProps: ExternalSourceAspectProps = {\n classFullName: ExternalSourceAspect.classFullName,\n element: { id: \"\" },\n scope: { id: \"\" },\n identifier: \"\",\n kind,\n };\n const a: ExternalSourceAspectProps = { ...aspectProps, identifier: \"A\", scope: { id: scopeId1 } };\n const a2: ExternalSourceAspectProps = { ...aspectProps, identifier: \"A\", scope: { id: scopeId2 } };\n const b: ExternalSourceAspectProps = { ...aspectProps, identifier: \"B\", scope: { id: scopeId1 } };\n const c: ExternalSourceAspectProps = { ...aspectProps, identifier: \"C\", scope: { id: scopeId1 } };\n const ck2: ExternalSourceAspectProps = { ...aspectProps, identifier: \"C\", scope: { id: scopeId1 }, kind: kind2 };\n\n const e1AspectProps: Array<ExternalSourceAspectProps> = [\n { ...a, element: { id: e1 } },\n { ...a, element: { id: e1 } }, // add a second aspect \"A\" in scope1\n { ...a2, element: { id: e1 } }, // add \"A\" in scope2\n { ...b, element: { id: e1 } },\n { ...ck2, element: { id: e1 } },\n ];\n const e2AspectProps: Array<ExternalSourceAspectProps> = [\n { ...a, element: { id: e2 } }, // element2 also has an \"A\" in scope1\n { ...c, element: { id: e2 } },\n ];\n e1AspectProps.forEach((aspect) => iModelDb.elements.insertAspect(aspect));\n e2AspectProps.forEach((aspect) => iModelDb.elements.insertAspect(aspect));\n iModelDb.saveChanges();\n iModelDb.close();\n iModelDb = SnapshotDb.openFile(fileName);\n\n const equalProps = (aspect: ElementAspect, wantProps: ExternalSourceAspectProps): boolean => {\n return (aspect.element.id === wantProps.element.id)\n && (aspect.asAny.scope.id === wantProps.scope.id)\n && (aspect.asAny.scope.relClassName.endsWith(\"ElementScopesExternalSourceIdentifier\"))\n && (aspect.asAny.identifier === wantProps.identifier)\n && (aspect.asAny.kind === wantProps.kind)\n && (aspect.asAny.checksum === wantProps.checksum)\n && (aspect.asAny.version === wantProps.version);\n };\n const findInProps = (have: ElementAspect, wantArray: Array<ExternalSourceAspectProps>): boolean => {\n return wantArray.find((want) => equalProps(have, want)) !== undefined;\n };\n\n const e1Aspects: ElementAspect[] = iModelDb.elements.getAspects(e1, aspectProps.classFullName);\n assert.equal(e1Aspects.length, e1AspectProps.length);\n e1Aspects.forEach((x) => {\n assert.isTrue(findInProps(x, e1AspectProps));\n });\n assert.equal(JSON.stringify(e1Aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x21\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x22\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x23\",\"scope\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x24\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"B\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x25\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"C\",\"kind\":\"Kind2\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n\n const e2Aspects: ElementAspect[] = iModelDb.elements.getAspects(e2, aspectProps.classFullName);\n assert.equal(e2Aspects.length, e2AspectProps.length);\n e2Aspects.forEach((x) => {\n assert.isTrue(findInProps(x, e2AspectProps));\n });\n assert.equal(JSON.stringify(e2Aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x26\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x13\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x27\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"C\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x13\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n\n const allA = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"A\");\n assert.equal(allA.filter((x) => x.elementId === e1).length, 2, \"there are two A's in scope 1 on e1\");\n assert.equal(allA.filter((x) => x.elementId === e2).length, 1, \"there is one A in scope 1 on e2\");\n assert.equal(allA.length, 3);\n\n const allA2 = ExternalSourceAspect.findAllBySource(iModelDb, scopeId2, kind, \"A\");\n assert.equal(allA2.length, 1);\n assert.equal(allA2[0].elementId, e1, \"there is one A in scope 2 on e1\");\n\n const allB = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"B\");\n assert.equal(allB.length, 1);\n assert.equal(allB[0].elementId, e1, \"there is one B on e1\");\n\n const allC = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"C\");\n assert.equal(allC.length, 1);\n assert.equal(allC[0].elementId, e2, \"there is one C of kind1 on e2\");\n\n const allCK2 = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind2, \"C\");\n assert.equal(allCK2.length, 1);\n assert.equal(allCK2[0].elementId, e1, \"there is one C of kind 2 on e1\");\n\n assert.equal(ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"<notfound>\").length, 0);\n });\n\n it(\"should create ChannelRootAspect with correct relationship class\", async () => {\n const iModelDb = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ChannelRootAspectTest.bim\"), { rootSubject: { name: \"ChannelRootAspectTest\" } });\n\n const testChannelKey = \"test-channel\";\n\n // Enable the test channel\n iModelDb.channels.addAllowedChannel(testChannelKey);\n\n // Create a channel subject using insertChannelSubject\n const subjectId = iModelDb.channels.insertChannelSubject({\n subjectName: \"Test Channel Subject\",\n channelKey: testChannelKey,\n });\n iModelDb.saveChanges();\n assert.isTrue(Id64.isValidId64(subjectId), \"Subject ID should be valid\");\n\n // Get the ChannelRootAspect\n const aspects = iModelDb.elements.getAspects(subjectId, \"BisCore:ChannelRootAspect\");\n assert.equal(aspects.length, 1, \"Should be exactly one as it's a unique aspect\");\n\n const aspect = aspects[0];\n assert.exists(aspect);\n assert.equal(aspect.classFullName, \"BisCore:ChannelRootAspect\", \"Aspect class should be ChannelRootAspect\");\n\n // Verify the relationship class\n expect(aspect.element.relClassName).to.equal(\"BisCore.ElementOwnsChannelRootAspect\");\n assert.equal((aspect as any).owner, testChannelKey, \"Channel owner should match the channel key\");\n\n // Query the db to confirm the relationship class\n const reader = iModelDb.createQueryReader(\"select ec_classname(Element.RelECClassId) as relClassName from BisCore.ChannelRootAspect\");\n expect(await reader.step()).to.be.true;\n expect(reader.current.relClassName).to.equal(\"BisCore:ElementOwnsChannelRootAspect\");\n\n iModelDb.close();\n });\n});\n"]}
1
+ {"version":3,"file":"ElementAspect.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementAspect.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { ElementAspectProps, ExternalSourceAspectProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\nimport {\r\n Element, ElementAspect, ElementMultiAspect, ElementUniqueAspect, ExternalSourceAspect, PhysicalElement, SnapshotDb, SpatialCategory,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"ElementAspect\", () => {\r\n\r\n let iModel: SnapshotDb;\r\n\r\n before(() => {\r\n // NOTE: see ElementAspectTests.PresentationRuleScenarios in DgnPlatform\\Tests\\DgnProject\\NonPublished\\ElementAspect_Test.cpp for how ElementAspectTest.bim was created\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"ElementAspectTest.bim\");\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ElementAspectTest.bim\");\r\n iModel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\r\n });\r\n\r\n after(() => {\r\n iModel.close();\r\n });\r\n\r\n it(\"should be able to get aspects from test file\", () => {\r\n const element = iModel.elements.getElement(\"0x17\");\r\n assert.exists(element);\r\n assert.isTrue(element instanceof PhysicalElement);\r\n\r\n const aspect1: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestUniqueAspectNoHandler\")[0];\r\n assert.exists(aspect1);\r\n assert.isTrue(aspect1 instanceof ElementUniqueAspect);\r\n assert.equal(aspect1.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\r\n assert.equal(aspect1.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\r\n assert.equal(aspect1.asAny.length, 1);\r\n assert.equal(JSON.stringify(aspect1), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n // Test getAspects with dot separator\r\n const aspect1DotSeparator: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestUniqueAspectNoHandler\")[0];\r\n assert.exists(aspect1DotSeparator);\r\n assert.isTrue(aspect1DotSeparator instanceof ElementUniqueAspect);\r\n assert.equal(aspect1DotSeparator.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\r\n assert.equal(aspect1DotSeparator.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\r\n assert.equal(aspect1DotSeparator.asAny.length, 1);\r\n assert.equal(JSON.stringify(aspect1DotSeparator), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n // cross-check getAspects against getAspect\r\n const aspect1X: ElementAspect = iModel.elements.getAspect(aspect1.id);\r\n assert.exists(aspect1X);\r\n assert.isTrue(aspect1X instanceof ElementUniqueAspect);\r\n assert.equal(aspect1X.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\r\n assert.equal(aspect1X.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\r\n assert.equal(aspect1X.asAny.length, 1);\r\n assert.equal(JSON.stringify(aspect1X), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n const aspect2: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestUniqueAspect\")[0];\r\n assert.exists(aspect2);\r\n assert.isTrue(aspect2 instanceof ElementUniqueAspect);\r\n assert.equal(aspect2.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\r\n assert.equal(aspect2.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\r\n assert.isUndefined(aspect2.asAny.length);\r\n assert.equal(JSON.stringify(aspect2), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n // Test getAspects with dot separator\r\n const aspect2DotSeparator: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestUniqueAspect\")[0];\r\n assert.exists(aspect2DotSeparator);\r\n assert.isTrue(aspect2DotSeparator instanceof ElementUniqueAspect);\r\n assert.equal(aspect2DotSeparator.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\r\n assert.equal(aspect2DotSeparator.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\r\n assert.isUndefined(aspect2DotSeparator.asAny.length);\r\n assert.equal(JSON.stringify(aspect2DotSeparator), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n // cross-check getAspects against getAspect\r\n const aspect2X: ElementAspect = iModel.elements.getAspect(aspect2.id);\r\n assert.exists(aspect2X);\r\n assert.isTrue(aspect2X instanceof ElementUniqueAspect);\r\n assert.equal(aspect2X.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\r\n assert.equal(aspect2X.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\r\n assert.isUndefined(aspect2X.asAny.length);\r\n assert.equal(JSON.stringify(aspect2X), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n const uniqueAspects: ElementUniqueAspect[] = iModel.elements.getAspects(element.id, ElementUniqueAspect.classFullName);\r\n assert.equal(uniqueAspects.length, 2);\r\n uniqueAspects.forEach((aspect) => {\r\n assert.isTrue(aspect.classFullName === aspect1.classFullName || aspect.classFullName === aspect2.classFullName);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.exists(aspectX);\r\n assert.equal(aspectX.schemaName, aspect.schemaName);\r\n assert.equal(aspectX.className, aspect.className);\r\n });\r\n assert.equal(JSON.stringify(uniqueAspects), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const multiAspectsA: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestMultiAspectNoHandler\");\r\n assert.exists(multiAspectsA);\r\n assert.isArray(multiAspectsA);\r\n assert.equal(multiAspectsA.length, 2);\r\n multiAspectsA.forEach((aspect) => {\r\n assert.isTrue(aspect instanceof ElementMultiAspect);\r\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\r\n assert.equal(aspect.className, \"TestMultiAspectNoHandler\");\r\n assert.exists(aspect.asAny.testMultiAspectProperty);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.exists(aspectX);\r\n assert.equal(aspectX.schemaName, aspect.schemaName);\r\n assert.equal(aspectX.className, aspect.className);\r\n assert.exists(aspectX.asAny.testMultiAspectProperty);\r\n assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);\r\n });\r\n assert.equal(JSON.stringify(multiAspectsA), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n // Test getAspects with dot separator\r\n const multiAspectsADotSeparator: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestMultiAspectNoHandler\");\r\n assert.exists(multiAspectsADotSeparator);\r\n assert.isArray(multiAspectsADotSeparator);\r\n assert.equal(multiAspectsADotSeparator.length, 2);\r\n multiAspectsADotSeparator.forEach((aspect) => {\r\n assert.isTrue(aspect instanceof ElementMultiAspect);\r\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\r\n assert.equal(aspect.className, \"TestMultiAspectNoHandler\");\r\n assert.exists(aspect.asAny.testMultiAspectProperty);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.exists(aspectX);\r\n assert.equal(aspectX.schemaName, aspect.schemaName);\r\n assert.equal(aspectX.className, aspect.className);\r\n assert.exists(aspectX.asAny.testMultiAspectProperty);\r\n assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);\r\n });\r\n assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const multiAspectsB: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestMultiAspect\");\r\n assert.exists(multiAspectsB);\r\n assert.isArray(multiAspectsB);\r\n assert.equal(multiAspectsB.length, 2);\r\n multiAspectsB.forEach((aspect) => {\r\n assert.isTrue(aspect instanceof ElementMultiAspect);\r\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\r\n assert.equal(aspect.className, \"TestMultiAspect\");\r\n assert.exists(aspect.asAny.testMultiAspectProperty);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.isTrue(aspectX instanceof ElementMultiAspect);\r\n assert.equal(aspectX.schemaName, \"DgnPlatformTest\");\r\n assert.equal(aspectX.className, \"TestMultiAspect\");\r\n assert.exists(aspectX.asAny.testMultiAspectProperty);\r\n });\r\n assert.equal(JSON.stringify(multiAspectsB), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const multiAspects: ElementAspect[] = iModel.elements.getAspects(element.id, ElementMultiAspect.classFullName);\r\n assert.equal(multiAspects.length, 4);\r\n multiAspects.forEach((aspect) => {\r\n assert.isTrue(aspect.classFullName === multiAspectsA[0].classFullName || aspect.classFullName === multiAspectsB[0].classFullName);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.exists(aspectX);\r\n assert.equal(aspectX.schemaName, aspect.schemaName);\r\n assert.equal(aspectX.className, aspect.className);\r\n });\r\n assert.equal(JSON.stringify(multiAspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const rootSubject = iModel.elements.getRootSubject();\r\n assert.equal(0, iModel.elements.getAspects(rootSubject.id, \"DgnPlatformTest:TestUniqueAspect\").length, \"Don't expect DgnPlatformTest:TestUniqueAspect aspects on the root Subject\");\r\n assert.equal(0, iModel.elements.getAspects(rootSubject.id, \"DgnPlatformTest:TestMultiAspect\").length, \"Don't expect DgnPlatformTest:TestMultiAspect aspects on the root Subject\");\r\n assert.equal(0, iModel.elements.getAspects(rootSubject.id).length, \"Don't expect any aspects on the root Subject\");\r\n\r\n // The 'Element' property is introduced by ElementUniqueAspect and ElementMultiAspect, but is not available at the ElementAspect base class.\r\n // Since we're now using instance queries to query ElementUniqueAspect and ElementMultiAspect directly in getAspects(), we can provide ElementAspect to the function as well.\r\n const aspectList = `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`.replace(/\\s+/g, \"\");\r\n\r\n const aspects: ElementAspect[] = iModel.elements.getAspects(element.id, ElementAspect.classFullName);\r\n assert.equal(aspects.length, 6);\r\n assert.equal(JSON.stringify(aspects), aspectList);\r\n\r\n const allAspects: ElementAspect[] = iModel.elements.getAspects(element.id);\r\n assert.equal(allAspects.length, 6);\r\n assert.equal(JSON.stringify(allAspects), aspectList);\r\n });\r\n\r\n it(\"should be able to insert, update, and delete MultiAspects\", () => {\r\n const element: Element = iModel.elements.getElement(\"0x17\");\r\n assert.exists(element);\r\n assert.isTrue(element instanceof PhysicalElement);\r\n\r\n interface Props extends ElementAspectProps { testMultiAspectProperty: string }\r\n const aspectProps: Props = {\r\n classFullName: \"DgnPlatformTest:TestMultiAspectNoHandler\",\r\n element: { id: element.id },\r\n testMultiAspectProperty: \"MultiAspectInsertTest1\",\r\n };\r\n withEditTxn(iModel, (txn) => txn.insertAspect(aspectProps));\r\n let aspects: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.isAtLeast(aspects.length, 1);\r\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x21\",\"testMultiAspectProperty\":\"MultiAspectInsertTest1\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n const numAspects = aspects.length;\r\n\r\n let found: boolean = false;\r\n let foundIndex: number = -1;\r\n for (const aspect of aspects) {\r\n foundIndex++;\r\n if (aspect.asAny.testMultiAspectProperty === aspectProps.testMultiAspectProperty) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n assert.isTrue(found);\r\n\r\n aspects[foundIndex].asAny.testMultiAspectProperty = \"MultiAspectInsertTest1-Updated\";\r\n withEditTxn(iModel, (txn) => txn.updateAspect(aspects[foundIndex].toJSON()));\r\n\r\n const aspectsUpdated: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.equal(aspectsUpdated.length, aspects.length);\r\n assert.equal(aspectsUpdated[foundIndex].asAny.testMultiAspectProperty, \"MultiAspectInsertTest1-Updated\");\r\n // Check if aspect was updated\r\n assert.equal(JSON.stringify(aspectsUpdated), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x21\",\"testMultiAspectProperty\":\"MultiAspectInsertTest1-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n withEditTxn(iModel, (txn) => txn.deleteAspect(aspects[foundIndex].id));\r\n aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.equal(numAspects, aspects.length + 1);\r\n // Check if aspect was deleted\r\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\r\n });\r\n\r\n it(\"should be able to insert, update, and delete UniqueAspects\", () => {\r\n const element: Element = iModel.elements.getElement(\"0x17\");\r\n assert.exists(element);\r\n assert.isTrue(element instanceof PhysicalElement);\r\n\r\n const aspectProps = {\r\n classFullName: \"DgnPlatformTest:TestUniqueAspectNoHandler\",\r\n element: { id: element.id },\r\n testUniqueAspectProperty: \"UniqueAspectInsertTest1\",\r\n };\r\n withEditTxn(iModel, (txn) => txn.insertAspect(aspectProps));\r\n const aspects: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.isTrue(aspects.length === 1);\r\n assert.equal(aspects[0].asAny.testUniqueAspectProperty, aspectProps.testUniqueAspectProperty);\r\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"UniqueAspectInsertTest1\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`);\r\n\r\n aspects[0].asAny.testUniqueAspectProperty = \"UniqueAspectInsertTest1-Updated\";\r\n withEditTxn(iModel, (txn) => txn.updateAspect(aspects[0].toJSON()));\r\n const aspectsUpdated: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.equal(aspectsUpdated.length, 1);\r\n assert.equal(aspectsUpdated[0].asAny.testUniqueAspectProperty, \"UniqueAspectInsertTest1-Updated\");\r\n assert.equal(JSON.stringify(aspectsUpdated), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"UniqueAspectInsertTest1-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`);\r\n\r\n withEditTxn(iModel, (txn) => txn.deleteAspect(aspects[0].id));\r\n try {\r\n const noAspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.equal(noAspects.length, 0);\r\n assert.isTrue(false, \"Expected this line to be skipped\");\r\n } catch (error) {\r\n assert.isTrue(error instanceof Error);\r\n }\r\n });\r\n\r\n it(\"should be able to insert ExternalSourceAspects\", () => {\r\n const fileName = IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ExternalSourceAspect.bim\");\r\n let iModelDb = SnapshotDb.createEmpty(fileName, { rootSubject: { name: \"ExternalSourceAspect\" } });\r\n let elementId!: Id64String;\r\n let aspectProps!: ExternalSourceAspectProps;\r\n const aspectJson = withEditTxn(iModelDb, (txn) => {\r\n elementId = SpatialCategory.insert(txn, IModel.dictionaryId, \"Category\", new SubCategoryAppearance());\r\n assert.isTrue(Id64.isValidId64(elementId));\r\n\r\n aspectProps = {\r\n classFullName: ExternalSourceAspect.classFullName,\r\n element: { id: elementId },\r\n scope: { id: IModel.rootSubjectId },\r\n identifier: \"A\",\r\n kind: \"Letter\",\r\n checksum: \"1\",\r\n version: \"1.0\",\r\n };\r\n const aspect = new ExternalSourceAspect(aspectProps, iModelDb);\r\n expect(aspect).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\r\n txn.insertAspect(aspectProps);\r\n return aspect.toJSON();\r\n });\r\n iModelDb.close();\r\n iModelDb = SnapshotDb.openFile(fileName);\r\n\r\n const aspects: ElementAspect[] = iModelDb.elements.getAspects(elementId, aspectProps.classFullName);\r\n assert.equal(aspects.length, 1);\r\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x21\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"version\":\"1.0\",\"checksum\":\"1\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`);\r\n expect(aspects[0]).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\r\n\r\n expect(aspectJson).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\r\n\r\n assert(aspectProps.scope !== undefined);\r\n const foundAspects = ExternalSourceAspect.findAllBySource(iModelDb, aspectProps.scope.id, aspectProps.kind, aspectProps.identifier);\r\n assert.equal(foundAspects.length, 1);\r\n const foundAspect = foundAspects[0];\r\n assert.equal(foundAspect.aspectId, aspects[0].id);\r\n assert.equal(foundAspect.elementId, aspectProps.element.id);\r\n });\r\n\r\n it(\"should be able to insert multiple ExternalSourceAspects\", () => {\r\n const fileName = IModelTestUtils.prepareOutputFile(\"MultipleElementAspects\", \"ExternalSourceAspect.bim\");\r\n let iModelDb = SnapshotDb.createEmpty(fileName, { rootSubject: { name: \"MultipleExternalSourceAspects\" } });\r\n let e1!: Id64String;\r\n let e2!: Id64String;\r\n\r\n const scopeId1 = IModel.rootSubjectId;\r\n const kind = \"Letter\";\r\n const kind2 = \"Kind2\";\r\n const { e1AspectProps, e2AspectProps } = withEditTxn(iModelDb, (txn) => {\r\n e1 = SpatialCategory.insert(txn, IModel.dictionaryId, \"Category1\", new SubCategoryAppearance());\r\n e2 = SpatialCategory.insert(txn, IModel.dictionaryId, \"Category2\", new SubCategoryAppearance());\r\n const scopeId2 = e1;\r\n const aspectProps: ExternalSourceAspectProps = {\r\n classFullName: ExternalSourceAspect.classFullName,\r\n element: { id: \"\" },\r\n scope: { id: \"\" },\r\n identifier: \"\",\r\n kind,\r\n };\r\n const a: ExternalSourceAspectProps = { ...aspectProps, identifier: \"A\", scope: { id: scopeId1 } };\r\n const a2: ExternalSourceAspectProps = { ...aspectProps, identifier: \"A\", scope: { id: scopeId2 } };\r\n const b: ExternalSourceAspectProps = { ...aspectProps, identifier: \"B\", scope: { id: scopeId1 } };\r\n const c: ExternalSourceAspectProps = { ...aspectProps, identifier: \"C\", scope: { id: scopeId1 } };\r\n const ck2: ExternalSourceAspectProps = { ...aspectProps, identifier: \"C\", scope: { id: scopeId1 }, kind: kind2 };\r\n\r\n const e1Props: Array<ExternalSourceAspectProps> = [\r\n { ...a, element: { id: e1 } },\r\n { ...a, element: { id: e1 } }, // add a second aspect \"A\" in scope1\r\n { ...a2, element: { id: e1 } }, // add \"A\" in scope2\r\n { ...b, element: { id: e1 } },\r\n { ...ck2, element: { id: e1 } },\r\n ];\r\n const e2Props: Array<ExternalSourceAspectProps> = [\r\n { ...a, element: { id: e2 } }, // element2 also has an \"A\" in scope1\r\n { ...c, element: { id: e2 } },\r\n ];\r\n e1Props.forEach((aspect) => txn.insertAspect(aspect));\r\n e2Props.forEach((aspect) => txn.insertAspect(aspect));\r\n return { e1AspectProps: e1Props, e2AspectProps: e2Props };\r\n });\r\n iModelDb.close();\r\n iModelDb = SnapshotDb.openFile(fileName);\r\n\r\n const equalProps = (aspect: ElementAspect, wantProps: ExternalSourceAspectProps): boolean => {\r\n return (aspect.element.id === wantProps.element.id)\r\n && (aspect.asAny.scope.id === wantProps.scope.id)\r\n && (aspect.asAny.scope.relClassName.endsWith(\"ElementScopesExternalSourceIdentifier\"))\r\n && (aspect.asAny.identifier === wantProps.identifier)\r\n && (aspect.asAny.kind === wantProps.kind)\r\n && (aspect.asAny.checksum === wantProps.checksum)\r\n && (aspect.asAny.version === wantProps.version);\r\n };\r\n const findInProps = (have: ElementAspect, wantArray: Array<ExternalSourceAspectProps>): boolean => {\r\n return wantArray.find((want) => equalProps(have, want)) !== undefined;\r\n };\r\n\r\n const e1Aspects: ElementAspect[] = iModelDb.elements.getAspects(e1, ExternalSourceAspect.classFullName);\r\n assert.equal(e1Aspects.length, e1AspectProps.length);\r\n e1Aspects.forEach((x) => {\r\n assert.isTrue(findInProps(x, e1AspectProps));\r\n });\r\n assert.equal(JSON.stringify(e1Aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x21\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x22\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x23\",\"scope\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x24\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"B\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x25\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"C\",\"kind\":\"Kind2\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const e2Aspects: ElementAspect[] = iModelDb.elements.getAspects(e2, ExternalSourceAspect.classFullName);\r\n assert.equal(e2Aspects.length, e2AspectProps.length);\r\n e2Aspects.forEach((x) => {\r\n assert.isTrue(findInProps(x, e2AspectProps));\r\n });\r\n assert.equal(JSON.stringify(e2Aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x26\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x13\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x27\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"C\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x13\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const allA = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"A\");\r\n assert.equal(allA.filter((x) => x.elementId === e1).length, 2, \"there are two A's in scope 1 on e1\");\r\n assert.equal(allA.filter((x) => x.elementId === e2).length, 1, \"there is one A in scope 1 on e2\");\r\n assert.equal(allA.length, 3);\r\n\r\n const allA2 = ExternalSourceAspect.findAllBySource(iModelDb, e1, kind, \"A\");\r\n assert.equal(allA2.length, 1);\r\n assert.equal(allA2[0].elementId, e1, \"there is one A in scope 2 on e1\");\r\n\r\n const allB = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"B\");\r\n assert.equal(allB.length, 1);\r\n assert.equal(allB[0].elementId, e1, \"there is one B on e1\");\r\n\r\n const allC = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"C\");\r\n assert.equal(allC.length, 1);\r\n assert.equal(allC[0].elementId, e2, \"there is one C of kind1 on e2\");\r\n\r\n const allCK2 = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind2, \"C\");\r\n assert.equal(allCK2.length, 1);\r\n assert.equal(allCK2[0].elementId, e1, \"there is one C of kind 2 on e1\");\r\n\r\n assert.equal(ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"<notfound>\").length, 0);\r\n });\r\n\r\n it(\"should create ChannelRootAspect with correct relationship class\", async () => {\r\n const iModelDb = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ChannelRootAspectTest.bim\"), { rootSubject: { name: \"ChannelRootAspectTest\" } });\r\n\r\n const testChannelKey = \"test-channel\";\r\n\r\n // Enable the test channel\r\n iModelDb.channels.addAllowedChannel(testChannelKey);\r\n\r\n // Create a channel subject using insertChannelSubject with explicit txn\r\n const subjectId = withEditTxn(iModelDb, (txn) => iModelDb.channels.insertChannelSubject({\r\n subjectName: \"Test Channel Subject\",\r\n channelKey: testChannelKey,\r\n txn,\r\n }));\r\n assert.isTrue(Id64.isValidId64(subjectId), \"Subject Id should be valid\");\r\n\r\n // Get the ChannelRootAspect\r\n const aspects = iModelDb.elements.getAspects(subjectId, \"BisCore:ChannelRootAspect\");\r\n assert.equal(aspects.length, 1, \"Should be exactly one as it's a unique aspect\");\r\n\r\n const aspect = aspects[0];\r\n assert.exists(aspect);\r\n assert.equal(aspect.classFullName, \"BisCore:ChannelRootAspect\", \"Aspect class should be ChannelRootAspect\");\r\n\r\n // Verify the relationship class\r\n expect(aspect.element.relClassName).to.equal(\"BisCore.ElementOwnsChannelRootAspect\");\r\n assert.equal((aspect as any).owner, testChannelKey, \"Channel owner should match the channel key\");\r\n\r\n // Query the db to confirm the relationship class\r\n const reader = iModelDb.createQueryReader(\"select ec_classname(Element.RelECClassId) as relClassName from BisCore.ChannelRootAspect\");\r\n expect(await reader.step()).to.be.true;\r\n expect(reader.current.relClassName).to.equal(\"BisCore:ElementOwnsChannelRootAspect\");\r\n\r\n iModelDb.close();\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementDependencyGraph.test.d.ts","sourceRoot":"","sources":["../../../../src/test/element/ElementDependencyGraph.test.ts"],"names":[],"mappings":"AAmBA,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQpE"}
1
+ {"version":3,"file":"ElementDependencyGraph.test.d.ts","sourceRoot":"","sources":["../../../../src/test/element/ElementDependencyGraph.test.ts"],"names":[],"mappings":"AAwBA,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQpE"}
@@ -7,11 +7,15 @@ import { assert } from "chai";
7
7
  import * as fs from "fs";
8
8
  import * as path from "path";
9
9
  import { Guid, Logger, OpenMode } from "@itwin/core-bentley";
10
+ import { EditTxn, withEditTxn } from "../../EditTxn";
10
11
  import { CodeScopeSpec, CodeSpec, ColorByName, DomainOptions, GeometryStreamBuilder, IModel, SubCategoryAppearance, } from "@itwin/core-common";
11
12
  import { LineSegment3d, Point3d, YawPitchRollAngles } from "@itwin/core-geometry";
12
13
  import { _nativeDb, ChannelControl, IModelJsFs, PhysicalModel, SpatialCategory, StandaloneDb } from "../../core-backend";
13
14
  import { IModelTestUtils, TestElementDrivesElement, TestPhysicalObject } from "../IModelTestUtils";
14
15
  import { IModelNative } from "../../internal/NativePlatform";
16
+ function saveTestChanges(txn, args) {
17
+ txn.saveChanges(args);
18
+ }
15
19
  export function copyFile(newName, pathToCopy) {
16
20
  const newPath = path.join(path.dirname(pathToCopy), newName);
17
21
  try {
@@ -36,6 +40,7 @@ class DependencyCallbackResults {
36
40
  }
37
41
  class TestHelper {
38
42
  db;
43
+ txn;
39
44
  dres = new DependencyCallbackResults();
40
45
  removals = [];
41
46
  codeSpecId = "";
@@ -49,11 +54,15 @@ class TestHelper {
49
54
  this.db = StandaloneDb.openFile(writeDbFileName, OpenMode.ReadWrite);
50
55
  assert.isTrue(this.db !== undefined);
51
56
  this.db.channels.addAllowedChannel(ChannelControl.sharedChannelName);
57
+ this.txn = new EditTxn(this.db, `${testName} element dependency graph`);
58
+ this.txn.start();
52
59
  this.db[_nativeDb].enableTxnTesting();
53
60
  assert.equal(this.db[_nativeDb].addChildPropagatesChangesToParentRelationship("TestBim", "ChildPropagatesChangesToParent"), 0);
54
61
  this.setElementDependencyGraphCallbacks();
55
62
  }
56
63
  terminate() {
64
+ if (this.txn.isActive)
65
+ this.txn.end("abandon");
57
66
  this.db.close();
58
67
  assert.isFalse(this.db.isOpen);
59
68
  this.removeElementDependencyGraphCallbacks();
@@ -76,12 +85,12 @@ class TestHelper {
76
85
  };
77
86
  }
78
87
  insertElement(codeValue, parent) {
79
- return this.db.elements.insertElement(this.makeElement(codeValue, parent));
88
+ return this.txn.insertElement(this.makeElement(codeValue, parent));
80
89
  }
81
90
  updateElement(elid, newLabel) {
82
91
  const ed2 = this.db.elements.getElement({ id: elid });
83
92
  ed2.userLabel = newLabel;
84
- this.db.elements.updateElement(ed2.toJSON());
93
+ this.txn.updateElement(ed2.toJSON());
85
94
  }
86
95
  fmtElem(elId) { return this.db.elements.getElement(elId).code.value; }
87
96
  fmtRel(props) { return `${props.classFullName} ${this.fmtElem(props.sourceId)} --> ${this.fmtElem(props.targetId)}`; }
@@ -89,21 +98,21 @@ class TestHelper {
89
98
  this.dres = new DependencyCallbackResults();
90
99
  }
91
100
  setElementDependencyGraphCallbacks() {
92
- this.removals.push(TestElementDrivesElement.deletedDependency.addListener((evProps) => {
93
- Logger.logTrace("EDGTest", `_onDeletedDependency ${this.fmtRel(evProps)}`);
94
- this.dres.deletedDependency.push(evProps);
101
+ this.removals.push(TestElementDrivesElement.deletedDependency.addListener((arg) => {
102
+ Logger.logTrace("EDGTest", `_onDeletedDependency ${this.fmtRel(arg.props)}`);
103
+ this.dres.deletedDependency.push(arg.props);
95
104
  }));
96
- this.removals.push(TestElementDrivesElement.rootChanged.addListener((evProps, _im) => {
97
- Logger.logTrace("EDGTest", `_onRootChanged ${this.fmtRel(evProps)}`);
98
- this.dres.rootChanged.push(evProps);
105
+ this.removals.push(TestElementDrivesElement.rootChanged.addListener((arg) => {
106
+ Logger.logTrace("EDGTest", `_onRootChanged ${this.fmtRel(arg.props)}`);
107
+ this.dres.rootChanged.push(arg.props);
99
108
  }));
100
- this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((elId) => {
101
- Logger.logTrace("EDGTest", `_onBeforeOutputsHandled ${this.fmtElem(elId)}`);
102
- this.dres.beforeOutputs.push(elId);
109
+ this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((arg) => {
110
+ Logger.logTrace("EDGTest", `_onBeforeOutputsHandled ${this.fmtElem(arg.elId)}`);
111
+ this.dres.beforeOutputs.push(arg.elId);
103
112
  }));
104
- this.removals.push(TestPhysicalObject.allInputsHandled.addListener((elId) => {
105
- Logger.logTrace("EDGTest", `_onAllInputsHandled ${this.fmtElem(elId)}`);
106
- this.dres.allInputsHandled.push(elId);
113
+ this.removals.push(TestPhysicalObject.allInputsHandled.addListener((arg) => {
114
+ Logger.logTrace("EDGTest", `_onAllInputsHandled ${this.fmtElem(arg.elId)}`);
115
+ this.dres.allInputsHandled.push(arg.elId);
107
116
  }));
108
117
  }
109
118
  removeElementDependencyGraphCallbacks() {
@@ -134,11 +143,10 @@ describe("ElementDependencyGraph", () => {
134
143
  const imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);
135
144
  await imodel.importSchemas([schemaFileName]); // will throw an exception if import fails
136
145
  imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
137
- const physicalModelId = PhysicalModel.insert(imodel, IModel.rootSubjectId, "EDGTestModel");
138
- const codeSpecId = imodel.codeSpecs.insert(CodeSpec.create(imodel, "EDGTestCodeSpec", CodeScopeSpec.Type.Model));
139
- const spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, "EDGTestSpatialCategory", new SubCategoryAppearance({ color: ColorByName.darkRed }));
146
+ const physicalModelId = withEditTxn(imodel, (txn) => PhysicalModel.insert(txn, IModel.rootSubjectId, "EDGTestModel"));
147
+ const codeSpecId = withEditTxn(imodel, (txn) => imodel.codeSpecs.insert(txn, CodeSpec.create(imodel, "EDGTestCodeSpec", CodeScopeSpec.Type.Model)));
148
+ const spatialCategoryId = withEditTxn(imodel, (txn) => SpatialCategory.insert(txn, IModel.dictionaryId, "EDGTestSpatialCategory", new SubCategoryAppearance({ color: ColorByName.darkRed })));
140
149
  dbInfo = { physicalModelId, codeSpecId, spatialCategoryId, seedFileName: testFileName };
141
- imodel.saveChanges("");
142
150
  imodel[_nativeDb].deleteAllTxns();
143
151
  imodel.close();
144
152
  });
@@ -150,22 +158,22 @@ describe("ElementDependencyGraph", () => {
150
158
  const e1id = helper.insertElement("e1");
151
159
  const e2id = helper.insertElement("e2");
152
160
  const e3id = helper.insertElement("e3");
153
- helper.db.saveChanges(); // get the elements into the iModel
161
+ saveTestChanges(helper.txn); // get the elements into the iModel
154
162
  const ede_1_2 = TestElementDrivesElement.create(helper.db, e1id, e2id);
155
163
  const ede_2_3 = TestElementDrivesElement.create(helper.db, e2id, e3id);
156
164
  for (const ede of [ede_1_2, ede_2_3]) {
157
- ede.insert();
165
+ ede.id = helper.txn.insertRelationship(ede.toJSON());
158
166
  }
159
167
  // The full graph:
160
168
  // e1 --> e2 --> e3
161
169
  helper.resetDependencyResults();
162
- helper.db.saveChanges(); // this will react to EDE inserts only.
170
+ saveTestChanges(helper.txn); // this will react to EDE inserts only.
163
171
  assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
164
172
  assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
165
173
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.
166
174
  helper.updateElement(e1id, "change e1");
167
175
  helper.resetDependencyResults();
168
- helper.db.saveChanges();
176
+ saveTestChanges(helper.txn);
169
177
  assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
170
178
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id]);
171
179
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]);
@@ -175,26 +183,26 @@ describe("ElementDependencyGraph", () => {
175
183
  const helper = new TestHelper("Parents", dbInfo);
176
184
  const p2id = helper.insertElement("p2");
177
185
  const e1id = helper.insertElement("e1", { id: p2id, relClassName: "TestBim.ChildPropagatesChangesToParent" });
178
- helper.db.saveChanges(); // get the elements into the iModel
186
+ saveTestChanges(helper.txn); // get the elements into the iModel
179
187
  // The full graph:
180
188
  // .-parent-> p2
181
189
  // /
182
190
  // e1
183
191
  //
184
192
  helper.resetDependencyResults();
185
- helper.db.saveChanges();
193
+ saveTestChanges(helper.txn);
186
194
  assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
187
195
  assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
188
196
  assertRels(helper.dres.rootChanged, []); // we send out this callback even if only the relationship itself is new or changed.
189
197
  helper.updateElement(e1id, "change e1");
190
198
  helper.resetDependencyResults();
191
- helper.db.saveChanges();
199
+ saveTestChanges(helper.txn);
192
200
  assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
193
201
  assert.deepEqual(helper.dres.allInputsHandled, [p2id]);
194
202
  assertRels(helper.dres.rootChanged, []);
195
203
  helper.updateElement(p2id, "change p2");
196
204
  helper.resetDependencyResults();
197
- helper.db.saveChanges();
205
+ saveTestChanges(helper.txn);
198
206
  assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements
199
207
  assert.deepEqual(helper.dres.allInputsHandled, []);
200
208
  assertRels(helper.dres.rootChanged, []);
@@ -207,12 +215,12 @@ describe("ElementDependencyGraph", () => {
207
215
  const e1id = helper.insertElement("e1", { id: p2id, relClassName: "TestBim.ChildPropagatesChangesToParent" });
208
216
  const e2id = helper.insertElement("e2");
209
217
  const e3id = helper.insertElement("e3");
210
- helper.db.saveChanges(); // get the elements into the iModel
218
+ saveTestChanges(helper.txn); // get the elements into the iModel
211
219
  const ede_1_2 = TestElementDrivesElement.create(helper.db, e1id, e2id);
212
220
  const ede_2_3 = TestElementDrivesElement.create(helper.db, e2id, e3id);
213
221
  const ede_p2_p3 = TestElementDrivesElement.create(helper.db, p2id, p3id);
214
222
  for (const ede of [ede_1_2, ede_2_3, ede_p2_p3]) {
215
- ede.insert();
223
+ ede.id = helper.txn.insertRelationship(ede.toJSON());
216
224
  }
217
225
  // db[_nativeDb].writeFullElementDependencyGraphToFile(`${writeDbFileName}.dot`);
218
226
  // The full graph:
@@ -221,25 +229,25 @@ describe("ElementDependencyGraph", () => {
221
229
  // e1 -EDE-> e2 -EDE-> e3
222
230
  //
223
231
  helper.resetDependencyResults();
224
- helper.db.saveChanges(); // this will react to EDE inserts only.
232
+ saveTestChanges(helper.txn); // this will react to EDE inserts only.
225
233
  assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
226
234
  assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
227
235
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.
228
236
  helper.updateElement(e1id, "change e1");
229
237
  helper.resetDependencyResults();
230
- helper.db.saveChanges();
238
+ saveTestChanges(helper.txn);
231
239
  assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
232
240
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, p2id, e3id, p3id]);
233
241
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]);
234
242
  helper.updateElement(p2id, "change p2");
235
243
  helper.resetDependencyResults();
236
- helper.db.saveChanges();
244
+ saveTestChanges(helper.txn);
237
245
  assert.deepEqual(helper.dres.beforeOutputs, [p2id]); // only called on directly changed root elements.
238
246
  assert.deepEqual(helper.dres.allInputsHandled, [p3id]);
239
247
  assertRels(helper.dres.rootChanged, [ede_p2_p3.toJSON()]);
240
248
  helper.updateElement(e2id, "change e2");
241
249
  helper.resetDependencyResults();
242
- helper.db.saveChanges();
250
+ saveTestChanges(helper.txn);
243
251
  assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements.
244
252
  assert.deepEqual(helper.dres.allInputsHandled, [e3id]);
245
253
  assertRels(helper.dres.rootChanged, [ede_2_3.toJSON()]);
@@ -258,17 +266,17 @@ describe("ElementDependencyGraph", () => {
258
266
  const materialDepthRange = helper.insertElement("MaterialDepthRange", { id: borehole, relClassName: "TestBim.ChildPropagatesChangesToParent" });
259
267
  const material = helper.insertElement("Material");
260
268
  const groundGeneration = helper.insertElement("GroundGeneration");
261
- helper.db.saveChanges(); // get the elements into the iModel
269
+ saveTestChanges(helper.txn); // get the elements into the iModel
262
270
  const ede_material_materialDepthRange = TestElementDrivesElement.create(helper.db, material, materialDepthRange);
263
271
  const ede_boreholeSource_groundGeneration = TestElementDrivesElement.create(helper.db, boreholeSource, groundGeneration);
264
272
  for (const ede of [ede_material_materialDepthRange, ede_boreholeSource_groundGeneration]) {
265
- ede.insert();
273
+ ede.id = helper.txn.insertRelationship(ede.toJSON());
266
274
  }
267
275
  helper.resetDependencyResults();
268
- helper.db.saveChanges();
276
+ saveTestChanges(helper.txn);
269
277
  helper.updateElement(material, "change material");
270
278
  helper.resetDependencyResults();
271
- helper.db.saveChanges();
279
+ saveTestChanges(helper.txn);
272
280
  assert.deepEqual(helper.dres.beforeOutputs, [material]); // only called on directly changed root elements.
273
281
  assert.deepEqual(helper.dres.allInputsHandled, [materialDepthRange, borehole, boreholeSource, groundGeneration]);
274
282
  assertRels(helper.dres.rootChanged, [ede_material_materialDepthRange.toJSON(), ede_boreholeSource_groundGeneration.toJSON()]);
@@ -288,7 +296,7 @@ describe("ElementDependencyGraph", () => {
288
296
  const ede_21_3 = TestElementDrivesElement.create(helper.db, e21id, e3id);
289
297
  const ede_3_4 = TestElementDrivesElement.create(helper.db, e3id, e4id);
290
298
  for (const ede of [ede_1_2, ede_11_2, ede_2_3, ede_21_3, ede_3_4]) {
291
- ede.insert();
299
+ ede.id = helper.txn.insertRelationship(ede.toJSON());
292
300
  }
293
301
  // The full graph:
294
302
  // e21
@@ -304,7 +312,7 @@ describe("ElementDependencyGraph", () => {
304
312
  // /
305
313
  // e11
306
314
  helper.resetDependencyResults();
307
- helper.db.saveChanges();
315
+ saveTestChanges(helper.txn);
308
316
  assert.deepEqual(helper.dres.beforeOutputs, [e1id, e11id, e21id]); // only called on directly changed root elements.
309
317
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);
310
318
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_11_2.toJSON(), ede_2_3.toJSON(), ede_21_3.toJSON(), ede_3_4.toJSON()]);
@@ -316,7 +324,7 @@ describe("ElementDependencyGraph", () => {
316
324
  //
317
325
  helper.updateElement(e4id, "change e4");
318
326
  helper.resetDependencyResults();
319
- helper.db.saveChanges();
327
+ saveTestChanges(helper.txn);
320
328
  assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements.
321
329
  assert.deepEqual(helper.dres.allInputsHandled, []);
322
330
  assertRels(helper.dres.rootChanged, []);
@@ -330,7 +338,7 @@ describe("ElementDependencyGraph", () => {
330
338
  //
331
339
  helper.updateElement(e3id, "change e3");
332
340
  helper.resetDependencyResults();
333
- helper.db.saveChanges();
341
+ saveTestChanges(helper.txn);
334
342
  assert.deepEqual(helper.dres.beforeOutputs, [e3id]); // only called on directly changed root elements.
335
343
  assert.deepEqual(helper.dres.allInputsHandled, [e4id]);
336
344
  assertRels(helper.dres.rootChanged, [ede_3_4.toJSON()]);
@@ -344,7 +352,7 @@ describe("ElementDependencyGraph", () => {
344
352
  //
345
353
  helper.updateElement(e2id, "change e2");
346
354
  helper.resetDependencyResults();
347
- helper.db.saveChanges();
355
+ saveTestChanges(helper.txn);
348
356
  assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements
349
357
  assert.deepEqual(helper.dres.allInputsHandled, [e3id, e4id]);
350
358
  assertRels(helper.dres.rootChanged, [ede_2_3.toJSON(), ede_3_4.toJSON()]);
@@ -356,7 +364,7 @@ describe("ElementDependencyGraph", () => {
356
364
  //
357
365
  helper.updateElement(e1id, "change e1");
358
366
  helper.resetDependencyResults();
359
- helper.db.saveChanges();
367
+ saveTestChanges(helper.txn);
360
368
  assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements
361
369
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);
362
370
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);
@@ -371,7 +379,7 @@ describe("ElementDependencyGraph", () => {
371
379
  // Note that the e1 -> e2 and e21 -> e3 edges are NOT in the sub-graph. These edges should be validated, nevertheless -- TBD
372
380
  helper.updateElement(e11id, "change e11");
373
381
  helper.resetDependencyResults();
374
- helper.db.saveChanges();
382
+ saveTestChanges(helper.txn);
375
383
  // assert.deepEqual(helper.dres.directChange, []); // only called on directly changed non-root elements that have no directly changed inputs
376
384
  assert.deepEqual(helper.dres.beforeOutputs, [e11id]); // only called on directly changed root elements
377
385
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);