@itwin/core-backend 5.5.0-dev.1 → 5.5.0-dev.2

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 (381) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChannelControl.js.map +1 -1
  14. package/lib/cjs/CheckpointManager.js.map +1 -1
  15. package/lib/cjs/ClassRegistry.js +5 -5
  16. package/lib/cjs/ClassRegistry.js.map +1 -1
  17. package/lib/cjs/CloudSqlite.js.map +1 -1
  18. package/lib/cjs/CodeService.js.map +1 -1
  19. package/lib/cjs/CodeSpecs.js.map +1 -1
  20. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  21. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  22. package/lib/cjs/DevTools.js.map +1 -1
  23. package/lib/cjs/DisplayStyle.js.map +1 -1
  24. package/lib/cjs/ECDb.js.map +1 -1
  25. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  26. package/lib/cjs/ECSqlStatement.js.map +1 -1
  27. package/lib/cjs/Element.js.map +1 -1
  28. package/lib/cjs/ElementAspect.js.map +1 -1
  29. package/lib/cjs/ElementGraphics.js.map +1 -1
  30. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  31. package/lib/cjs/Entity.js.map +1 -1
  32. package/lib/cjs/EntityReferences.js.map +1 -1
  33. package/lib/cjs/ExportGraphics.js.map +1 -1
  34. package/lib/cjs/ExternalSource.js.map +1 -1
  35. package/lib/cjs/FontFile.js.map +1 -1
  36. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  37. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  38. package/lib/cjs/GeometrySummary.js +47 -47
  39. package/lib/cjs/GeometrySummary.js.map +1 -1
  40. package/lib/cjs/IModelDb.js +8 -8
  41. package/lib/cjs/IModelDb.js.map +1 -1
  42. package/lib/cjs/IModelDbFonts.js.map +1 -1
  43. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  44. package/lib/cjs/IModelHost.js.map +1 -1
  45. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  46. package/lib/cjs/IModelJsFs.js.map +1 -1
  47. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  48. package/lib/cjs/IpcHost.js.map +1 -1
  49. package/lib/cjs/LineStyle.js.map +1 -1
  50. package/lib/cjs/LocalHub.js +1 -1
  51. package/lib/cjs/LocalHub.js.map +1 -1
  52. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  53. package/lib/cjs/LockControl.js.map +1 -1
  54. package/lib/cjs/Material.js.map +1 -1
  55. package/lib/cjs/Model.js.map +1 -1
  56. package/lib/cjs/NativeAppStorage.js.map +1 -1
  57. package/lib/cjs/NativeHost.js.map +1 -1
  58. package/lib/cjs/NavigationRelationship.js.map +1 -1
  59. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  60. package/lib/cjs/PropertyStore.js.map +1 -1
  61. package/lib/cjs/Relationship.js.map +1 -1
  62. package/lib/cjs/RpcBackend.js.map +1 -1
  63. package/lib/cjs/SQLiteDb.js.map +1 -1
  64. package/lib/cjs/Schema.js.map +1 -1
  65. package/lib/cjs/SchemaSync.js.map +1 -1
  66. package/lib/cjs/SchemaUtils.js.map +1 -1
  67. package/lib/cjs/SheetIndex.js.map +1 -1
  68. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  69. package/lib/cjs/SqliteStatement.js.map +1 -1
  70. package/lib/cjs/StashManager.js.map +1 -1
  71. package/lib/cjs/Texture.js.map +1 -1
  72. package/lib/cjs/TileStorage.js.map +1 -1
  73. package/lib/cjs/TxnManager.js.map +1 -1
  74. package/lib/cjs/ViewDefinition.js.map +1 -1
  75. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  76. package/lib/cjs/ViewStore.js.map +1 -1
  77. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  78. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  79. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  80. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  81. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  82. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  83. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  84. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  85. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  86. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  87. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  88. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  89. package/lib/cjs/core-backend.js.map +1 -1
  90. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  91. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  92. package/lib/cjs/domains/GenericElements.js.map +1 -1
  93. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  94. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  95. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  96. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  97. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  98. package/lib/cjs/internal/HubMock.js.map +1 -1
  99. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  100. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  101. package/lib/cjs/internal/NoLocks.js.map +1 -1
  102. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  103. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  104. package/lib/cjs/internal/Symbols.js.map +1 -1
  105. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  106. package/lib/cjs/internal/cross-package.js.map +1 -1
  107. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  108. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  109. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  110. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  111. package/lib/cjs/rpc/multipart.js.map +1 -1
  112. package/lib/cjs/rpc/tracing.js.map +1 -1
  113. package/lib/cjs/rpc/web/logging.js.map +1 -1
  114. package/lib/cjs/rpc/web/request.js.map +1 -1
  115. package/lib/cjs/rpc/web/response.js.map +1 -1
  116. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  117. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  118. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  119. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  120. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  121. package/lib/cjs/workspace/Settings.js.map +1 -1
  122. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  123. package/lib/cjs/workspace/Workspace.js.map +1 -1
  124. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  125. package/lib/esm/BackendHubAccess.js.map +1 -1
  126. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  127. package/lib/esm/BisCoreSchema.js.map +1 -1
  128. package/lib/esm/BlobContainerService.js.map +1 -1
  129. package/lib/esm/BriefcaseManager.js.map +1 -1
  130. package/lib/esm/CatalogDb.js.map +1 -1
  131. package/lib/esm/Category.js.map +1 -1
  132. package/lib/esm/ChangeSummaryManager.js +2 -2
  133. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  134. package/lib/esm/ChangedElementsDb.js.map +1 -1
  135. package/lib/esm/ChangesetECAdaptor.js +248 -248
  136. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  137. package/lib/esm/ChannelControl.js.map +1 -1
  138. package/lib/esm/CheckpointManager.js.map +1 -1
  139. package/lib/esm/ClassRegistry.js +5 -5
  140. package/lib/esm/ClassRegistry.js.map +1 -1
  141. package/lib/esm/CloudSqlite.js.map +1 -1
  142. package/lib/esm/CodeService.js.map +1 -1
  143. package/lib/esm/CodeSpecs.js.map +1 -1
  144. package/lib/esm/ConcurrentQuery.js.map +1 -1
  145. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  146. package/lib/esm/DevTools.js.map +1 -1
  147. package/lib/esm/DisplayStyle.js.map +1 -1
  148. package/lib/esm/ECDb.js.map +1 -1
  149. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  150. package/lib/esm/ECSqlStatement.js.map +1 -1
  151. package/lib/esm/Element.js.map +1 -1
  152. package/lib/esm/ElementAspect.js.map +1 -1
  153. package/lib/esm/ElementGraphics.js.map +1 -1
  154. package/lib/esm/ElementTreeWalker.js.map +1 -1
  155. package/lib/esm/Entity.js.map +1 -1
  156. package/lib/esm/EntityReferences.js.map +1 -1
  157. package/lib/esm/ExportGraphics.js.map +1 -1
  158. package/lib/esm/ExternalSource.js.map +1 -1
  159. package/lib/esm/FontFile.js.map +1 -1
  160. package/lib/esm/GeoCoordConfig.js.map +1 -1
  161. package/lib/esm/GeographicCRSServices.js.map +1 -1
  162. package/lib/esm/GeometrySummary.js +47 -47
  163. package/lib/esm/GeometrySummary.js.map +1 -1
  164. package/lib/esm/IModelDb.js +8 -8
  165. package/lib/esm/IModelDb.js.map +1 -1
  166. package/lib/esm/IModelDbFonts.js.map +1 -1
  167. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  168. package/lib/esm/IModelHost.js.map +1 -1
  169. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  170. package/lib/esm/IModelJsFs.js.map +1 -1
  171. package/lib/esm/ImageSourceConversion.js.map +1 -1
  172. package/lib/esm/IpcHost.js.map +1 -1
  173. package/lib/esm/LineStyle.js.map +1 -1
  174. package/lib/esm/LocalHub.js +1 -1
  175. package/lib/esm/LocalHub.js.map +1 -1
  176. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  177. package/lib/esm/LockControl.js.map +1 -1
  178. package/lib/esm/Material.js.map +1 -1
  179. package/lib/esm/Model.js.map +1 -1
  180. package/lib/esm/NativeAppStorage.js.map +1 -1
  181. package/lib/esm/NativeHost.js.map +1 -1
  182. package/lib/esm/NavigationRelationship.js.map +1 -1
  183. package/lib/esm/PromiseMemoizer.js.map +1 -1
  184. package/lib/esm/PropertyStore.js.map +1 -1
  185. package/lib/esm/Relationship.js.map +1 -1
  186. package/lib/esm/RpcBackend.js.map +1 -1
  187. package/lib/esm/SQLiteDb.js.map +1 -1
  188. package/lib/esm/Schema.js.map +1 -1
  189. package/lib/esm/SchemaSync.js.map +1 -1
  190. package/lib/esm/SchemaUtils.js.map +1 -1
  191. package/lib/esm/SheetIndex.js.map +1 -1
  192. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  193. package/lib/esm/SqliteStatement.js.map +1 -1
  194. package/lib/esm/StashManager.js.map +1 -1
  195. package/lib/esm/Texture.js.map +1 -1
  196. package/lib/esm/TileStorage.js.map +1 -1
  197. package/lib/esm/TxnManager.js.map +1 -1
  198. package/lib/esm/ViewDefinition.js.map +1 -1
  199. package/lib/esm/ViewStateHydrator.js.map +1 -1
  200. package/lib/esm/ViewStore.js.map +1 -1
  201. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  202. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  203. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  204. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  205. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  206. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  207. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  208. package/lib/esm/core-backend.js.map +1 -1
  209. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  210. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  211. package/lib/esm/domains/GenericElements.js.map +1 -1
  212. package/lib/esm/domains/GenericSchema.js.map +1 -1
  213. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  214. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  215. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  216. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  217. package/lib/esm/internal/HubMock.js.map +1 -1
  218. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  219. package/lib/esm/internal/NativePlatform.js.map +1 -1
  220. package/lib/esm/internal/NoLocks.js.map +1 -1
  221. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  222. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  223. package/lib/esm/internal/Symbols.js.map +1 -1
  224. package/lib/esm/internal/annotations/fields.js.map +1 -1
  225. package/lib/esm/internal/cross-package.js.map +1 -1
  226. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  227. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  228. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  229. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  230. package/lib/esm/rpc/multipart.js.map +1 -1
  231. package/lib/esm/rpc/tracing.js.map +1 -1
  232. package/lib/esm/rpc/web/logging.js.map +1 -1
  233. package/lib/esm/rpc/web/request.js.map +1 -1
  234. package/lib/esm/rpc/web/response.js.map +1 -1
  235. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  236. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  237. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  238. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  239. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  240. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  241. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  242. package/lib/esm/test/AttachDb.test.js +11 -11
  243. package/lib/esm/test/AttachDb.test.js.map +1 -1
  244. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  245. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  246. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  247. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  248. package/lib/esm/test/IModelHost.test.js.map +1 -1
  249. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  250. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  251. package/lib/esm/test/IpcHost.test.js.map +1 -1
  252. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  253. package/lib/esm/test/PrintElementTree.js.map +1 -1
  254. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  255. package/lib/esm/test/RevisionUtility.js.map +1 -1
  256. package/lib/esm/test/SchemaUtils.test.js +25 -25
  257. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  258. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  259. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  260. package/lib/esm/test/TestUtils.js.map +1 -1
  261. package/lib/esm/test/annotations/Fields.test.js +53 -53
  262. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  263. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  264. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  265. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  266. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  267. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  268. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  269. package/lib/esm/test/categories/Category.test.js.map +1 -1
  270. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  271. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  272. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  273. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  274. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  275. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  276. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  277. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  278. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  279. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  280. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  281. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  282. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  283. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  284. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  285. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  286. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  287. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  288. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  289. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  290. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  291. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  292. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  293. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  294. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  295. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  296. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  297. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  298. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  299. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  300. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  301. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  302. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  303. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  304. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  305. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  306. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  307. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  308. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  309. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  310. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  311. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  312. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  313. package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
  314. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  315. package/lib/esm/test/imageData.js.map +1 -1
  316. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  317. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  318. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  319. package/lib/esm/test/imodel/IModel.test.js +44 -44
  320. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  321. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  322. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  323. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  324. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  325. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  326. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  327. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  328. package/lib/esm/test/index.js.map +1 -1
  329. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  330. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  331. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  332. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  333. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  334. package/lib/esm/test/rpc/response.test.js.map +1 -1
  335. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  336. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  337. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  338. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  339. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  340. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  341. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  342. package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
  343. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  344. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  345. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  346. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  347. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  348. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  349. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  350. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  351. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  352. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  353. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  354. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  355. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  356. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  357. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  358. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  359. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  360. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  361. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  362. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  363. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  364. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  365. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  366. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  367. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  368. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  369. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  370. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  371. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  372. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  373. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  374. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  375. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  376. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  377. package/lib/esm/workspace/Settings.js.map +1 -1
  378. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  379. package/lib/esm/workspace/Workspace.js.map +1 -1
  380. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  381. package/package.json +14 -14
@@ -95,50 +95,50 @@ describe("Class Registry - getRootMetaData", () => {
95
95
  imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);
96
96
  assert.exists(imodel);
97
97
  await imodel.importSchemaStrings([
98
- `<?xml version="1.0" encoding="UTF-8"?>
99
- <ECSchema schemaName="TestSchema1" alias="ts1" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
100
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
101
- <ECSchemaReference name="CoreCustomAttributes" version="01.00.03" alias="CoreCA"/>
102
-
103
- <ECEntityClass typeName="TestBase">
104
- <BaseClass>bis:PhysicalElement</BaseClass>
105
- </ECEntityClass>
106
-
107
- <ECEntityClass typeName="TestDerived">
108
- <BaseClass>TestBase</BaseClass>
109
- </ECEntityClass>
110
-
111
- <ECEntityClass typeName="ITestMixinForAspectsBase">
112
- <ECCustomAttributes>
113
- <IsMixin xmlns="CoreCustomAttributes.01.00.03">
114
- <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>
115
- </IsMixin>
116
- </ECCustomAttributes>
117
- </ECEntityClass>
118
-
119
- <ECEntityClass typeName="ITestMixinForAspectsDerived">
120
- <BaseClass>ITestMixinForAspectsBase</BaseClass>
121
- <ECCustomAttributes>
122
- <IsMixin xmlns="CoreCustomAttributes.01.00.03">
123
- <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>
124
- </IsMixin>
125
- </ECCustomAttributes>
126
- </ECEntityClass>
127
-
128
- <ECEntityClass typeName="ITestMixinForElements" modifier="Abstract">
129
- <ECCustomAttributes>
130
- <IsMixin xmlns="CoreCustomAttributes.01.00.03">
131
- <AppliesToEntityClass>bis:Element</AppliesToEntityClass>
132
- </IsMixin>
133
- </ECCustomAttributes>
134
- </ECEntityClass>
135
-
136
- <ECEntityClass typeName="TestMixedInAndDerived">
137
- <BaseClass>TestBase</BaseClass>
138
- <BaseClass>ITestMixinForElements</BaseClass>
139
- </ECEntityClass>
140
-
141
- </ECSchema>
98
+ `<?xml version="1.0" encoding="UTF-8"?>
99
+ <ECSchema schemaName="TestSchema1" alias="ts1" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
100
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
101
+ <ECSchemaReference name="CoreCustomAttributes" version="01.00.03" alias="CoreCA"/>
102
+
103
+ <ECEntityClass typeName="TestBase">
104
+ <BaseClass>bis:PhysicalElement</BaseClass>
105
+ </ECEntityClass>
106
+
107
+ <ECEntityClass typeName="TestDerived">
108
+ <BaseClass>TestBase</BaseClass>
109
+ </ECEntityClass>
110
+
111
+ <ECEntityClass typeName="ITestMixinForAspectsBase">
112
+ <ECCustomAttributes>
113
+ <IsMixin xmlns="CoreCustomAttributes.01.00.03">
114
+ <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>
115
+ </IsMixin>
116
+ </ECCustomAttributes>
117
+ </ECEntityClass>
118
+
119
+ <ECEntityClass typeName="ITestMixinForAspectsDerived">
120
+ <BaseClass>ITestMixinForAspectsBase</BaseClass>
121
+ <ECCustomAttributes>
122
+ <IsMixin xmlns="CoreCustomAttributes.01.00.03">
123
+ <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>
124
+ </IsMixin>
125
+ </ECCustomAttributes>
126
+ </ECEntityClass>
127
+
128
+ <ECEntityClass typeName="ITestMixinForElements" modifier="Abstract">
129
+ <ECCustomAttributes>
130
+ <IsMixin xmlns="CoreCustomAttributes.01.00.03">
131
+ <AppliesToEntityClass>bis:Element</AppliesToEntityClass>
132
+ </IsMixin>
133
+ </ECCustomAttributes>
134
+ </ECEntityClass>
135
+
136
+ <ECEntityClass typeName="TestMixedInAndDerived">
137
+ <BaseClass>TestBase</BaseClass>
138
+ <BaseClass>ITestMixinForElements</BaseClass>
139
+ </ECEntityClass>
140
+
141
+ </ECSchema>
142
142
  `,
143
143
  ]); // will throw an exception if import fails
144
144
  });
@@ -255,35 +255,35 @@ describe("Class Registry - generated classes", () => {
255
255
  }
256
256
  it("Should provide correct schemas and full-names on generated classes", async () => {
257
257
  await imodel.importSchemaStrings([
258
- `<?xml version="1.0" encoding="UTF-8"?>
259
- <ECSchema schemaName="CustomA" alias="custA" version="1.0.0"
260
- xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
261
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
262
- <ECSchemaReference name="Functional" version="1.00" alias="func"/>
263
- <ECEntityClass typeName="NonGeneratedElement">
264
- <BaseClass>bis:DefinitionElement</BaseClass>
265
- </ECEntityClass>
266
- <ECEntityClass typeName="GeneratedElement">
267
- <BaseClass>NonGeneratedElement</BaseClass>
268
- </ECEntityClass>
269
- <ECEntityClass typeName="ElementC">
270
- <BaseClass>GeneratedElement</BaseClass>
271
- </ECEntityClass>
272
- </ECSchema>
258
+ `<?xml version="1.0" encoding="UTF-8"?>
259
+ <ECSchema schemaName="CustomA" alias="custA" version="1.0.0"
260
+ xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
261
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
262
+ <ECSchemaReference name="Functional" version="1.00" alias="func"/>
263
+ <ECEntityClass typeName="NonGeneratedElement">
264
+ <BaseClass>bis:DefinitionElement</BaseClass>
265
+ </ECEntityClass>
266
+ <ECEntityClass typeName="GeneratedElement">
267
+ <BaseClass>NonGeneratedElement</BaseClass>
268
+ </ECEntityClass>
269
+ <ECEntityClass typeName="ElementC">
270
+ <BaseClass>GeneratedElement</BaseClass>
271
+ </ECEntityClass>
272
+ </ECSchema>
273
273
  `,
274
- `<?xml version="1.0" encoding="UTF-8"?>
275
- <ECSchema schemaName="CustomB" alias="custB" version="1.0.0"
276
- xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
277
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
278
- <ECSchemaReference name="Functional" version="1.00" alias="func"/>
279
- <ECSchemaReference name="CustomA" version="01.00" alias="custA"/>
280
- <ECEntityClass typeName="DummyElement">
281
- <BaseClass>bis:DefinitionElement</BaseClass>
282
- </ECEntityClass>
283
- <ECEntityClass typeName="ErrorElement">
284
- <BaseClass>custA:ElementC</BaseClass>
285
- </ECEntityClass>
286
- </ECSchema>
274
+ `<?xml version="1.0" encoding="UTF-8"?>
275
+ <ECSchema schemaName="CustomB" alias="custB" version="1.0.0"
276
+ xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
277
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
278
+ <ECSchemaReference name="Functional" version="1.00" alias="func"/>
279
+ <ECSchemaReference name="CustomA" version="01.00" alias="custA"/>
280
+ <ECEntityClass typeName="DummyElement">
281
+ <BaseClass>bis:DefinitionElement</BaseClass>
282
+ </ECEntityClass>
283
+ <ECEntityClass typeName="ErrorElement">
284
+ <BaseClass>custA:ElementC</BaseClass>
285
+ </ECEntityClass>
286
+ </ECSchema>
287
287
  `,
288
288
  ]);
289
289
  class CustomASchema extends Schema {
@@ -737,36 +737,36 @@ describe("Global state of ClassRegistry", () => {
737
737
  });
738
738
  it("registering a class in different imodels should not affect each other", async () => {
739
739
  await imodel1.importSchemaStrings([
740
- `<?xml version="1.0" encoding="UTF-8"?>
741
- <ECSchema schemaName="TestSchema" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
742
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
743
-
744
- <ECEntityClass typeName="TestClass">
745
- <BaseClass>bis:PhysicalElement</BaseClass>
746
- <ECProperty propertyName="foo" typeName="string"/>
747
- <ECNavigationProperty propertyName="RelatedTestClass" relationshipName="MyRelationship" direction="backward"/>
748
- </ECEntityClass>
749
-
750
- <ECRelationshipClass typeName="MyRelationship" modifier="None" strength="embedding">
751
- <Source multiplicity="(0..1)" roleLabel="has" polymorphic="false">
752
- <Class class="TestClass"/>
753
- </Source>
754
- <Target multiplicity="(0..*)" roleLabel="has" polymorphic="false">
755
- <Class class="TestClass"/>
756
- </Target>
757
- </ECRelationshipClass>
758
- </ECSchema>
740
+ `<?xml version="1.0" encoding="UTF-8"?>
741
+ <ECSchema schemaName="TestSchema" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
742
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
743
+
744
+ <ECEntityClass typeName="TestClass">
745
+ <BaseClass>bis:PhysicalElement</BaseClass>
746
+ <ECProperty propertyName="foo" typeName="string"/>
747
+ <ECNavigationProperty propertyName="RelatedTestClass" relationshipName="MyRelationship" direction="backward"/>
748
+ </ECEntityClass>
749
+
750
+ <ECRelationshipClass typeName="MyRelationship" modifier="None" strength="embedding">
751
+ <Source multiplicity="(0..1)" roleLabel="has" polymorphic="false">
752
+ <Class class="TestClass"/>
753
+ </Source>
754
+ <Target multiplicity="(0..*)" roleLabel="has" polymorphic="false">
755
+ <Class class="TestClass"/>
756
+ </Target>
757
+ </ECRelationshipClass>
758
+ </ECSchema>
759
759
  `,
760
760
  ]);
761
761
  await imodel2.importSchemaStrings([
762
- `<?xml version="1.0" encoding="UTF-8"?>
763
- <ECSchema schemaName="TestSchema" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
764
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
765
- <ECEntityClass typeName="TestClass">
766
- <BaseClass>bis:PhysicalElement</BaseClass>
767
- <ECProperty propertyName="bar" typeName="string"/>
768
- </ECEntityClass>
769
- </ECSchema>
762
+ `<?xml version="1.0" encoding="UTF-8"?>
763
+ <ECSchema schemaName="TestSchema" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
764
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
765
+ <ECEntityClass typeName="TestClass">
766
+ <BaseClass>bis:PhysicalElement</BaseClass>
767
+ <ECProperty propertyName="bar" typeName="string"/>
768
+ </ECEntityClass>
769
+ </ECSchema>
770
770
  `,
771
771
  ]);
772
772
  const testClass1 = imodel1.getJsClass("TestSchema:TestClass");
@@ -1 +1 @@
1
- {"version":3,"file":"ClassRegistry.test.js","sourceRoot":"","sources":["../../../../src/test/schema/ClassRegistry.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 * as sinon from \"sinon\";\r\nimport * as path from \"path\";\r\nimport {\r\n BisCodeSpec, Code, ConcreteEntityTypes, DefinitionElementProps, ECJsNames, ElementAspectProps, ElementProps, EntityReferenceSet, ModelProps,\r\n PropertyMetaData,\r\n RelatedElement, RelatedElementProps, RelationshipProps, SchemaState,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n DefinitionElement, DefinitionModel, ElementRefersToElements, Entity, EntityReferences, IModelDb, IModelJsFs, Model, RepositoryLink,\r\n Schema, SnapshotDb, SpatialViewDefinition, StandaloneDb, UrlLink, ViewDefinition3d,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { Element } from \"../../Element\";\r\nimport { Schemas } from \"../../Schema\";\r\nimport { ClassRegistry } from \"../../ClassRegistry\";\r\nimport { OpenMode } from \"@itwin/core-bentley\";\r\nimport { EntityClass, NavigationProperty, PrimitiveProperty, SchemaItemKey, SchemaKey } from \"@itwin/ecschema-metadata\";\r\n\r\ndescribe(\"Class Registry\", () => {\r\n let imodel: SnapshotDb;\r\n\r\n before(() => {\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"ClassRegistryTest.bim\");\r\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\r\n assert.exists(imodel);\r\n });\r\n\r\n after(() => {\r\n imodel?.close();\r\n });\r\n\r\n it(\"should verify the Entity metadata of known element subclasses\", async () => {\r\n const code1 = new Code({ spec: \"0x10\", scope: \"0x11\", value: \"RF1.dgn\" });\r\n const el = imodel.elements.getElement(code1);\r\n assert.exists(el);\r\n if (el) {\r\n const metaData = await el.getMetaData();\r\n assert.exists(metaData);\r\n\r\n assert.equal(metaData.fullName, el.classFullName.replace(\":\", \".\"));\r\n // I happen to know that this is a BisCore:RepositoryLink\r\n assert.equal(metaData.fullName, RepositoryLink.classFullName.replace(\":\", \".\"));\r\n // Check the metadata on the class itself\r\n assert.isDefined(metaData.baseClass);\r\n assert.equal(metaData.baseClass?.fullName, UrlLink.classFullName.replace(\":\", \".\"));\r\n assert.isTrue(metaData.customAttributes?.has(\"BisCore.ClassHasHandler\"));\r\n // Check the metadata on the one property that RepositoryLink defines, RepositoryGuid\r\n const repositoryGuidProperty = await metaData.getProperty(\"repositoryGuid\") as PrimitiveProperty;\r\n assert.isDefined(repositoryGuidProperty);\r\n assert.equal(repositoryGuidProperty.extendedTypeName, \"BeGuid\");\r\n assert.isTrue(repositoryGuidProperty.customAttributes?.has(\"CoreCustomAttributes.HiddenProperty\"));\r\n }\r\n const el2 = imodel.elements.getElement(\"0x34\");\r\n assert.exists(el2);\r\n if (el2) {\r\n const metaData = await el2.getMetaData();\r\n assert.exists(metaData);\r\n\r\n assert.equal(metaData.fullName, el2.classFullName.replace(\":\", \".\"));\r\n // I happen to know that this is a BisCore.SpatialViewDefinition\r\n assert.equal(metaData.fullName, SpatialViewDefinition.classFullName.replace(\":\", \".\"));\r\n assert.isDefined(metaData.baseClass);\r\n assert.equal(metaData.baseClass?.fullName, ViewDefinition3d.classFullName.replace(\":\", \".\"));\r\n const modelSelectorProperty = await metaData.getProperty(\"modelSelector\") as NavigationProperty;\r\n assert.isDefined(modelSelectorProperty);\r\n assert.equal(modelSelectorProperty.relationshipClass.fullName, \"BisCore.SpatialViewDefinitionUsesModelSelector\");\r\n }\r\n });\r\n\r\n it(\"should verify Entity metadata with both base class and mixin properties\", async () => {\r\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestDomain.ecschema.xml\");\r\n await imodel.importSchemas([schemaPathname]); // will throw an exception if import fails\r\n\r\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"TestDomain\", \"TestDomainClass\", EntityClass);\r\n assert.isDefined(testDomainClass);\r\n\r\n assert.isDefined(testDomainClass?.baseClass);\r\n assert.equal(testDomainClass?.baseClass?.fullName, DefinitionElement.classFullName.replace(\":\", \".\"));\r\n\r\n assert.isDefined(testDomainClass?.mixins);\r\n assert.equal(testDomainClass?.mixins.length, 1);\r\n assert.equal(testDomainClass?.mixins[0].fullName, \"TestDomain.IMixin\");\r\n\r\n // Verify that the forEach method which is called when constructing an entity\r\n // is picking up all expected properties.\r\n const testData: string[] = [];\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n IModelDb.forEachMetaData(imodel, \"TestDomain:TestDomainClass\", true, (propName: string, _property: PropertyMetaData) => {\r\n testData.push(ECJsNames.toJsName(propName));\r\n }, false);\r\n\r\n const expectedString = testData.find((testString: string) => {\r\n return testString === \"testMixinProperty\";\r\n });\r\n\r\n assert.isDefined(expectedString);\r\n });\r\n});\r\n\r\ndescribe(\"Class Registry - getRootMetaData\", () => {\r\n let imodel: StandaloneDb;\r\n\r\n before(async () => {\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GetRootMetaData.bim\");\r\n IModelJsFs.copySync(seedFileName, testFileName);\r\n\r\n const schemaState: SchemaState = StandaloneDb.validateSchemas(testFileName, true);\r\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\r\n StandaloneDb.upgradeStandaloneSchemas(testFileName);\r\n\r\n imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\r\n assert.exists(imodel);\r\n await imodel.importSchemaStrings([\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.03\" alias=\"CoreCA\"/>\r\n\r\n <ECEntityClass typeName=\"TestBase\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"TestDerived\">\r\n <BaseClass>TestBase</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"ITestMixinForAspectsBase\">\r\n <ECCustomAttributes>\r\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\r\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\r\n </IsMixin>\r\n </ECCustomAttributes>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"ITestMixinForAspectsDerived\">\r\n <BaseClass>ITestMixinForAspectsBase</BaseClass>\r\n <ECCustomAttributes>\r\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\r\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\r\n </IsMixin>\r\n </ECCustomAttributes>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"ITestMixinForElements\" modifier=\"Abstract\">\r\n <ECCustomAttributes>\r\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\r\n <AppliesToEntityClass>bis:Element</AppliesToEntityClass>\r\n </IsMixin>\r\n </ECCustomAttributes>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"TestMixedInAndDerived\">\r\n <BaseClass>TestBase</BaseClass>\r\n <BaseClass>ITestMixinForElements</BaseClass>\r\n </ECEntityClass>\r\n\r\n </ECSchema>\r\n `,\r\n ]); // will throw an exception if import fails\r\n });\r\n\r\n after(() => {\r\n imodel?.close();\r\n });\r\n\r\n it(\"should get the root metadata\", async () => {\r\n for (const [testClass, expectedRoot] of [\r\n [\"TestSchema1.TestBase\", \"BisCore:Element\"],\r\n [\"TestSchema1.TestDerived\", \"BisCore:Element\"],\r\n [\"TestSchema1.ITestMixinForAspectsBase\", \"BisCore:ElementAspect\"],\r\n [\"TestSchema1.ITestMixinForAspectsDerived\", \"BisCore:ElementAspect\"],\r\n [\"TestSchema1.ITestMixinForElements\", \"BisCore:Element\"],\r\n [\"TestSchema1.TestMixedInAndDerived\", \"BisCore:Element\"],\r\n ] as const) {\r\n const rootMetaData = ClassRegistry.getRootEntity(imodel, testClass);\r\n expect(rootMetaData.replace(\".\", \":\")).to.equal(expectedRoot);\r\n }\r\n });\r\n});\r\n\r\ndescribe(\"Class Registry - generated classes\", () => {\r\n let imodel: SnapshotDb;\r\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"TestGeneratedClasses.ecschema.xml\");\r\n\r\n before(async () => {\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GeneratedClasses.bim\");\r\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\r\n assert.exists(imodel);\r\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\r\n });\r\n\r\n after(() => {\r\n imodel?.close();\r\n });\r\n\r\n interface TestModelWithNavPropProps extends ModelProps {\r\n elemNavProp: RelatedElementProps;\r\n aspectNavProp: RelatedElementProps;\r\n relNavProp: RelatedElementProps;\r\n }\r\n\r\n interface TestEntityProps extends DefinitionElementProps {\r\n prop: string;\r\n }\r\n\r\n interface LinkTableRelWithNavPropProps extends RelationshipProps {\r\n elemNavProp: RelatedElementProps;\r\n modelNavProp: RelatedElementProps;\r\n aspectNavProp: RelatedElementProps;\r\n }\r\n\r\n interface TestElementWithNavPropProps extends DefinitionElementProps {\r\n navProp: RelatedElementProps;\r\n }\r\n\r\n interface DerivedWithNavPropProps extends TestElementWithNavPropProps {\r\n derivedNavProp: RelatedElementProps;\r\n }\r\n\r\n interface TestAspectWithNavProp extends ElementAspectProps {\r\n navProp: RelatedElement;\r\n }\r\n\r\n class TestGeneratedClasses extends Schema {\r\n public static override get schemaName(): string { return \"TestGeneratedClasses\"; }\r\n public static get classes() {\r\n return [TestModelWithNavProp, TestElementWithNavProp, LinkTableRelWithNavProp, DerivedWithNavProp, Derived2, Derived3, Derived4, Derived5, Derived6];\r\n }\r\n public static registerSchema() {\r\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\r\n Schemas.unregisterSchema(this.schemaName);\r\n Schemas.registerSchema(this);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n for (const class_ of this.classes) {\r\n ClassRegistry.register(class_, this);\r\n }\r\n }\r\n }\r\n\r\n public static unregisterSchema() {\r\n Schemas.unregisterSchema(this.schemaName);\r\n }\r\n }\r\n\r\n class TestElementWithNavProp extends DefinitionElement {\r\n public static override get className() { return \"TestElementWithNavProp\"; }\r\n public static override schema = TestGeneratedClasses;\r\n public navProp: RelatedElement;\r\n public constructor(props: TestElementWithNavPropProps, inIModel: IModelDb) {\r\n super(props, inIModel);\r\n this.navProp = new RelatedElement(props.navProp);\r\n }\r\n }\r\n\r\n class TestModelWithNavProp extends DefinitionModel {\r\n public static override get className() { return \"TestModelWithNavProp\"; }\r\n public static override schema = TestGeneratedClasses;\r\n public elemNavProp: RelatedElement;\r\n public aspectNavProp: RelatedElement;\r\n public relNavProp: RelatedElement;\r\n public constructor(props: TestModelWithNavPropProps, inIModel: IModelDb) {\r\n super(props, inIModel);\r\n this.elemNavProp = new RelatedElement(props.elemNavProp);\r\n this.aspectNavProp = new RelatedElement(props.aspectNavProp);\r\n this.relNavProp = new RelatedElement(props.relNavProp);\r\n }\r\n }\r\n\r\n class LinkTableRelWithNavProp extends ElementRefersToElements {\r\n public static override get className() { return \"LinkTableRelWithNavProp\"; }\r\n public static override schema = TestGeneratedClasses;\r\n public elemNavProp: RelatedElement;\r\n public aspectNavProp: RelatedElement;\r\n public modelNavProp: RelatedElement;\r\n public constructor(props: LinkTableRelWithNavPropProps, inIModel: IModelDb) {\r\n super(props, inIModel);\r\n this.elemNavProp = new RelatedElement(props.elemNavProp);\r\n this.aspectNavProp = new RelatedElement(props.aspectNavProp);\r\n this.modelNavProp = new RelatedElement(props.modelNavProp);\r\n }\r\n }\r\n\r\n class DerivedWithNavProp extends TestElementWithNavProp {\r\n public static override get className() { return \"DerivedWithNavProp\"; }\r\n public static override schema = TestGeneratedClasses;\r\n public derivedNavProp: RelatedElement;\r\n public constructor(props: DerivedWithNavPropProps, inIModel: IModelDb) {\r\n super(props, inIModel);\r\n this.derivedNavProp = new RelatedElement(props.derivedNavProp);\r\n }\r\n }\r\n\r\n class Derived2 extends DerivedWithNavProp {\r\n public static override get className() { return \"Derived2\"; }\r\n }\r\n class Derived3 extends Derived2 {\r\n public static override get className() { return \"Derived3\"; }\r\n }\r\n class Derived4 extends Derived3 {\r\n public static override get className() { return \"Derived4\"; }\r\n }\r\n class Derived5 extends Derived4 {\r\n public static override get className() { return \"Derived5\"; }\r\n }\r\n class Derived6 extends Derived5 {\r\n public static override get className() { return \"Derived6\"; }\r\n }\r\n\r\n class NonGeneratedElement extends DefinitionElement {\r\n public static override get className() { return \"NonGeneratedElement\"; }\r\n }\r\n\r\n it(\"Should provide correct schemas and full-names on generated classes\", async () => {\r\n await imodel.importSchemaStrings([\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"CustomA\" alias=\"custA\" version=\"1.0.0\"\r\n xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"Functional\" version=\"1.00\" alias=\"func\"/>\r\n <ECEntityClass typeName=\"NonGeneratedElement\">\r\n <BaseClass>bis:DefinitionElement</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"GeneratedElement\">\r\n <BaseClass>NonGeneratedElement</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"ElementC\">\r\n <BaseClass>GeneratedElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>\r\n `,\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"CustomB\" alias=\"custB\" version=\"1.0.0\"\r\n xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"Functional\" version=\"1.00\" alias=\"func\"/>\r\n <ECSchemaReference name=\"CustomA\" version=\"01.00\" alias=\"custA\"/>\r\n <ECEntityClass typeName=\"DummyElement\">\r\n <BaseClass>bis:DefinitionElement</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"ErrorElement\">\r\n <BaseClass>custA:ElementC</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>\r\n `,\r\n ]);\r\n\r\n class CustomASchema extends Schema {\r\n public static override get schemaName(): string { return \"CustomA\"; }\r\n public static get classes(): typeof Entity[] {\r\n return [NonGeneratedElement];\r\n }\r\n public static registerSchema() {\r\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\r\n Schemas.unregisterSchema(this.schemaName);\r\n Schemas.registerSchema(this);\r\n for (const ecClass of this.classes) {\r\n ClassRegistry.register(ecClass, this);\r\n }\r\n }\r\n }\r\n\r\n public static unregisterSchema() {\r\n Schemas.unregisterSchema(this.schemaName);\r\n }\r\n }\r\n\r\n CustomASchema.registerSchema();\r\n\r\n class DummyElement extends DefinitionElement {\r\n public static override get className() { return \"DummyElement\"; }\r\n }\r\n\r\n class CustomBSchema extends Schema {\r\n public static override get schemaName(): string { return \"CustomB\"; }\r\n public static get classes() {\r\n return [DummyElement];\r\n }\r\n public static registerSchema() {\r\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\r\n Schemas.unregisterSchema(this.schemaName);\r\n Schemas.registerSchema(this);\r\n for (const ecClass of this.classes) {\r\n ClassRegistry.register(ecClass, this);\r\n }\r\n }\r\n }\r\n\r\n public static unregisterSchema() {\r\n Schemas.unregisterSchema(this.schemaName);\r\n }\r\n }\r\n\r\n CustomBSchema.registerSchema();\r\n\r\n const nonGeneratedElement = imodel.getJsClass(\"CustomA:NonGeneratedElement\");\r\n assert.equal(nonGeneratedElement.classFullName, \"CustomA:NonGeneratedElement\");\r\n const generatedElement = imodel.getJsClass(\"CustomA:GeneratedElement\");\r\n assert.equal(generatedElement.classFullName, \"CustomA:GeneratedElement\");\r\n const elementC = imodel.getJsClass(\"CustomA:ElementC\");\r\n assert.equal(elementC.classFullName, \"CustomA:ElementC\");\r\n const dummyElement = imodel.getJsClass(\"CustomB:DummyElement\");\r\n assert.equal(dummyElement.classFullName, \"CustomB:DummyElement\");\r\n\r\n //This is the class that had the wrong schema\r\n const errorElement = imodel.getJsClass(\"CustomB:ErrorElement\");\r\n assert.equal(errorElement.classFullName, \"CustomB:ErrorElement\");\r\n assert.isTrue(errorElement.schemaItemKey.matches(new SchemaItemKey(\"ErrorElement\", new SchemaKey(\"CustomB\", 1, 0, 0))));\r\n assert.equal(errorElement.className, \"ErrorElement\");\r\n assert.equal(errorElement.schema.schemaName, \"CustomB\");\r\n\r\n // Create an instance of ErrorElement\r\n const errorElementInstance = Entity.instantiate(errorElement, { classFullName: errorElement.classFullName }, imodel);\r\n assert.exists(errorElementInstance);\r\n assert.instanceOf(errorElementInstance, errorElement);\r\n assert.instanceOf(errorElementInstance, Entity);\r\n assert.equal(errorElementInstance.className, \"ErrorElement\");\r\n assert.equal(errorElementInstance.schemaName, \"CustomB\");\r\n const metadata = await errorElementInstance.getMetaData();\r\n assert.exists(metadata);\r\n assert.equal(metadata.fullName, \"CustomB.ErrorElement\");\r\n });\r\n\r\n // if a single inherited class is not generated, the entire hierarchy is considered not-generated\r\n it(\"should only generate automatic collectReferenceIds implementations for generated classes\", async () => {\r\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\r\n\r\n class GeneratedTestElementWithNavProp extends imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\") {\r\n constructor(props: TestElementWithNavPropProps) {\r\n super(props, imodel);\r\n }\r\n }\r\n\r\n const testEntityId = imodel.elements.insertElement({\r\n classFullName: \"TestGeneratedClasses:TestEntity\",\r\n prop: \"sample-value\",\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n } as TestEntityProps);\r\n\r\n const elemWithNavProp = new GeneratedTestElementWithNavProp({\r\n classFullName: \"TestGeneratedClasses:TestElementWithNavProp\",\r\n navProp: {\r\n id: testEntityId,\r\n relClassName: \"TestGeneratedClasses:ElemRel\",\r\n },\r\n } as TestElementWithNavPropProps);\r\n\r\n // eslint-disable-next-line @typescript-eslint/dot-notation\r\n assert.isDefined(GeneratedTestElementWithNavProp.prototype[\"collectReferenceIds\"]);\r\n expect(\r\n [...elemWithNavProp.getReferenceIds()],\r\n ).to.have.members([\r\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\r\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\r\n EntityReferences.fromEntityType(testEntityId, ConcreteEntityTypes.Element),\r\n ]);\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const GeneratedTestAspectWithNavProp = imodel.getJsClass(\"TestGeneratedClasses:TestAspectWithNavProp\");\r\n assert.isTrue(GeneratedTestAspectWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\"));\r\n });\r\n\r\n it(\"should not override collectReferenceIds for BisCore schema classes\", async () => {\r\n // AnnotationFrameStyle is an example of an unregistered bis class without an implementation of collectReferenceIds\r\n assert.isTrue(imodel.getJsClass(\"BisCore:AnnotationFrameStyle\").prototype.hasOwnProperty(\"collectReferenceIds\"));\r\n });\r\n\r\n it(\"should get references from its bis superclass\", async () => {\r\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\r\n\r\n class GeneratedTestElementWithNavProp extends imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\") {\r\n constructor(props: ElementProps) {\r\n super(props, imodel);\r\n }\r\n }\r\n\r\n const testEntityId = imodel.elements.insertElement({\r\n classFullName: \"TestGeneratedClasses:TestEntity\",\r\n prop: \"sample-value\",\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n } as TestEntityProps);\r\n\r\n const elemWithNavProp = new GeneratedTestElementWithNavProp({\r\n classFullName: \"TestGeneratedClasses:TestElementWithNavProp\",\r\n navProp: new RelatedElement({\r\n id: testEntityId,\r\n relClassName: \"TestGeneratedClasses:ElemRel\",\r\n }),\r\n model: IModelDb.dictionaryId,\r\n code: new Code({\r\n scope: IModelDb.rootSubjectId,\r\n spec: imodel.codeSpecs.getByName(BisCodeSpec.spatialCategory).id,\r\n value: \"\",\r\n }),\r\n parent: new RelatedElement({\r\n // since we don't actually insert this element in this test, using an arbitrary id string\r\n id: \"0x0000ffff\",\r\n relClassName: \"BisCore:ElementOwnsChildElements\",\r\n }),\r\n } as TestElementWithNavPropProps);\r\n\r\n // super class here is Element so we should get the code.scope, model and parent as references\r\n expect(\r\n [...elemWithNavProp.getReferenceIds()],\r\n ).to.have.members([\r\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\r\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\r\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\r\n EntityReferences.fromEntityType(testEntityId, ConcreteEntityTypes.Element),\r\n ].filter((x) => x !== undefined));\r\n\r\n const modelTestEntityIds = new Array(2).fill(undefined).map((_, index) => imodel.elements.insertElement({\r\n classFullName: \"TestGeneratedClasses:TestEntity\",\r\n prop: `model-value-${index}`,\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n } as TestEntityProps));\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const GeneratedTestAspectWithNavProp = imodel.getJsClass(\"TestGeneratedClasses:TestAspectWithNavProp\");\r\n\r\n const aspectWithNavPropId = imodel.elements.insertAspect({\r\n classFullName: GeneratedTestAspectWithNavProp.classFullName,\r\n navProp: { id: modelTestEntityIds[0], relClassName: \"TestGeneratedClasses:NonElemRel\" },\r\n element: { id: modelTestEntityIds[1] },\r\n } as TestAspectWithNavProp);\r\n\r\n class GeneratedTestModelWithNavProp extends imodel.getJsClass<typeof Model>(\"TestGeneratedClasses:TestModelWithNavProp\") {\r\n constructor(props: TestModelWithNavPropProps) {\r\n super(props, imodel);\r\n }\r\n }\r\n\r\n const modelWithNavProp = new GeneratedTestModelWithNavProp({\r\n classFullName: GeneratedTestModelWithNavProp.classFullName,\r\n modeledElement: { id: modelTestEntityIds[0] },\r\n parentModel: IModelDb.dictionaryId,\r\n elemNavProp: { id: modelTestEntityIds[1], relClassName: \"TestGeneratedClasses:ModelToElemNavRel\" },\r\n aspectNavProp: { id: aspectWithNavPropId, relClassName: \"TestGeneratedClasses:ModelToAspectNavRel\" },\r\n // removed due to a bug\r\n // relNavProp: { id: relWithNavPropId, relClassName: \"TestGeneratedClasses:ModelToRelNavRel\" },\r\n } as TestModelWithNavPropProps);\r\n\r\n const modelWithNavPropId = modelWithNavProp.insert();\r\n\r\n expect(\r\n [...modelWithNavProp.getReferenceIds()],\r\n ).to.have.members([\r\n EntityReferences.fromEntityType(modelTestEntityIds[1], ConcreteEntityTypes.Element),\r\n EntityReferences.fromEntityType(IModelDb.dictionaryId, ConcreteEntityTypes.Model),\r\n EntityReferences.fromEntityType(modelTestEntityIds[0], ConcreteEntityTypes.Element),\r\n EntityReferences.fromEntityType(aspectWithNavPropId, ConcreteEntityTypes.ElementAspect),\r\n // ignoring this one, because there seems to be a bug when specifying a relationship instance as a nav prop\r\n // EntityReferences.fromEntityType(relWithNavPropId, ConcreteEntityTypes.Relationship),\r\n ].filter((x) => x !== undefined));\r\n\r\n const relTestEntityIds = new Array(3).fill(undefined).map((_, index) => imodel.elements.insertElement({\r\n classFullName: \"TestGeneratedClasses:TestEntity\",\r\n prop: `rel-value-${index}`,\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n } as TestEntityProps));\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const GeneratedLinkTableRelWithNavProp = imodel.getJsClass<typeof LinkTableRelWithNavProp>(\"TestGeneratedClasses:LinkTableRelWithNavProp\");\r\n\r\n const relWithNavProp = new GeneratedLinkTableRelWithNavProp({\r\n classFullName: GeneratedLinkTableRelWithNavProp.classFullName,\r\n sourceId: relTestEntityIds[0],\r\n targetId: relTestEntityIds[1],\r\n elemNavProp: {\r\n id: relTestEntityIds[2],\r\n relClassName: \"TestGeneratedClasses:LinkTableRelToElemNavRel\",\r\n },\r\n modelNavProp: {\r\n id: modelWithNavPropId,\r\n relClassName: \"TestGeneratedClasses:LinkTableRelToModelNavRel\",\r\n },\r\n aspectNavProp: {\r\n id: aspectWithNavPropId,\r\n relClassName: \"TestGeneratedClasses:LinkTableRelToAspectNavRel\",\r\n },\r\n }, imodel);\r\n\r\n const _relWithNavPropId = relWithNavProp.insert();\r\n\r\n expect(\r\n [...relWithNavProp.getReferenceIds()],\r\n ).to.have.members([\r\n ...relTestEntityIds.map((id) => EntityReferences.fromEntityType(id, ConcreteEntityTypes.Element)),\r\n EntityReferences.fromEntityType(modelWithNavPropId, ConcreteEntityTypes.Model),\r\n EntityReferences.fromEntityType(aspectWithNavPropId, ConcreteEntityTypes.ElementAspect),\r\n ]);\r\n });\r\n\r\n it(\"should not override custom registered schema class implementations of collectReferenceIds\", async () => {\r\n const testImplReferenceId = \"TEST-INVALID-ID\";\r\n class MyTestElementWithNavProp extends TestElementWithNavProp {\r\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(testImplReferenceId);\r\n }\r\n }\r\n class MyTestGeneratedClasses extends TestGeneratedClasses {\r\n public static override get classes() {\r\n return [MyTestElementWithNavProp, Derived2, Derived3, Derived4, Derived5, Derived6];\r\n }\r\n }\r\n imodel.jsClassMap.clear();\r\n MyTestGeneratedClasses.registerSchema();\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const ActualTestElementWithNavProp = imodel.getJsClass<typeof MyTestElementWithNavProp>(TestElementWithNavProp.classFullName);\r\n\r\n const testElementWithNavPropCollectReferencesSpy = sinon.spy(ActualTestElementWithNavProp.prototype, \"collectReferenceIds\");\r\n\r\n class ActualDerivedWithNavProp extends imodel.getJsClass<typeof Element>(DerivedWithNavProp.classFullName) {\r\n constructor(props: DerivedWithNavPropProps) {\r\n super(props, imodel);\r\n }\r\n }\r\n\r\n const testEntity1Id = imodel.elements.insertElement({\r\n classFullName: \"TestGeneratedClasses:TestEntity\",\r\n prop: \"sample-value-1\",\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n } as TestEntityProps);\r\n\r\n const testEntity2Id = imodel.elements.insertElement({\r\n classFullName: \"TestGeneratedClasses:TestEntity\",\r\n prop: \"sample-value-2\",\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n } as TestEntityProps);\r\n\r\n const elemWithNavProp = new ActualTestElementWithNavProp({\r\n classFullName: TestElementWithNavProp.classFullName,\r\n navProp: {\r\n id: testEntity1Id,\r\n relClassName: \"TestGeneratedClasses:ElemRel\",\r\n },\r\n } as TestElementWithNavPropProps, imodel);\r\n\r\n // eslint-disable-next-line @typescript-eslint/unbound-method\r\n assert.isDefined(ActualTestElementWithNavProp.prototype.collectReferenceIds);\r\n expect(\r\n [...elemWithNavProp.getReferenceIds()],\r\n ).to.have.members([\r\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\r\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\r\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\r\n EntityReferences.fromEntityType(testImplReferenceId, ConcreteEntityTypes.Element),\r\n ].filter((x) => x !== undefined));\r\n\r\n expect(testElementWithNavPropCollectReferencesSpy.called).to.be.true;\r\n testElementWithNavPropCollectReferencesSpy.resetHistory();\r\n\r\n const derivedElemWithNavProp = new ActualDerivedWithNavProp({\r\n classFullName: DerivedWithNavProp.classFullName,\r\n navProp: {\r\n id: testEntity1Id,\r\n relClassName: \"TestGeneratedClasses:ElemRel\",\r\n },\r\n derivedNavProp: {\r\n id: testEntity2Id,\r\n relClassName: \"TestGeneratedClasses:DerivedElemRel\",\r\n },\r\n } as DerivedWithNavPropProps);\r\n\r\n // eslint-disable-next-line @typescript-eslint/dot-notation\r\n assert.isDefined(ActualDerivedWithNavProp.prototype[\"collectReferenceIds\"]);\r\n // This demonstrates that if a non-generated class has a registered non-biscore base, it will not get a generated impl,\r\n expect(\r\n [...derivedElemWithNavProp.getReferenceIds()],\r\n ).to.have.members([\r\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\r\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\r\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\r\n EntityReferences.fromEntityType(testImplReferenceId, ConcreteEntityTypes.Element),\r\n ].filter((x) => x !== undefined));\r\n // explicitly check we called the super function\r\n // (we already know its implementation was called, because testImplReferenceId is in the derived call's result)\r\n expect(testElementWithNavPropCollectReferencesSpy.called).to.be.true;\r\n\r\n sinon.restore();\r\n MyTestGeneratedClasses.unregisterSchema();\r\n });\r\n\r\n it(\"should work along a complex chain of overrides\", async () => {\r\n class MyDerived2 extends Derived2 {\r\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(\"derived-2\");\r\n }\r\n }\r\n class MyDerived4 extends Derived4 {\r\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\r\n super.collectReferenceIds(referenceIds);\r\n referenceIds.addElement(\"derived-4\");\r\n }\r\n }\r\n class MyTestGeneratedClasses extends TestGeneratedClasses {\r\n public static override get classes() {\r\n // leaving Derived3,5,6 generated\r\n return [MyDerived2, MyDerived4];\r\n }\r\n }\r\n imodel.jsClassMap.clear();\r\n MyTestGeneratedClasses.registerSchema();\r\n\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n const ActualTestElementWithNavProp = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\");\r\n const ActualDerivedWithNavProp = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:DerivedWithNavProp\");\r\n const ActualDerived2 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived2\");\r\n const ActualDerived3 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived3\");\r\n const ActualDerived4 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived4\");\r\n const ActualDerived5 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived5\");\r\n const ActualDerived6 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived6\");\r\n\r\n expect(ActualTestElementWithNavProp.isGeneratedClass).to.be.true;\r\n expect(ActualDerivedWithNavProp.isGeneratedClass).to.be.true;\r\n expect(ActualDerived2.isGeneratedClass).to.be.false;\r\n expect(ActualDerived3.isGeneratedClass).to.be.true;\r\n expect(ActualDerived4.isGeneratedClass).to.be.false;\r\n expect(ActualDerived5.isGeneratedClass).to.be.true;\r\n expect(ActualDerived6.isGeneratedClass).to.be.true;\r\n\r\n assert.isTrue(ActualTestElementWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\")); // should have automatic impl\r\n assert.isTrue(ActualDerivedWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\"));\r\n assert.isTrue(ActualDerived2.prototype.hasOwnProperty(\"collectReferenceIds\")); // non-generated; manually implements so has method\r\n assert.isFalse(ActualDerived3.prototype.hasOwnProperty(\"collectReferenceIds\")); // base is non-generated so it shouldn't get the automatic impl\r\n assert.isTrue(ActualDerived4.prototype.hasOwnProperty(\"collectReferenceIds\")); // manually implements so it should have the method\r\n assert.isFalse(ActualDerived5.prototype.hasOwnProperty(\"collectReferenceIds\")); // ancestor is non-generated so it shouldn't get the automatic impl\r\n assert.isFalse(ActualDerived6.prototype.hasOwnProperty(\"collectReferenceIds\")); // ancestor is non-generated so it shouldn't get the automatic impl\r\n\r\n const testEntity1Id = imodel.elements.insertElement({\r\n classFullName: \"TestGeneratedClasses:Derived6\",\r\n prop: \"sample-value-1\",\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n } as TestEntityProps);\r\n\r\n const testEntity2Id = imodel.elements.insertElement({\r\n classFullName: \"TestGeneratedClasses:TestEntity\",\r\n prop: \"sample-value-2\",\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n } as TestEntityProps);\r\n\r\n const derived6Id = imodel.elements.insertElement({\r\n classFullName: Derived6.classFullName,\r\n model: IModelDb.dictionaryId,\r\n code: Code.createEmpty(),\r\n navProp: {\r\n id: testEntity1Id,\r\n relClassName: \"TestGeneratedClasses:ElemRel\",\r\n },\r\n derivedNavProp: {\r\n id: testEntity2Id,\r\n relClassName: \"TestGeneratedClasses:DerivedElemRel\",\r\n },\r\n } as DerivedWithNavPropProps);\r\n\r\n const derived6 = imodel.elements.getElement(derived6Id);\r\n\r\n /** it is not possible to make a spy of an already existing spy, so lazy try making one\r\n * this is necessary since due to prototypes, some \"methods\" we listen to are actually the same\r\n */\r\n function spyCollectReferenceIds(cls: typeof Element): sinon.SinonSpy {\r\n if ((cls.prototype as any).collectReferenceIds.isSinonProxy) {\r\n return (cls.prototype as any).collectReferenceIds;\r\n }\r\n return sinon.spy(cls.prototype, \"collectReferenceIds\" as any);\r\n }\r\n\r\n const elementMethodSpy = spyCollectReferenceIds(Element);\r\n const testElementWithNavPropSpy = spyCollectReferenceIds(ActualTestElementWithNavProp);\r\n const derivedWithNavPropSpy = spyCollectReferenceIds(ActualDerivedWithNavProp);\r\n const derived2Spy = spyCollectReferenceIds(ActualDerived2);\r\n const derived3Spy = spyCollectReferenceIds(ActualDerived3);\r\n const derived4Spy = spyCollectReferenceIds(ActualDerived4);\r\n const derived5Spy = spyCollectReferenceIds(ActualDerived5);\r\n const derived6Spy = spyCollectReferenceIds(ActualDerived6);\r\n\r\n // This demonstrates that if a generated class (Derived6) has a non-generated ancestor, it will not get a generated impl\r\n // instead it will just call the closest non-generated ancestor (Derived4)\r\n expect([...derived6.getReferenceIds()]).to.have.members(\r\n [\r\n EntityReferences.fromEntityType(derived6.model, ConcreteEntityTypes.Model),\r\n EntityReferences.fromEntityType(derived6.code.scope, ConcreteEntityTypes.Element),\r\n derived6.parent?.id && EntityReferences.fromEntityType(derived6.parent.id, ConcreteEntityTypes.Element),\r\n // \"TestGeneratedClasses:Derived4\" is MyDerived4 above, which extends the Derived4 class, which extends up\r\n // without any custom ancestor implementing collectReferenceIds, so Element.collectReferenceIds is called as the\r\n // super, and no navigation properties or other custom implementations are called so we only get \"derived-4\"\r\n EntityReferences.fromEntityType(\"derived-4\", ConcreteEntityTypes.Element),\r\n ].filter((x) => x !== undefined),\r\n );\r\n\r\n expect(elementMethodSpy.called).to.be.true; // this is the `super.collectReferenceIds` call in MyDerived4\r\n expect(testElementWithNavPropSpy.called).to.be.false;\r\n expect(derivedWithNavPropSpy.called).to.be.false;\r\n\r\n // these are the same (tested below)\r\n expect(derived2Spy.called).to.be.false;\r\n expect(derived3Spy.called).to.be.false;\r\n\r\n // these are all the same (tested below)\r\n expect(derived4Spy.called).to.be.true;\r\n expect(derived5Spy.called).to.be.true;\r\n expect(derived6Spy.called).to.be.true;\r\n\r\n expect(\r\n new Set(\r\n [\r\n Element,\r\n ActualTestElementWithNavProp,\r\n ActualDerivedWithNavProp,\r\n Derived2,\r\n Derived3, // same as above (so will be removed from set)\r\n Derived4,\r\n Derived5, // save as above (so will be removed from set)\r\n Derived6, // save as above (so will be removed from set)\r\n ].map((e) => e.prototype[\"collectReferenceIds\"]), // eslint-disable-line @typescript-eslint/dot-notation\r\n ),\r\n ).to.deep.equal(\r\n new Set(\r\n [\r\n Element,\r\n ActualTestElementWithNavProp,\r\n ActualDerivedWithNavProp,\r\n Derived2,\r\n Derived4,\r\n ].map((e) => e.prototype[\"collectReferenceIds\"]), // eslint-disable-line @typescript-eslint/dot-notation\r\n ),\r\n );\r\n\r\n MyTestGeneratedClasses.unregisterSchema();\r\n sinon.restore();\r\n });\r\n});\r\n\r\nclass Base {\r\n public static staticProperty: string = \"base\";\r\n public static get sqlName(): string { return `s.${this.staticProperty}`; }\r\n}\r\n\r\nclass Derived extends Base {\r\n}\r\n\r\ndescribe(\"Static Properties\", () => {\r\n it(\"should be inherited, and the subclass should get its own copy\", async () => {\r\n assert.equal(Base.staticProperty, \"base\");\r\n assert.equal(Derived.staticProperty, \"base\"); // Derived inherits Base's staticProperty (via its prototype)\r\n Derived.staticProperty = \"derived\"; // Derived now gets its own copy of staticProperty\r\n assert.equal(Base.staticProperty, \"base\"); // Base's staticProperty remains as it was\r\n assert.equal(Derived.staticProperty, \"derived\"); // Derived's staticProperty is now different\r\n assert.equal(Base.sqlName, \"s.base\");\r\n const d = new Derived();\r\n assert.equal((d.constructor as any).staticProperty, \"derived\"); // Instances of Derived see Derived.staticProperty\r\n const b = new Base();\r\n assert.equal((b.constructor as any).staticProperty, \"base\"); // Instances of Base see Base.staticProperty\r\n });\r\n\r\n});\r\n\r\ndescribe(\"Global state of ClassRegistry\", () => {\r\n let imodel1: SnapshotDb;\r\n let imodel2: SnapshotDb;\r\n\r\n before(() => {\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const testFileName1 = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GlobalState1.bim\");\r\n const testFileName2 = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GlobalState2.bim\");\r\n imodel1 = IModelTestUtils.createSnapshotFromSeed(testFileName1, seedFileName);\r\n imodel2 = IModelTestUtils.createSnapshotFromSeed(testFileName2, seedFileName);\r\n assert.exists(imodel1);\r\n assert.exists(imodel2);\r\n });\r\n\r\n after(() => {\r\n imodel1?.close();\r\n imodel2?.close();\r\n });\r\n\r\n it(\"registering a class in different imodels should not affect each other\", async () => {\r\n await imodel1.importSchemaStrings([\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"foo\" typeName=\"string\"/>\r\n <ECNavigationProperty propertyName=\"RelatedTestClass\" relationshipName=\"MyRelationship\" direction=\"backward\"/>\r\n </ECEntityClass>\r\n\r\n <ECRelationshipClass typeName=\"MyRelationship\" modifier=\"None\" strength=\"embedding\">\r\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"TestClass\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\r\n <Class class=\"TestClass\"/>\r\n </Target>\r\n </ECRelationshipClass>\r\n </ECSchema>\r\n `,\r\n ]);\r\n await imodel2.importSchemaStrings([\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"bar\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>\r\n `,\r\n ]);\r\n\r\n const testClass1 = imodel1.getJsClass(\"TestSchema:TestClass\");\r\n assert.isFalse(testClass1.hasOwnProperty(\"testPropertyGuard\"));\r\n (testClass1 as any).testPropertyGuard = true;\r\n assert.isTrue(testClass1.hasOwnProperty(\"testPropertyGuard\"));\r\n\r\n const testClass2 = imodel2.getJsClass(\"TestSchema:TestClass\");\r\n assert.isFalse(testClass2.hasOwnProperty(\"testPropertyGuard\"));\r\n });\r\n\r\n\r\n});\r\n// TODO: add tests on the new model/aspect prefixes\r\n"]}
1
+ {"version":3,"file":"ClassRegistry.test.js","sourceRoot":"","sources":["../../../../src/test/schema/ClassRegistry.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 * as sinon from \"sinon\";\nimport * as path from \"path\";\nimport {\n BisCodeSpec, Code, ConcreteEntityTypes, DefinitionElementProps, ECJsNames, ElementAspectProps, ElementProps, EntityReferenceSet, ModelProps,\n PropertyMetaData,\n RelatedElement, RelatedElementProps, RelationshipProps, SchemaState,\n} from \"@itwin/core-common\";\nimport {\n DefinitionElement, DefinitionModel, ElementRefersToElements, Entity, EntityReferences, IModelDb, IModelJsFs, Model, RepositoryLink,\n Schema, SnapshotDb, SpatialViewDefinition, StandaloneDb, UrlLink, ViewDefinition3d,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { Element } from \"../../Element\";\nimport { Schemas } from \"../../Schema\";\nimport { ClassRegistry } from \"../../ClassRegistry\";\nimport { OpenMode } from \"@itwin/core-bentley\";\nimport { EntityClass, NavigationProperty, PrimitiveProperty, SchemaItemKey, SchemaKey } from \"@itwin/ecschema-metadata\";\n\ndescribe(\"Class Registry\", () => {\n let imodel: SnapshotDb;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"ClassRegistryTest.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n assert.exists(imodel);\n });\n\n after(() => {\n imodel?.close();\n });\n\n it(\"should verify the Entity metadata of known element subclasses\", async () => {\n const code1 = new Code({ spec: \"0x10\", scope: \"0x11\", value: \"RF1.dgn\" });\n const el = imodel.elements.getElement(code1);\n assert.exists(el);\n if (el) {\n const metaData = await el.getMetaData();\n assert.exists(metaData);\n\n assert.equal(metaData.fullName, el.classFullName.replace(\":\", \".\"));\n // I happen to know that this is a BisCore:RepositoryLink\n assert.equal(metaData.fullName, RepositoryLink.classFullName.replace(\":\", \".\"));\n // Check the metadata on the class itself\n assert.isDefined(metaData.baseClass);\n assert.equal(metaData.baseClass?.fullName, UrlLink.classFullName.replace(\":\", \".\"));\n assert.isTrue(metaData.customAttributes?.has(\"BisCore.ClassHasHandler\"));\n // Check the metadata on the one property that RepositoryLink defines, RepositoryGuid\n const repositoryGuidProperty = await metaData.getProperty(\"repositoryGuid\") as PrimitiveProperty;\n assert.isDefined(repositoryGuidProperty);\n assert.equal(repositoryGuidProperty.extendedTypeName, \"BeGuid\");\n assert.isTrue(repositoryGuidProperty.customAttributes?.has(\"CoreCustomAttributes.HiddenProperty\"));\n }\n const el2 = imodel.elements.getElement(\"0x34\");\n assert.exists(el2);\n if (el2) {\n const metaData = await el2.getMetaData();\n assert.exists(metaData);\n\n assert.equal(metaData.fullName, el2.classFullName.replace(\":\", \".\"));\n // I happen to know that this is a BisCore.SpatialViewDefinition\n assert.equal(metaData.fullName, SpatialViewDefinition.classFullName.replace(\":\", \".\"));\n assert.isDefined(metaData.baseClass);\n assert.equal(metaData.baseClass?.fullName, ViewDefinition3d.classFullName.replace(\":\", \".\"));\n const modelSelectorProperty = await metaData.getProperty(\"modelSelector\") as NavigationProperty;\n assert.isDefined(modelSelectorProperty);\n assert.equal(modelSelectorProperty.relationshipClass.fullName, \"BisCore.SpatialViewDefinitionUsesModelSelector\");\n }\n });\n\n it(\"should verify Entity metadata with both base class and mixin properties\", async () => {\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestDomain.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]); // will throw an exception if import fails\n\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"TestDomain\", \"TestDomainClass\", EntityClass);\n assert.isDefined(testDomainClass);\n\n assert.isDefined(testDomainClass?.baseClass);\n assert.equal(testDomainClass?.baseClass?.fullName, DefinitionElement.classFullName.replace(\":\", \".\"));\n\n assert.isDefined(testDomainClass?.mixins);\n assert.equal(testDomainClass?.mixins.length, 1);\n assert.equal(testDomainClass?.mixins[0].fullName, \"TestDomain.IMixin\");\n\n // Verify that the forEach method which is called when constructing an entity\n // is picking up all expected properties.\n const testData: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n IModelDb.forEachMetaData(imodel, \"TestDomain:TestDomainClass\", true, (propName: string, _property: PropertyMetaData) => {\n testData.push(ECJsNames.toJsName(propName));\n }, false);\n\n const expectedString = testData.find((testString: string) => {\n return testString === \"testMixinProperty\";\n });\n\n assert.isDefined(expectedString);\n });\n});\n\ndescribe(\"Class Registry - getRootMetaData\", () => {\n let imodel: StandaloneDb;\n\n before(async () => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GetRootMetaData.bim\");\n IModelJsFs.copySync(seedFileName, testFileName);\n\n const schemaState: SchemaState = StandaloneDb.validateSchemas(testFileName, true);\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\n StandaloneDb.upgradeStandaloneSchemas(testFileName);\n\n imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n assert.exists(imodel);\n await imodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.03\" alias=\"CoreCA\"/>\n\n <ECEntityClass typeName=\"TestBase\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestDerived\">\n <BaseClass>TestBase</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForAspectsBase\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForAspectsDerived\">\n <BaseClass>ITestMixinForAspectsBase</BaseClass>\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForElements\" modifier=\"Abstract\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:Element</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestMixedInAndDerived\">\n <BaseClass>TestBase</BaseClass>\n <BaseClass>ITestMixinForElements</BaseClass>\n </ECEntityClass>\n\n </ECSchema>\n `,\n ]); // will throw an exception if import fails\n });\n\n after(() => {\n imodel?.close();\n });\n\n it(\"should get the root metadata\", async () => {\n for (const [testClass, expectedRoot] of [\n [\"TestSchema1.TestBase\", \"BisCore:Element\"],\n [\"TestSchema1.TestDerived\", \"BisCore:Element\"],\n [\"TestSchema1.ITestMixinForAspectsBase\", \"BisCore:ElementAspect\"],\n [\"TestSchema1.ITestMixinForAspectsDerived\", \"BisCore:ElementAspect\"],\n [\"TestSchema1.ITestMixinForElements\", \"BisCore:Element\"],\n [\"TestSchema1.TestMixedInAndDerived\", \"BisCore:Element\"],\n ] as const) {\n const rootMetaData = ClassRegistry.getRootEntity(imodel, testClass);\n expect(rootMetaData.replace(\".\", \":\")).to.equal(expectedRoot);\n }\n });\n});\n\ndescribe(\"Class Registry - generated classes\", () => {\n let imodel: SnapshotDb;\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"TestGeneratedClasses.ecschema.xml\");\n\n before(async () => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GeneratedClasses.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n assert.exists(imodel);\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n });\n\n after(() => {\n imodel?.close();\n });\n\n interface TestModelWithNavPropProps extends ModelProps {\n elemNavProp: RelatedElementProps;\n aspectNavProp: RelatedElementProps;\n relNavProp: RelatedElementProps;\n }\n\n interface TestEntityProps extends DefinitionElementProps {\n prop: string;\n }\n\n interface LinkTableRelWithNavPropProps extends RelationshipProps {\n elemNavProp: RelatedElementProps;\n modelNavProp: RelatedElementProps;\n aspectNavProp: RelatedElementProps;\n }\n\n interface TestElementWithNavPropProps extends DefinitionElementProps {\n navProp: RelatedElementProps;\n }\n\n interface DerivedWithNavPropProps extends TestElementWithNavPropProps {\n derivedNavProp: RelatedElementProps;\n }\n\n interface TestAspectWithNavProp extends ElementAspectProps {\n navProp: RelatedElement;\n }\n\n class TestGeneratedClasses extends Schema {\n public static override get schemaName(): string { return \"TestGeneratedClasses\"; }\n public static get classes() {\n return [TestModelWithNavProp, TestElementWithNavProp, LinkTableRelWithNavProp, DerivedWithNavProp, Derived2, Derived3, Derived4, Derived5, Derived6];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n for (const class_ of this.classes) {\n ClassRegistry.register(class_, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n class TestElementWithNavProp extends DefinitionElement {\n public static override get className() { return \"TestElementWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public navProp: RelatedElement;\n public constructor(props: TestElementWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.navProp = new RelatedElement(props.navProp);\n }\n }\n\n class TestModelWithNavProp extends DefinitionModel {\n public static override get className() { return \"TestModelWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public elemNavProp: RelatedElement;\n public aspectNavProp: RelatedElement;\n public relNavProp: RelatedElement;\n public constructor(props: TestModelWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.elemNavProp = new RelatedElement(props.elemNavProp);\n this.aspectNavProp = new RelatedElement(props.aspectNavProp);\n this.relNavProp = new RelatedElement(props.relNavProp);\n }\n }\n\n class LinkTableRelWithNavProp extends ElementRefersToElements {\n public static override get className() { return \"LinkTableRelWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public elemNavProp: RelatedElement;\n public aspectNavProp: RelatedElement;\n public modelNavProp: RelatedElement;\n public constructor(props: LinkTableRelWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.elemNavProp = new RelatedElement(props.elemNavProp);\n this.aspectNavProp = new RelatedElement(props.aspectNavProp);\n this.modelNavProp = new RelatedElement(props.modelNavProp);\n }\n }\n\n class DerivedWithNavProp extends TestElementWithNavProp {\n public static override get className() { return \"DerivedWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public derivedNavProp: RelatedElement;\n public constructor(props: DerivedWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.derivedNavProp = new RelatedElement(props.derivedNavProp);\n }\n }\n\n class Derived2 extends DerivedWithNavProp {\n public static override get className() { return \"Derived2\"; }\n }\n class Derived3 extends Derived2 {\n public static override get className() { return \"Derived3\"; }\n }\n class Derived4 extends Derived3 {\n public static override get className() { return \"Derived4\"; }\n }\n class Derived5 extends Derived4 {\n public static override get className() { return \"Derived5\"; }\n }\n class Derived6 extends Derived5 {\n public static override get className() { return \"Derived6\"; }\n }\n\n class NonGeneratedElement extends DefinitionElement {\n public static override get className() { return \"NonGeneratedElement\"; }\n }\n\n it(\"Should provide correct schemas and full-names on generated classes\", async () => {\n await imodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"CustomA\" alias=\"custA\" version=\"1.0.0\"\n xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"Functional\" version=\"1.00\" alias=\"func\"/>\n <ECEntityClass typeName=\"NonGeneratedElement\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"GeneratedElement\">\n <BaseClass>NonGeneratedElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"ElementC\">\n <BaseClass>GeneratedElement</BaseClass>\n </ECEntityClass>\n </ECSchema>\n `,\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"CustomB\" alias=\"custB\" version=\"1.0.0\"\n xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"Functional\" version=\"1.00\" alias=\"func\"/>\n <ECSchemaReference name=\"CustomA\" version=\"01.00\" alias=\"custA\"/>\n <ECEntityClass typeName=\"DummyElement\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"ErrorElement\">\n <BaseClass>custA:ElementC</BaseClass>\n </ECEntityClass>\n </ECSchema>\n `,\n ]);\n\n class CustomASchema extends Schema {\n public static override get schemaName(): string { return \"CustomA\"; }\n public static get classes(): typeof Entity[] {\n return [NonGeneratedElement];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n for (const ecClass of this.classes) {\n ClassRegistry.register(ecClass, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n CustomASchema.registerSchema();\n\n class DummyElement extends DefinitionElement {\n public static override get className() { return \"DummyElement\"; }\n }\n\n class CustomBSchema extends Schema {\n public static override get schemaName(): string { return \"CustomB\"; }\n public static get classes() {\n return [DummyElement];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n for (const ecClass of this.classes) {\n ClassRegistry.register(ecClass, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n CustomBSchema.registerSchema();\n\n const nonGeneratedElement = imodel.getJsClass(\"CustomA:NonGeneratedElement\");\n assert.equal(nonGeneratedElement.classFullName, \"CustomA:NonGeneratedElement\");\n const generatedElement = imodel.getJsClass(\"CustomA:GeneratedElement\");\n assert.equal(generatedElement.classFullName, \"CustomA:GeneratedElement\");\n const elementC = imodel.getJsClass(\"CustomA:ElementC\");\n assert.equal(elementC.classFullName, \"CustomA:ElementC\");\n const dummyElement = imodel.getJsClass(\"CustomB:DummyElement\");\n assert.equal(dummyElement.classFullName, \"CustomB:DummyElement\");\n\n //This is the class that had the wrong schema\n const errorElement = imodel.getJsClass(\"CustomB:ErrorElement\");\n assert.equal(errorElement.classFullName, \"CustomB:ErrorElement\");\n assert.isTrue(errorElement.schemaItemKey.matches(new SchemaItemKey(\"ErrorElement\", new SchemaKey(\"CustomB\", 1, 0, 0))));\n assert.equal(errorElement.className, \"ErrorElement\");\n assert.equal(errorElement.schema.schemaName, \"CustomB\");\n\n // Create an instance of ErrorElement\n const errorElementInstance = Entity.instantiate(errorElement, { classFullName: errorElement.classFullName }, imodel);\n assert.exists(errorElementInstance);\n assert.instanceOf(errorElementInstance, errorElement);\n assert.instanceOf(errorElementInstance, Entity);\n assert.equal(errorElementInstance.className, \"ErrorElement\");\n assert.equal(errorElementInstance.schemaName, \"CustomB\");\n const metadata = await errorElementInstance.getMetaData();\n assert.exists(metadata);\n assert.equal(metadata.fullName, \"CustomB.ErrorElement\");\n });\n\n // if a single inherited class is not generated, the entire hierarchy is considered not-generated\n it(\"should only generate automatic collectReferenceIds implementations for generated classes\", async () => {\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n\n class GeneratedTestElementWithNavProp extends imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\") {\n constructor(props: TestElementWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const testEntityId = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const elemWithNavProp = new GeneratedTestElementWithNavProp({\n classFullName: \"TestGeneratedClasses:TestElementWithNavProp\",\n navProp: {\n id: testEntityId,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n } as TestElementWithNavPropProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n assert.isDefined(GeneratedTestElementWithNavProp.prototype[\"collectReferenceIds\"]);\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testEntityId, ConcreteEntityTypes.Element),\n ]);\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedTestAspectWithNavProp = imodel.getJsClass(\"TestGeneratedClasses:TestAspectWithNavProp\");\n assert.isTrue(GeneratedTestAspectWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\"));\n });\n\n it(\"should not override collectReferenceIds for BisCore schema classes\", async () => {\n // AnnotationFrameStyle is an example of an unregistered bis class without an implementation of collectReferenceIds\n assert.isTrue(imodel.getJsClass(\"BisCore:AnnotationFrameStyle\").prototype.hasOwnProperty(\"collectReferenceIds\"));\n });\n\n it(\"should get references from its bis superclass\", async () => {\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n\n class GeneratedTestElementWithNavProp extends imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\") {\n constructor(props: ElementProps) {\n super(props, imodel);\n }\n }\n\n const testEntityId = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const elemWithNavProp = new GeneratedTestElementWithNavProp({\n classFullName: \"TestGeneratedClasses:TestElementWithNavProp\",\n navProp: new RelatedElement({\n id: testEntityId,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n }),\n model: IModelDb.dictionaryId,\n code: new Code({\n scope: IModelDb.rootSubjectId,\n spec: imodel.codeSpecs.getByName(BisCodeSpec.spatialCategory).id,\n value: \"\",\n }),\n parent: new RelatedElement({\n // since we don't actually insert this element in this test, using an arbitrary id string\n id: \"0x0000ffff\",\n relClassName: \"BisCore:ElementOwnsChildElements\",\n }),\n } as TestElementWithNavPropProps);\n\n // super class here is Element so we should get the code.scope, model and parent as references\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testEntityId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n\n const modelTestEntityIds = new Array(2).fill(undefined).map((_, index) => imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: `model-value-${index}`,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedTestAspectWithNavProp = imodel.getJsClass(\"TestGeneratedClasses:TestAspectWithNavProp\");\n\n const aspectWithNavPropId = imodel.elements.insertAspect({\n classFullName: GeneratedTestAspectWithNavProp.classFullName,\n navProp: { id: modelTestEntityIds[0], relClassName: \"TestGeneratedClasses:NonElemRel\" },\n element: { id: modelTestEntityIds[1] },\n } as TestAspectWithNavProp);\n\n class GeneratedTestModelWithNavProp extends imodel.getJsClass<typeof Model>(\"TestGeneratedClasses:TestModelWithNavProp\") {\n constructor(props: TestModelWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const modelWithNavProp = new GeneratedTestModelWithNavProp({\n classFullName: GeneratedTestModelWithNavProp.classFullName,\n modeledElement: { id: modelTestEntityIds[0] },\n parentModel: IModelDb.dictionaryId,\n elemNavProp: { id: modelTestEntityIds[1], relClassName: \"TestGeneratedClasses:ModelToElemNavRel\" },\n aspectNavProp: { id: aspectWithNavPropId, relClassName: \"TestGeneratedClasses:ModelToAspectNavRel\" },\n // removed due to a bug\n // relNavProp: { id: relWithNavPropId, relClassName: \"TestGeneratedClasses:ModelToRelNavRel\" },\n } as TestModelWithNavPropProps);\n\n const modelWithNavPropId = modelWithNavProp.insert();\n\n expect(\n [...modelWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(modelTestEntityIds[1], ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(IModelDb.dictionaryId, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(modelTestEntityIds[0], ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(aspectWithNavPropId, ConcreteEntityTypes.ElementAspect),\n // ignoring this one, because there seems to be a bug when specifying a relationship instance as a nav prop\n // EntityReferences.fromEntityType(relWithNavPropId, ConcreteEntityTypes.Relationship),\n ].filter((x) => x !== undefined));\n\n const relTestEntityIds = new Array(3).fill(undefined).map((_, index) => imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: `rel-value-${index}`,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedLinkTableRelWithNavProp = imodel.getJsClass<typeof LinkTableRelWithNavProp>(\"TestGeneratedClasses:LinkTableRelWithNavProp\");\n\n const relWithNavProp = new GeneratedLinkTableRelWithNavProp({\n classFullName: GeneratedLinkTableRelWithNavProp.classFullName,\n sourceId: relTestEntityIds[0],\n targetId: relTestEntityIds[1],\n elemNavProp: {\n id: relTestEntityIds[2],\n relClassName: \"TestGeneratedClasses:LinkTableRelToElemNavRel\",\n },\n modelNavProp: {\n id: modelWithNavPropId,\n relClassName: \"TestGeneratedClasses:LinkTableRelToModelNavRel\",\n },\n aspectNavProp: {\n id: aspectWithNavPropId,\n relClassName: \"TestGeneratedClasses:LinkTableRelToAspectNavRel\",\n },\n }, imodel);\n\n const _relWithNavPropId = relWithNavProp.insert();\n\n expect(\n [...relWithNavProp.getReferenceIds()],\n ).to.have.members([\n ...relTestEntityIds.map((id) => EntityReferences.fromEntityType(id, ConcreteEntityTypes.Element)),\n EntityReferences.fromEntityType(modelWithNavPropId, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(aspectWithNavPropId, ConcreteEntityTypes.ElementAspect),\n ]);\n });\n\n it(\"should not override custom registered schema class implementations of collectReferenceIds\", async () => {\n const testImplReferenceId = \"TEST-INVALID-ID\";\n class MyTestElementWithNavProp extends TestElementWithNavProp {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(testImplReferenceId);\n }\n }\n class MyTestGeneratedClasses extends TestGeneratedClasses {\n public static override get classes() {\n return [MyTestElementWithNavProp, Derived2, Derived3, Derived4, Derived5, Derived6];\n }\n }\n imodel.jsClassMap.clear();\n MyTestGeneratedClasses.registerSchema();\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const ActualTestElementWithNavProp = imodel.getJsClass<typeof MyTestElementWithNavProp>(TestElementWithNavProp.classFullName);\n\n const testElementWithNavPropCollectReferencesSpy = sinon.spy(ActualTestElementWithNavProp.prototype, \"collectReferenceIds\");\n\n class ActualDerivedWithNavProp extends imodel.getJsClass<typeof Element>(DerivedWithNavProp.classFullName) {\n constructor(props: DerivedWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const testEntity1Id = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-1\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const testEntity2Id = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-2\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const elemWithNavProp = new ActualTestElementWithNavProp({\n classFullName: TestElementWithNavProp.classFullName,\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n } as TestElementWithNavPropProps, imodel);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n assert.isDefined(ActualTestElementWithNavProp.prototype.collectReferenceIds);\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testImplReferenceId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n\n expect(testElementWithNavPropCollectReferencesSpy.called).to.be.true;\n testElementWithNavPropCollectReferencesSpy.resetHistory();\n\n const derivedElemWithNavProp = new ActualDerivedWithNavProp({\n classFullName: DerivedWithNavProp.classFullName,\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n derivedNavProp: {\n id: testEntity2Id,\n relClassName: \"TestGeneratedClasses:DerivedElemRel\",\n },\n } as DerivedWithNavPropProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n assert.isDefined(ActualDerivedWithNavProp.prototype[\"collectReferenceIds\"]);\n // This demonstrates that if a non-generated class has a registered non-biscore base, it will not get a generated impl,\n expect(\n [...derivedElemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testImplReferenceId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n // explicitly check we called the super function\n // (we already know its implementation was called, because testImplReferenceId is in the derived call's result)\n expect(testElementWithNavPropCollectReferencesSpy.called).to.be.true;\n\n sinon.restore();\n MyTestGeneratedClasses.unregisterSchema();\n });\n\n it(\"should work along a complex chain of overrides\", async () => {\n class MyDerived2 extends Derived2 {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(\"derived-2\");\n }\n }\n class MyDerived4 extends Derived4 {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(\"derived-4\");\n }\n }\n class MyTestGeneratedClasses extends TestGeneratedClasses {\n public static override get classes() {\n // leaving Derived3,5,6 generated\n return [MyDerived2, MyDerived4];\n }\n }\n imodel.jsClassMap.clear();\n MyTestGeneratedClasses.registerSchema();\n\n /* eslint-disable @typescript-eslint/naming-convention */\n const ActualTestElementWithNavProp = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\");\n const ActualDerivedWithNavProp = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:DerivedWithNavProp\");\n const ActualDerived2 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived2\");\n const ActualDerived3 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived3\");\n const ActualDerived4 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived4\");\n const ActualDerived5 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived5\");\n const ActualDerived6 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived6\");\n\n expect(ActualTestElementWithNavProp.isGeneratedClass).to.be.true;\n expect(ActualDerivedWithNavProp.isGeneratedClass).to.be.true;\n expect(ActualDerived2.isGeneratedClass).to.be.false;\n expect(ActualDerived3.isGeneratedClass).to.be.true;\n expect(ActualDerived4.isGeneratedClass).to.be.false;\n expect(ActualDerived5.isGeneratedClass).to.be.true;\n expect(ActualDerived6.isGeneratedClass).to.be.true;\n\n assert.isTrue(ActualTestElementWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\")); // should have automatic impl\n assert.isTrue(ActualDerivedWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\"));\n assert.isTrue(ActualDerived2.prototype.hasOwnProperty(\"collectReferenceIds\")); // non-generated; manually implements so has method\n assert.isFalse(ActualDerived3.prototype.hasOwnProperty(\"collectReferenceIds\")); // base is non-generated so it shouldn't get the automatic impl\n assert.isTrue(ActualDerived4.prototype.hasOwnProperty(\"collectReferenceIds\")); // manually implements so it should have the method\n assert.isFalse(ActualDerived5.prototype.hasOwnProperty(\"collectReferenceIds\")); // ancestor is non-generated so it shouldn't get the automatic impl\n assert.isFalse(ActualDerived6.prototype.hasOwnProperty(\"collectReferenceIds\")); // ancestor is non-generated so it shouldn't get the automatic impl\n\n const testEntity1Id = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:Derived6\",\n prop: \"sample-value-1\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const testEntity2Id = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-2\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const derived6Id = imodel.elements.insertElement({\n classFullName: Derived6.classFullName,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n derivedNavProp: {\n id: testEntity2Id,\n relClassName: \"TestGeneratedClasses:DerivedElemRel\",\n },\n } as DerivedWithNavPropProps);\n\n const derived6 = imodel.elements.getElement(derived6Id);\n\n /** it is not possible to make a spy of an already existing spy, so lazy try making one\n * this is necessary since due to prototypes, some \"methods\" we listen to are actually the same\n */\n function spyCollectReferenceIds(cls: typeof Element): sinon.SinonSpy {\n if ((cls.prototype as any).collectReferenceIds.isSinonProxy) {\n return (cls.prototype as any).collectReferenceIds;\n }\n return sinon.spy(cls.prototype, \"collectReferenceIds\" as any);\n }\n\n const elementMethodSpy = spyCollectReferenceIds(Element);\n const testElementWithNavPropSpy = spyCollectReferenceIds(ActualTestElementWithNavProp);\n const derivedWithNavPropSpy = spyCollectReferenceIds(ActualDerivedWithNavProp);\n const derived2Spy = spyCollectReferenceIds(ActualDerived2);\n const derived3Spy = spyCollectReferenceIds(ActualDerived3);\n const derived4Spy = spyCollectReferenceIds(ActualDerived4);\n const derived5Spy = spyCollectReferenceIds(ActualDerived5);\n const derived6Spy = spyCollectReferenceIds(ActualDerived6);\n\n // This demonstrates that if a generated class (Derived6) has a non-generated ancestor, it will not get a generated impl\n // instead it will just call the closest non-generated ancestor (Derived4)\n expect([...derived6.getReferenceIds()]).to.have.members(\n [\n EntityReferences.fromEntityType(derived6.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(derived6.code.scope, ConcreteEntityTypes.Element),\n derived6.parent?.id && EntityReferences.fromEntityType(derived6.parent.id, ConcreteEntityTypes.Element),\n // \"TestGeneratedClasses:Derived4\" is MyDerived4 above, which extends the Derived4 class, which extends up\n // without any custom ancestor implementing collectReferenceIds, so Element.collectReferenceIds is called as the\n // super, and no navigation properties or other custom implementations are called so we only get \"derived-4\"\n EntityReferences.fromEntityType(\"derived-4\", ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined),\n );\n\n expect(elementMethodSpy.called).to.be.true; // this is the `super.collectReferenceIds` call in MyDerived4\n expect(testElementWithNavPropSpy.called).to.be.false;\n expect(derivedWithNavPropSpy.called).to.be.false;\n\n // these are the same (tested below)\n expect(derived2Spy.called).to.be.false;\n expect(derived3Spy.called).to.be.false;\n\n // these are all the same (tested below)\n expect(derived4Spy.called).to.be.true;\n expect(derived5Spy.called).to.be.true;\n expect(derived6Spy.called).to.be.true;\n\n expect(\n new Set(\n [\n Element,\n ActualTestElementWithNavProp,\n ActualDerivedWithNavProp,\n Derived2,\n Derived3, // same as above (so will be removed from set)\n Derived4,\n Derived5, // save as above (so will be removed from set)\n Derived6, // save as above (so will be removed from set)\n ].map((e) => e.prototype[\"collectReferenceIds\"]), // eslint-disable-line @typescript-eslint/dot-notation\n ),\n ).to.deep.equal(\n new Set(\n [\n Element,\n ActualTestElementWithNavProp,\n ActualDerivedWithNavProp,\n Derived2,\n Derived4,\n ].map((e) => e.prototype[\"collectReferenceIds\"]), // eslint-disable-line @typescript-eslint/dot-notation\n ),\n );\n\n MyTestGeneratedClasses.unregisterSchema();\n sinon.restore();\n });\n});\n\nclass Base {\n public static staticProperty: string = \"base\";\n public static get sqlName(): string { return `s.${this.staticProperty}`; }\n}\n\nclass Derived extends Base {\n}\n\ndescribe(\"Static Properties\", () => {\n it(\"should be inherited, and the subclass should get its own copy\", async () => {\n assert.equal(Base.staticProperty, \"base\");\n assert.equal(Derived.staticProperty, \"base\"); // Derived inherits Base's staticProperty (via its prototype)\n Derived.staticProperty = \"derived\"; // Derived now gets its own copy of staticProperty\n assert.equal(Base.staticProperty, \"base\"); // Base's staticProperty remains as it was\n assert.equal(Derived.staticProperty, \"derived\"); // Derived's staticProperty is now different\n assert.equal(Base.sqlName, \"s.base\");\n const d = new Derived();\n assert.equal((d.constructor as any).staticProperty, \"derived\"); // Instances of Derived see Derived.staticProperty\n const b = new Base();\n assert.equal((b.constructor as any).staticProperty, \"base\"); // Instances of Base see Base.staticProperty\n });\n\n});\n\ndescribe(\"Global state of ClassRegistry\", () => {\n let imodel1: SnapshotDb;\n let imodel2: SnapshotDb;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName1 = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GlobalState1.bim\");\n const testFileName2 = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GlobalState2.bim\");\n imodel1 = IModelTestUtils.createSnapshotFromSeed(testFileName1, seedFileName);\n imodel2 = IModelTestUtils.createSnapshotFromSeed(testFileName2, seedFileName);\n assert.exists(imodel1);\n assert.exists(imodel2);\n });\n\n after(() => {\n imodel1?.close();\n imodel2?.close();\n });\n\n it(\"registering a class in different imodels should not affect each other\", async () => {\n await imodel1.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"foo\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"RelatedTestClass\" relationshipName=\"MyRelationship\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"MyRelationship\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"TestClass\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"TestClass\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>\n `,\n ]);\n await imodel2.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"bar\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>\n `,\n ]);\n\n const testClass1 = imodel1.getJsClass(\"TestSchema:TestClass\");\n assert.isFalse(testClass1.hasOwnProperty(\"testPropertyGuard\"));\n (testClass1 as any).testPropertyGuard = true;\n assert.isTrue(testClass1.hasOwnProperty(\"testPropertyGuard\"));\n\n const testClass2 = imodel2.getJsClass(\"TestSchema:TestClass\");\n assert.isFalse(testClass2.hasOwnProperty(\"testPropertyGuard\"));\n });\n\n\n});\n// TODO: add tests on the new model/aspect prefixes\n"]}