@itwin/core-backend 5.8.0-dev.8 → 5.9.0-dev.1

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 (503) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.js.map +1 -1
  8. package/lib/cjs/Category.js.map +1 -1
  9. package/lib/cjs/ChangeSummaryManager.js +2 -2
  10. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  13. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  14. package/lib/cjs/ChannelControl.js.map +1 -1
  15. package/lib/cjs/CheckpointManager.js.map +1 -1
  16. package/lib/cjs/ClassRegistry.js +5 -5
  17. package/lib/cjs/ClassRegistry.js.map +1 -1
  18. package/lib/cjs/CloudSqlite.js.map +1 -1
  19. package/lib/cjs/CodeService.js.map +1 -1
  20. package/lib/cjs/CodeSpecs.js.map +1 -1
  21. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  22. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  23. package/lib/cjs/DevTools.js.map +1 -1
  24. package/lib/cjs/DisplayStyle.js.map +1 -1
  25. package/lib/cjs/ECDb.js.map +1 -1
  26. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  27. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  28. package/lib/cjs/ECSqlStatement.js.map +1 -1
  29. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  30. package/lib/cjs/Element.js.map +1 -1
  31. package/lib/cjs/ElementAspect.js.map +1 -1
  32. package/lib/cjs/ElementGraphics.js.map +1 -1
  33. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  34. package/lib/cjs/Entity.js.map +1 -1
  35. package/lib/cjs/EntityReferences.js.map +1 -1
  36. package/lib/cjs/ExportGraphics.js.map +1 -1
  37. package/lib/cjs/ExternalSource.js.map +1 -1
  38. package/lib/cjs/FontFile.js.map +1 -1
  39. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  40. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  41. package/lib/cjs/GeometrySummary.js +47 -47
  42. package/lib/cjs/GeometrySummary.js.map +1 -1
  43. package/lib/cjs/IModelDb.d.ts +5 -0
  44. package/lib/cjs/IModelDb.d.ts.map +1 -1
  45. package/lib/cjs/IModelDb.js +20 -11
  46. package/lib/cjs/IModelDb.js.map +1 -1
  47. package/lib/cjs/IModelDbFonts.js.map +1 -1
  48. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  49. package/lib/cjs/IModelHost.js.map +1 -1
  50. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  51. package/lib/cjs/IModelJsFs.js.map +1 -1
  52. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  53. package/lib/cjs/IpcHost.d.ts.map +1 -1
  54. package/lib/cjs/IpcHost.js +28 -4
  55. package/lib/cjs/IpcHost.js.map +1 -1
  56. package/lib/cjs/LineStyle.d.ts +6 -0
  57. package/lib/cjs/LineStyle.d.ts.map +1 -1
  58. package/lib/cjs/LineStyle.js +41 -32
  59. package/lib/cjs/LineStyle.js.map +1 -1
  60. package/lib/cjs/LocalHub.d.ts +17 -10
  61. package/lib/cjs/LocalHub.d.ts.map +1 -1
  62. package/lib/cjs/LocalHub.js +127 -29
  63. package/lib/cjs/LocalHub.js.map +1 -1
  64. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  65. package/lib/cjs/LockControl.js.map +1 -1
  66. package/lib/cjs/Material.js.map +1 -1
  67. package/lib/cjs/Model.js.map +1 -1
  68. package/lib/cjs/NativeAppStorage.js.map +1 -1
  69. package/lib/cjs/NativeHost.js.map +1 -1
  70. package/lib/cjs/NavigationRelationship.js.map +1 -1
  71. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  72. package/lib/cjs/PropertyStore.js.map +1 -1
  73. package/lib/cjs/Relationship.js.map +1 -1
  74. package/lib/cjs/RpcBackend.js.map +1 -1
  75. package/lib/cjs/SQLiteDb.js.map +1 -1
  76. package/lib/cjs/Schema.js.map +1 -1
  77. package/lib/cjs/SchemaSync.js.map +1 -1
  78. package/lib/cjs/SchemaUtils.js.map +1 -1
  79. package/lib/cjs/SheetIndex.js.map +1 -1
  80. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  81. package/lib/cjs/SqliteStatement.js.map +1 -1
  82. package/lib/cjs/StashManager.js.map +1 -1
  83. package/lib/cjs/Texture.js.map +1 -1
  84. package/lib/cjs/TileStorage.js.map +1 -1
  85. package/lib/cjs/TxnManager.js.map +1 -1
  86. package/lib/cjs/ViewDefinition.js.map +1 -1
  87. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  88. package/lib/cjs/ViewStore.js.map +1 -1
  89. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  90. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  91. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  92. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  93. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  94. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  95. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  96. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  97. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  98. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  99. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  100. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  101. package/lib/cjs/core-backend.d.ts +2 -0
  102. package/lib/cjs/core-backend.d.ts.map +1 -1
  103. package/lib/cjs/core-backend.js +2 -0
  104. package/lib/cjs/core-backend.js.map +1 -1
  105. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  106. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  107. package/lib/cjs/domains/GenericElements.js.map +1 -1
  108. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  109. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  110. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  111. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  112. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  113. package/lib/cjs/internal/HubMock.js.map +1 -1
  114. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  115. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  116. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  117. package/lib/cjs/internal/NoLocks.js.map +1 -1
  118. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  119. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  120. package/lib/cjs/internal/Symbols.js.map +1 -1
  121. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  122. package/lib/cjs/internal/cross-package.js.map +1 -1
  123. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +38 -0
  124. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
  125. package/lib/cjs/internal/workspace/SettingsDbImpl.js +108 -0
  126. package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +1 -0
  127. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +7 -0
  128. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
  129. package/lib/cjs/internal/workspace/SettingsEditorImpl.js +266 -0
  130. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -0
  131. package/lib/cjs/internal/workspace/SettingsImpl.d.ts +1 -0
  132. package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
  133. package/lib/cjs/internal/workspace/SettingsImpl.js +8 -4
  134. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  135. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  136. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +14 -0
  137. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
  138. package/lib/cjs/internal/workspace/SettingsSqliteDb.js +40 -0
  139. package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +1 -0
  140. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +1 -0
  141. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  142. package/lib/cjs/internal/workspace/WorkspaceImpl.js +57 -14
  143. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  144. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  145. package/lib/cjs/rpc/multipart.js.map +1 -1
  146. package/lib/cjs/rpc/tracing.js.map +1 -1
  147. package/lib/cjs/rpc/web/logging.js.map +1 -1
  148. package/lib/cjs/rpc/web/request.js.map +1 -1
  149. package/lib/cjs/rpc/web/response.js.map +1 -1
  150. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  151. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  152. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  153. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  154. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  155. package/lib/cjs/workspace/Settings.d.ts +8 -0
  156. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  157. package/lib/cjs/workspace/Settings.js.map +1 -1
  158. package/lib/cjs/workspace/SettingsDb.d.ts +109 -0
  159. package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -0
  160. package/lib/cjs/workspace/SettingsDb.js +19 -0
  161. package/lib/cjs/workspace/SettingsDb.js.map +1 -0
  162. package/lib/cjs/workspace/SettingsEditor.d.ts +250 -0
  163. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -0
  164. package/lib/cjs/workspace/SettingsEditor.js +53 -0
  165. package/lib/cjs/workspace/SettingsEditor.js.map +1 -0
  166. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  167. package/lib/cjs/workspace/Workspace.d.ts +42 -19
  168. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  169. package/lib/cjs/workspace/Workspace.js.map +1 -1
  170. package/lib/cjs/workspace/WorkspaceEditor.d.ts +32 -1
  171. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  172. package/lib/cjs/workspace/WorkspaceEditor.js +19 -0
  173. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  174. package/lib/esm/BackendHubAccess.js.map +1 -1
  175. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  176. package/lib/esm/BisCoreSchema.js.map +1 -1
  177. package/lib/esm/BlobContainerService.js.map +1 -1
  178. package/lib/esm/BriefcaseManager.js.map +1 -1
  179. package/lib/esm/CatalogDb.js.map +1 -1
  180. package/lib/esm/Category.js.map +1 -1
  181. package/lib/esm/ChangeSummaryManager.js +2 -2
  182. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  183. package/lib/esm/ChangedElementsDb.js.map +1 -1
  184. package/lib/esm/ChangesetECAdaptor.js +248 -248
  185. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  186. package/lib/esm/ChannelControl.js.map +1 -1
  187. package/lib/esm/CheckpointManager.js.map +1 -1
  188. package/lib/esm/ClassRegistry.js +5 -5
  189. package/lib/esm/ClassRegistry.js.map +1 -1
  190. package/lib/esm/CloudSqlite.js.map +1 -1
  191. package/lib/esm/CodeService.js.map +1 -1
  192. package/lib/esm/CodeSpecs.js.map +1 -1
  193. package/lib/esm/ConcurrentQuery.js.map +1 -1
  194. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  195. package/lib/esm/DevTools.js.map +1 -1
  196. package/lib/esm/DisplayStyle.js.map +1 -1
  197. package/lib/esm/ECDb.js.map +1 -1
  198. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  199. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  200. package/lib/esm/ECSqlStatement.js.map +1 -1
  201. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  202. package/lib/esm/Element.js.map +1 -1
  203. package/lib/esm/ElementAspect.js.map +1 -1
  204. package/lib/esm/ElementGraphics.js.map +1 -1
  205. package/lib/esm/ElementTreeWalker.js.map +1 -1
  206. package/lib/esm/Entity.js.map +1 -1
  207. package/lib/esm/EntityReferences.js.map +1 -1
  208. package/lib/esm/ExportGraphics.js.map +1 -1
  209. package/lib/esm/ExternalSource.js.map +1 -1
  210. package/lib/esm/FontFile.js.map +1 -1
  211. package/lib/esm/GeoCoordConfig.js.map +1 -1
  212. package/lib/esm/GeographicCRSServices.js.map +1 -1
  213. package/lib/esm/GeometrySummary.js +47 -47
  214. package/lib/esm/GeometrySummary.js.map +1 -1
  215. package/lib/esm/IModelDb.d.ts +5 -0
  216. package/lib/esm/IModelDb.d.ts.map +1 -1
  217. package/lib/esm/IModelDb.js +20 -11
  218. package/lib/esm/IModelDb.js.map +1 -1
  219. package/lib/esm/IModelDbFonts.js.map +1 -1
  220. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  221. package/lib/esm/IModelHost.js.map +1 -1
  222. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  223. package/lib/esm/IModelJsFs.js.map +1 -1
  224. package/lib/esm/ImageSourceConversion.js.map +1 -1
  225. package/lib/esm/IpcHost.d.ts.map +1 -1
  226. package/lib/esm/IpcHost.js +28 -4
  227. package/lib/esm/IpcHost.js.map +1 -1
  228. package/lib/esm/LineStyle.d.ts +6 -0
  229. package/lib/esm/LineStyle.d.ts.map +1 -1
  230. package/lib/esm/LineStyle.js +41 -32
  231. package/lib/esm/LineStyle.js.map +1 -1
  232. package/lib/esm/LocalHub.d.ts +17 -10
  233. package/lib/esm/LocalHub.d.ts.map +1 -1
  234. package/lib/esm/LocalHub.js +128 -30
  235. package/lib/esm/LocalHub.js.map +1 -1
  236. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  237. package/lib/esm/LockControl.js.map +1 -1
  238. package/lib/esm/Material.js.map +1 -1
  239. package/lib/esm/Model.js.map +1 -1
  240. package/lib/esm/NativeAppStorage.js.map +1 -1
  241. package/lib/esm/NativeHost.js.map +1 -1
  242. package/lib/esm/NavigationRelationship.js.map +1 -1
  243. package/lib/esm/PromiseMemoizer.js.map +1 -1
  244. package/lib/esm/PropertyStore.js.map +1 -1
  245. package/lib/esm/Relationship.js.map +1 -1
  246. package/lib/esm/RpcBackend.js.map +1 -1
  247. package/lib/esm/SQLiteDb.js.map +1 -1
  248. package/lib/esm/Schema.js.map +1 -1
  249. package/lib/esm/SchemaSync.js.map +1 -1
  250. package/lib/esm/SchemaUtils.js.map +1 -1
  251. package/lib/esm/SheetIndex.js.map +1 -1
  252. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  253. package/lib/esm/SqliteStatement.js.map +1 -1
  254. package/lib/esm/StashManager.js.map +1 -1
  255. package/lib/esm/Texture.js.map +1 -1
  256. package/lib/esm/TileStorage.js.map +1 -1
  257. package/lib/esm/TxnManager.js.map +1 -1
  258. package/lib/esm/ViewDefinition.js.map +1 -1
  259. package/lib/esm/ViewStateHydrator.js.map +1 -1
  260. package/lib/esm/ViewStore.js.map +1 -1
  261. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  262. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  263. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  264. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  265. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  266. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  267. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  268. package/lib/esm/core-backend.d.ts +2 -0
  269. package/lib/esm/core-backend.d.ts.map +1 -1
  270. package/lib/esm/core-backend.js +2 -0
  271. package/lib/esm/core-backend.js.map +1 -1
  272. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  273. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  274. package/lib/esm/domains/GenericElements.js.map +1 -1
  275. package/lib/esm/domains/GenericSchema.js.map +1 -1
  276. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  277. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  278. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  279. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  280. package/lib/esm/internal/HubMock.js.map +1 -1
  281. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  282. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  283. package/lib/esm/internal/NativePlatform.js.map +1 -1
  284. package/lib/esm/internal/NoLocks.js.map +1 -1
  285. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  286. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  287. package/lib/esm/internal/Symbols.js.map +1 -1
  288. package/lib/esm/internal/annotations/fields.js.map +1 -1
  289. package/lib/esm/internal/cross-package.js.map +1 -1
  290. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +38 -0
  291. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
  292. package/lib/esm/internal/workspace/SettingsDbImpl.js +104 -0
  293. package/lib/esm/internal/workspace/SettingsDbImpl.js.map +1 -0
  294. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +7 -0
  295. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
  296. package/lib/esm/internal/workspace/SettingsEditorImpl.js +263 -0
  297. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -0
  298. package/lib/esm/internal/workspace/SettingsImpl.d.ts +1 -0
  299. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
  300. package/lib/esm/internal/workspace/SettingsImpl.js +5 -2
  301. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  302. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  303. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +14 -0
  304. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
  305. package/lib/esm/internal/workspace/SettingsSqliteDb.js +36 -0
  306. package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +1 -0
  307. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +1 -0
  308. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  309. package/lib/esm/internal/workspace/WorkspaceImpl.js +57 -15
  310. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  311. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  312. package/lib/esm/rpc/multipart.js.map +1 -1
  313. package/lib/esm/rpc/tracing.js.map +1 -1
  314. package/lib/esm/rpc/web/logging.js.map +1 -1
  315. package/lib/esm/rpc/web/request.js.map +1 -1
  316. package/lib/esm/rpc/web/response.js.map +1 -1
  317. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  318. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  319. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  320. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  321. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  322. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  323. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  324. package/lib/esm/test/AttachDb.test.js +11 -11
  325. package/lib/esm/test/AttachDb.test.js.map +1 -1
  326. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  327. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  328. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  329. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  330. package/lib/esm/test/IModelHost.test.js.map +1 -1
  331. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  332. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  333. package/lib/esm/test/IpcHost.test.js +64 -13
  334. package/lib/esm/test/IpcHost.test.js.map +1 -1
  335. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  336. package/lib/esm/test/PrintElementTree.js.map +1 -1
  337. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  338. package/lib/esm/test/RevisionUtility.js.map +1 -1
  339. package/lib/esm/test/SchemaUtils.test.js +25 -25
  340. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  341. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  342. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  343. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  344. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  345. package/lib/esm/test/TestUtils.js.map +1 -1
  346. package/lib/esm/test/annotations/Fields.test.js +53 -53
  347. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  348. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  349. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  350. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  351. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  352. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  353. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  354. package/lib/esm/test/categories/Category.test.js.map +1 -1
  355. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  356. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  357. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  358. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  359. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  360. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  361. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  362. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  363. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  364. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  365. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  366. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  367. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  368. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  369. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  370. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  371. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  372. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  373. package/lib/esm/test/ecdb/QueryReaders.test.js +62 -27
  374. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  375. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  376. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  377. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +4 -1
  378. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  379. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  380. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  381. package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts.map +1 -1
  382. package/lib/esm/test/ecsql/src/ECSqlTestParser.js +4 -0
  383. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  384. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +14 -2
  385. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  386. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  387. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  388. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  389. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  390. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  391. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  392. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  393. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  394. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  395. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  396. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  397. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  398. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  399. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  400. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  401. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  402. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  403. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  404. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  405. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  406. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  407. package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
  408. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  409. package/lib/esm/test/imageData.js.map +1 -1
  410. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  411. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  412. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  413. package/lib/esm/test/imodel/IModel.test.js +44 -44
  414. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  415. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  416. package/lib/esm/test/imodel/SchemaXmlImport.test.js +13 -13
  417. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  418. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  419. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  420. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  421. package/lib/esm/test/index.js.map +1 -1
  422. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  423. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  424. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  425. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  426. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  427. package/lib/esm/test/rpc/response.test.js.map +1 -1
  428. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  429. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  430. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  431. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  432. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  433. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  434. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  435. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  436. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  437. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  438. package/lib/esm/test/standalone/ChangesetReader.test.js +135 -135
  439. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  440. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  441. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  442. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  443. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  444. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  445. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  446. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  447. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  448. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  449. package/lib/esm/test/standalone/HubMock.test.js +177 -7
  450. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  451. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  452. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  453. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  454. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  455. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  456. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  457. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  458. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  459. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  460. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  461. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  462. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  463. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  464. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  465. package/lib/esm/test/standalone/Settings.test.js +18 -0
  466. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  467. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  468. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  469. package/lib/esm/test/standalone/StandaloneDb.test.js +51 -1
  470. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  471. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  472. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  473. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  474. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  475. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  476. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  477. package/lib/esm/test/standalone/Workspace.test.js +160 -0
  478. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  479. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  480. package/lib/esm/test/workspace/SettingsDb.test.d.ts +2 -0
  481. package/lib/esm/test/workspace/SettingsDb.test.d.ts.map +1 -0
  482. package/lib/esm/test/workspace/SettingsDb.test.js +465 -0
  483. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -0
  484. package/lib/esm/workspace/Settings.d.ts +8 -0
  485. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  486. package/lib/esm/workspace/Settings.js.map +1 -1
  487. package/lib/esm/workspace/SettingsDb.d.ts +109 -0
  488. package/lib/esm/workspace/SettingsDb.d.ts.map +1 -0
  489. package/lib/esm/workspace/SettingsDb.js +16 -0
  490. package/lib/esm/workspace/SettingsDb.js.map +1 -0
  491. package/lib/esm/workspace/SettingsEditor.d.ts +250 -0
  492. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -0
  493. package/lib/esm/workspace/SettingsEditor.js +50 -0
  494. package/lib/esm/workspace/SettingsEditor.js.map +1 -0
  495. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  496. package/lib/esm/workspace/Workspace.d.ts +42 -19
  497. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  498. package/lib/esm/workspace/Workspace.js.map +1 -1
  499. package/lib/esm/workspace/WorkspaceEditor.d.ts +32 -1
  500. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  501. package/lib/esm/workspace/WorkspaceEditor.js +19 -0
  502. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  503. package/package.json +13 -13
@@ -78,7 +78,7 @@ describe("ElementAspect", () => {
78
78
  assert.equal(aspectX.schemaName, aspect.schemaName);
79
79
  assert.equal(aspectX.className, aspect.className);
80
80
  });
81
- assert.equal(JSON.stringify(uniqueAspects), `[{"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
81
+ assert.equal(JSON.stringify(uniqueAspects), `[{"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
82
82
  {"classFullName":"DgnPlatformTest:TestUniqueAspectNoHandler","id":"0x6","testUniqueAspectProperty":"Aspect1-Updated","length":1,"element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}}]`.replace(/\s+/g, ""));
83
83
  const multiAspectsA = iModel.elements.getAspects(element.id, "DgnPlatformTest:TestMultiAspectNoHandler");
84
84
  assert.exists(multiAspectsA);
@@ -97,7 +97,7 @@ describe("ElementAspect", () => {
97
97
  assert.exists(aspectX.asAny.testMultiAspectProperty);
98
98
  assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);
99
99
  });
100
- assert.equal(JSON.stringify(multiAspectsA), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
100
+ assert.equal(JSON.stringify(multiAspectsA), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
101
101
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
102
102
  // Test getAspects with dot separator
103
103
  const multiAspectsADotSeparator = iModel.elements.getAspects(element.id, "DgnPlatformTest.TestMultiAspectNoHandler");
@@ -117,7 +117,7 @@ describe("ElementAspect", () => {
117
117
  assert.exists(aspectX.asAny.testMultiAspectProperty);
118
118
  assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);
119
119
  });
120
- assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
120
+ assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
121
121
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
122
122
  const multiAspectsB = iModel.elements.getAspects(element.id, "DgnPlatformTest:TestMultiAspect");
123
123
  assert.exists(multiAspectsB);
@@ -135,7 +135,7 @@ describe("ElementAspect", () => {
135
135
  assert.equal(aspectX.className, "TestMultiAspect");
136
136
  assert.exists(aspectX.asAny.testMultiAspectProperty);
137
137
  });
138
- assert.equal(JSON.stringify(multiAspectsB), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
138
+ assert.equal(JSON.stringify(multiAspectsB), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
139
139
  {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
140
140
  const multiAspects = iModel.elements.getAspects(element.id, ElementMultiAspect.classFullName);
141
141
  assert.equal(multiAspects.length, 4);
@@ -147,9 +147,9 @@ describe("ElementAspect", () => {
147
147
  assert.equal(aspectX.schemaName, aspect.schemaName);
148
148
  assert.equal(aspectX.className, aspect.className);
149
149
  });
150
- assert.equal(JSON.stringify(multiAspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
151
- {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
152
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
150
+ assert.equal(JSON.stringify(multiAspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
151
+ {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
152
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
153
153
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
154
154
  const rootSubject = iModel.elements.getRootSubject();
155
155
  assert.equal(0, iModel.elements.getAspects(rootSubject.id, "DgnPlatformTest:TestUniqueAspect").length, "Don't expect DgnPlatformTest:TestUniqueAspect aspects on the root Subject");
@@ -157,11 +157,11 @@ describe("ElementAspect", () => {
157
157
  assert.equal(0, iModel.elements.getAspects(rootSubject.id).length, "Don't expect any aspects on the root Subject");
158
158
  // The 'Element' property is introduced by ElementUniqueAspect and ElementMultiAspect, but is not available at the ElementAspect base class.
159
159
  // Since we're now using instance queries to query ElementUniqueAspect and ElementMultiAspect directly in getAspects(), we can provide ElementAspect to the function as well.
160
- const aspectList = `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
161
- {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
162
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
163
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
164
- {"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
160
+ const aspectList = `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
161
+ {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
162
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
163
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
164
+ {"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
165
165
  {"classFullName":"DgnPlatformTest:TestUniqueAspectNoHandler","id":"0x6","testUniqueAspectProperty":"Aspect1-Updated","length":1,"element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}}]`.replace(/\s+/g, "");
166
166
  const aspects = iModel.elements.getAspects(element.id, ElementAspect.classFullName);
167
167
  assert.equal(aspects.length, 6);
@@ -182,8 +182,8 @@ describe("ElementAspect", () => {
182
182
  iModel.elements.insertAspect(aspectProps);
183
183
  let aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);
184
184
  assert.isAtLeast(aspects.length, 1);
185
- assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
186
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
185
+ assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
186
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
187
187
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x21","testMultiAspectProperty":"MultiAspectInsertTest1","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
188
188
  const numAspects = aspects.length;
189
189
  let found = false;
@@ -202,14 +202,14 @@ describe("ElementAspect", () => {
202
202
  assert.equal(aspectsUpdated.length, aspects.length);
203
203
  assert.equal(aspectsUpdated[foundIndex].asAny.testMultiAspectProperty, "MultiAspectInsertTest1-Updated");
204
204
  // Check if aspect was updated
205
- assert.equal(JSON.stringify(aspectsUpdated), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
206
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
205
+ assert.equal(JSON.stringify(aspectsUpdated), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
206
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
207
207
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x21","testMultiAspectProperty":"MultiAspectInsertTest1-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
208
208
  iModel.elements.deleteAspect(aspects[foundIndex].id);
209
209
  aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);
210
210
  assert.equal(numAspects, aspects.length + 1);
211
211
  // Check if aspect was deleted
212
- assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
212
+ assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
213
213
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
214
214
  });
215
215
  it("should be able to insert, update, and delete UniqueAspects", () => {
@@ -329,17 +329,17 @@ describe("ElementAspect", () => {
329
329
  e1Aspects.forEach((x) => {
330
330
  assert.isTrue(findInProps(x, e1AspectProps));
331
331
  });
332
- 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"}},
333
- {"classFullName":"BisCore:ExternalSourceAspect","id":"0x22","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
334
- {"classFullName":"BisCore:ExternalSourceAspect","id":"0x23","scope":{"id":"0x11","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
335
- {"classFullName":"BisCore:ExternalSourceAspect","id":"0x24","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"B","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
332
+ 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"}},
333
+ {"classFullName":"BisCore:ExternalSourceAspect","id":"0x22","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
334
+ {"classFullName":"BisCore:ExternalSourceAspect","id":"0x23","scope":{"id":"0x11","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
335
+ {"classFullName":"BisCore:ExternalSourceAspect","id":"0x24","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"B","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
336
336
  {"classFullName":"BisCore:ExternalSourceAspect","id":"0x25","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"C","kind":"Kind2","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
337
337
  const e2Aspects = iModelDb.elements.getAspects(e2, aspectProps.classFullName);
338
338
  assert.equal(e2Aspects.length, e2AspectProps.length);
339
339
  e2Aspects.forEach((x) => {
340
340
  assert.isTrue(findInProps(x, e2AspectProps));
341
341
  });
342
- 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"}},
342
+ 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"}},
343
343
  {"classFullName":"BisCore:ExternalSourceAspect","id":"0x27","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"C","kind":"Letter","element":{"id":"0x13","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
344
344
  const allA = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, "A");
345
345
  assert.equal(allA.filter((x) => x.elementId === e1).length, 2, "there are two A's in scope 1 on e1");
@@ -1 +1 @@
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 {\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 iModel.elements.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 iModel.elements.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 iModel.elements.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 iModel.elements.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 iModel.elements.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 iModel.elements.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 const elementId: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category\", new SubCategoryAppearance());\r\n assert.isTrue(Id64.isValidId64(elementId));\r\n\r\n const aspectProps: ExternalSourceAspectProps = {\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 iModelDb.elements.insertAspect(aspectProps);\r\n\r\n const aspectJson = aspect.toJSON();\r\n iModelDb.saveChanges();\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, aspect.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 const e1: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category1\", new SubCategoryAppearance());\r\n const e2: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category2\", new SubCategoryAppearance());\r\n\r\n const scopeId1 = IModel.rootSubjectId;\r\n const scopeId2 = e1;\r\n const kind = \"Letter\";\r\n const kind2 = \"Kind2\";\r\n\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 e1AspectProps: 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 e2AspectProps: 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 e1AspectProps.forEach((aspect) => iModelDb.elements.insertAspect(aspect));\r\n e2AspectProps.forEach((aspect) => iModelDb.elements.insertAspect(aspect));\r\n iModelDb.saveChanges();\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, aspectProps.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, aspectProps.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, scopeId2, 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\r\n const subjectId = iModelDb.channels.insertChannelSubject({\r\n subjectName: \"Test Channel Subject\",\r\n channelKey: testChannelKey,\r\n });\r\n iModelDb.saveChanges();\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
+ {"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"]}