@itwin/core-backend 5.0.0-dev.99 → 5.1.0-dev.0

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 (443) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.d.ts +103 -0
  8. package/lib/cjs/CatalogDb.d.ts.map +1 -0
  9. package/lib/cjs/CatalogDb.js +271 -0
  10. package/lib/cjs/CatalogDb.js.map +1 -0
  11. package/lib/cjs/Category.js.map +1 -1
  12. package/lib/cjs/ChangeSummaryManager.js +2 -2
  13. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  14. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  15. package/lib/cjs/ChangesetECAdaptor.js +242 -242
  16. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  17. package/lib/cjs/ChannelControl.js.map +1 -1
  18. package/lib/cjs/CheckpointManager.d.ts +12 -10
  19. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  20. package/lib/cjs/CheckpointManager.js +17 -41
  21. package/lib/cjs/CheckpointManager.js.map +1 -1
  22. package/lib/cjs/ClassRegistry.js +5 -5
  23. package/lib/cjs/ClassRegistry.js.map +1 -1
  24. package/lib/cjs/CloudSqlite.d.ts +104 -20
  25. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  26. package/lib/cjs/CloudSqlite.js +157 -46
  27. package/lib/cjs/CloudSqlite.js.map +1 -1
  28. package/lib/cjs/CodeService.js.map +1 -1
  29. package/lib/cjs/CodeSpecs.js.map +1 -1
  30. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  31. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  32. package/lib/cjs/DevTools.js.map +1 -1
  33. package/lib/cjs/DisplayStyle.js.map +1 -1
  34. package/lib/cjs/ECDb.js.map +1 -1
  35. package/lib/cjs/ECSchemaXmlContext.d.ts +1 -1
  36. package/lib/cjs/ECSchemaXmlContext.js +1 -1
  37. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  38. package/lib/cjs/ECSqlStatement.js.map +1 -1
  39. package/lib/cjs/Element.js.map +1 -1
  40. package/lib/cjs/ElementAspect.js.map +1 -1
  41. package/lib/cjs/ElementGraphics.js.map +1 -1
  42. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  43. package/lib/cjs/Entity.d.ts +8 -4
  44. package/lib/cjs/Entity.d.ts.map +1 -1
  45. package/lib/cjs/Entity.js +3 -3
  46. package/lib/cjs/Entity.js.map +1 -1
  47. package/lib/cjs/EntityReferences.js.map +1 -1
  48. package/lib/cjs/ExportGraphics.js.map +1 -1
  49. package/lib/cjs/ExternalSource.js.map +1 -1
  50. package/lib/cjs/FontFile.js.map +1 -1
  51. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  52. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  53. package/lib/cjs/GeometrySummary.js +47 -47
  54. package/lib/cjs/GeometrySummary.js.map +1 -1
  55. package/lib/cjs/IModelDb.d.ts +6 -1
  56. package/lib/cjs/IModelDb.d.ts.map +1 -1
  57. package/lib/cjs/IModelDb.js +22 -15
  58. package/lib/cjs/IModelDb.js.map +1 -1
  59. package/lib/cjs/IModelDbFonts.js.map +1 -1
  60. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  61. package/lib/cjs/IModelHost.d.ts +1 -1
  62. package/lib/cjs/IModelHost.js +1 -1
  63. package/lib/cjs/IModelHost.js.map +1 -1
  64. package/lib/cjs/IModelJsFs.js.map +1 -1
  65. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  66. package/lib/cjs/IpcHost.js.map +1 -1
  67. package/lib/cjs/LineStyle.js.map +1 -1
  68. package/lib/cjs/LocalHub.js +1 -1
  69. package/lib/cjs/LocalHub.js.map +1 -1
  70. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  71. package/lib/cjs/LockControl.js.map +1 -1
  72. package/lib/cjs/Material.js.map +1 -1
  73. package/lib/cjs/Model.js.map +1 -1
  74. package/lib/cjs/NativeAppStorage.js.map +1 -1
  75. package/lib/cjs/NativeHost.d.ts.map +1 -1
  76. package/lib/cjs/NativeHost.js +4 -1
  77. package/lib/cjs/NativeHost.js.map +1 -1
  78. package/lib/cjs/NavigationRelationship.js.map +1 -1
  79. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  80. package/lib/cjs/PropertyStore.js.map +1 -1
  81. package/lib/cjs/Relationship.js.map +1 -1
  82. package/lib/cjs/RpcBackend.js.map +1 -1
  83. package/lib/cjs/SQLiteDb.d.ts.map +1 -1
  84. package/lib/cjs/SQLiteDb.js +5 -4
  85. package/lib/cjs/SQLiteDb.js.map +1 -1
  86. package/lib/cjs/Schema.js.map +1 -1
  87. package/lib/cjs/SchemaSync.js.map +1 -1
  88. package/lib/cjs/SchemaUtils.js.map +1 -1
  89. package/lib/cjs/SheetIndex.js.map +1 -1
  90. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  91. package/lib/cjs/SqliteStatement.js.map +1 -1
  92. package/lib/cjs/TextAnnotationElement.js.map +1 -1
  93. package/lib/cjs/TextAnnotationGeometry.js.map +1 -1
  94. package/lib/cjs/TextAnnotationLayout.js.map +1 -1
  95. package/lib/cjs/Texture.js.map +1 -1
  96. package/lib/cjs/TileStorage.js.map +1 -1
  97. package/lib/cjs/TxnManager.js.map +1 -1
  98. package/lib/cjs/ViewDefinition.js.map +1 -1
  99. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  100. package/lib/cjs/ViewStore.d.ts.map +1 -1
  101. package/lib/cjs/ViewStore.js +27 -27
  102. package/lib/cjs/ViewStore.js.map +1 -1
  103. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  104. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  105. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  106. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  107. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  108. package/lib/cjs/core-backend.d.ts +1 -1
  109. package/lib/cjs/core-backend.d.ts.map +1 -1
  110. package/lib/cjs/core-backend.js +1 -1
  111. package/lib/cjs/core-backend.js.map +1 -1
  112. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  113. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  114. package/lib/cjs/domains/GenericElements.js.map +1 -1
  115. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  116. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  117. package/lib/cjs/internal/ChannelAdmin.js +4 -4
  118. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  119. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  120. package/lib/cjs/{HubMock.d.ts → internal/HubMock.d.ts} +4 -5
  121. package/lib/cjs/internal/HubMock.d.ts.map +1 -0
  122. package/lib/cjs/{HubMock.js → internal/HubMock.js} +22 -11
  123. package/lib/cjs/internal/HubMock.js.map +1 -0
  124. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  125. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  126. package/lib/cjs/internal/NoLocks.js.map +1 -1
  127. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  128. package/lib/cjs/internal/Symbols.d.ts +1 -2
  129. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  130. package/lib/cjs/internal/Symbols.js +2 -3
  131. package/lib/cjs/internal/Symbols.js.map +1 -1
  132. package/lib/cjs/internal/cross-package.js.map +1 -1
  133. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  134. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  135. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +2 -16
  136. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  137. package/lib/cjs/internal/workspace/WorkspaceImpl.js +35 -104
  138. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  139. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  140. package/lib/cjs/rpc/multipart.js.map +1 -1
  141. package/lib/cjs/rpc/tracing.js.map +1 -1
  142. package/lib/cjs/rpc/web/logging.js.map +1 -1
  143. package/lib/cjs/rpc/web/request.js.map +1 -1
  144. package/lib/cjs/rpc/web/response.js.map +1 -1
  145. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  146. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  147. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  148. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  149. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  150. package/lib/cjs/workspace/Settings.js.map +1 -1
  151. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  152. package/lib/cjs/workspace/Workspace.d.ts +6 -13
  153. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  154. package/lib/cjs/workspace/Workspace.js.map +1 -1
  155. package/lib/cjs/workspace/WorkspaceEditor.d.ts +2 -7
  156. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  157. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  158. package/lib/esm/BackendHubAccess.js.map +1 -1
  159. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  160. package/lib/esm/BisCoreSchema.js.map +1 -1
  161. package/lib/esm/BlobContainerService.js.map +1 -1
  162. package/lib/esm/BriefcaseManager.js.map +1 -1
  163. package/lib/esm/CatalogDb.d.ts +103 -0
  164. package/lib/esm/CatalogDb.d.ts.map +1 -0
  165. package/lib/esm/CatalogDb.js +267 -0
  166. package/lib/esm/CatalogDb.js.map +1 -0
  167. package/lib/esm/Category.js.map +1 -1
  168. package/lib/esm/ChangeSummaryManager.js +2 -2
  169. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  170. package/lib/esm/ChangedElementsDb.js.map +1 -1
  171. package/lib/esm/ChangesetECAdaptor.js +242 -242
  172. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  173. package/lib/esm/ChannelControl.js.map +1 -1
  174. package/lib/esm/CheckpointManager.d.ts +12 -10
  175. package/lib/esm/CheckpointManager.d.ts.map +1 -1
  176. package/lib/esm/CheckpointManager.js +18 -42
  177. package/lib/esm/CheckpointManager.js.map +1 -1
  178. package/lib/esm/ClassRegistry.js +5 -5
  179. package/lib/esm/ClassRegistry.js.map +1 -1
  180. package/lib/esm/CloudSqlite.d.ts +104 -20
  181. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  182. package/lib/esm/CloudSqlite.js +157 -46
  183. package/lib/esm/CloudSqlite.js.map +1 -1
  184. package/lib/esm/CodeService.js.map +1 -1
  185. package/lib/esm/CodeSpecs.js.map +1 -1
  186. package/lib/esm/ConcurrentQuery.js.map +1 -1
  187. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  188. package/lib/esm/DevTools.js.map +1 -1
  189. package/lib/esm/DisplayStyle.js.map +1 -1
  190. package/lib/esm/ECDb.js.map +1 -1
  191. package/lib/esm/ECSchemaXmlContext.d.ts +1 -1
  192. package/lib/esm/ECSchemaXmlContext.js +1 -1
  193. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  194. package/lib/esm/ECSqlStatement.js.map +1 -1
  195. package/lib/esm/Element.js.map +1 -1
  196. package/lib/esm/ElementAspect.js.map +1 -1
  197. package/lib/esm/ElementGraphics.js.map +1 -1
  198. package/lib/esm/ElementTreeWalker.js.map +1 -1
  199. package/lib/esm/Entity.d.ts +8 -4
  200. package/lib/esm/Entity.d.ts.map +1 -1
  201. package/lib/esm/Entity.js +3 -3
  202. package/lib/esm/Entity.js.map +1 -1
  203. package/lib/esm/EntityReferences.js.map +1 -1
  204. package/lib/esm/ExportGraphics.js.map +1 -1
  205. package/lib/esm/ExternalSource.js.map +1 -1
  206. package/lib/esm/FontFile.js.map +1 -1
  207. package/lib/esm/GeoCoordConfig.js.map +1 -1
  208. package/lib/esm/GeographicCRSServices.js.map +1 -1
  209. package/lib/esm/GeometrySummary.js +47 -47
  210. package/lib/esm/GeometrySummary.js.map +1 -1
  211. package/lib/esm/IModelDb.d.ts +6 -1
  212. package/lib/esm/IModelDb.d.ts.map +1 -1
  213. package/lib/esm/IModelDb.js +22 -15
  214. package/lib/esm/IModelDb.js.map +1 -1
  215. package/lib/esm/IModelDbFonts.js.map +1 -1
  216. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  217. package/lib/esm/IModelHost.d.ts +1 -1
  218. package/lib/esm/IModelHost.js +1 -1
  219. package/lib/esm/IModelHost.js.map +1 -1
  220. package/lib/esm/IModelJsFs.js.map +1 -1
  221. package/lib/esm/ImageSourceConversion.js.map +1 -1
  222. package/lib/esm/IpcHost.js.map +1 -1
  223. package/lib/esm/LineStyle.js.map +1 -1
  224. package/lib/esm/LocalHub.js +1 -1
  225. package/lib/esm/LocalHub.js.map +1 -1
  226. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  227. package/lib/esm/LockControl.js.map +1 -1
  228. package/lib/esm/Material.js.map +1 -1
  229. package/lib/esm/Model.js.map +1 -1
  230. package/lib/esm/NativeAppStorage.js.map +1 -1
  231. package/lib/esm/NativeHost.d.ts.map +1 -1
  232. package/lib/esm/NativeHost.js +4 -1
  233. package/lib/esm/NativeHost.js.map +1 -1
  234. package/lib/esm/NavigationRelationship.js.map +1 -1
  235. package/lib/esm/PromiseMemoizer.js.map +1 -1
  236. package/lib/esm/PropertyStore.js.map +1 -1
  237. package/lib/esm/Relationship.js.map +1 -1
  238. package/lib/esm/RpcBackend.js.map +1 -1
  239. package/lib/esm/SQLiteDb.d.ts.map +1 -1
  240. package/lib/esm/SQLiteDb.js +5 -4
  241. package/lib/esm/SQLiteDb.js.map +1 -1
  242. package/lib/esm/Schema.js.map +1 -1
  243. package/lib/esm/SchemaSync.js.map +1 -1
  244. package/lib/esm/SchemaUtils.js.map +1 -1
  245. package/lib/esm/SheetIndex.js.map +1 -1
  246. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  247. package/lib/esm/SqliteStatement.js.map +1 -1
  248. package/lib/esm/TextAnnotationElement.js.map +1 -1
  249. package/lib/esm/TextAnnotationGeometry.js.map +1 -1
  250. package/lib/esm/TextAnnotationLayout.js.map +1 -1
  251. package/lib/esm/Texture.js.map +1 -1
  252. package/lib/esm/TileStorage.js.map +1 -1
  253. package/lib/esm/TxnManager.js.map +1 -1
  254. package/lib/esm/ViewDefinition.js.map +1 -1
  255. package/lib/esm/ViewStateHydrator.js.map +1 -1
  256. package/lib/esm/ViewStore.d.ts.map +1 -1
  257. package/lib/esm/ViewStore.js +28 -28
  258. package/lib/esm/ViewStore.js.map +1 -1
  259. package/lib/esm/core-backend.d.ts +1 -1
  260. package/lib/esm/core-backend.d.ts.map +1 -1
  261. package/lib/esm/core-backend.js +1 -1
  262. package/lib/esm/core-backend.js.map +1 -1
  263. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  264. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  265. package/lib/esm/domains/GenericElements.js.map +1 -1
  266. package/lib/esm/domains/GenericSchema.js.map +1 -1
  267. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  268. package/lib/esm/internal/ChannelAdmin.js +5 -5
  269. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  270. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  271. package/lib/esm/{HubMock.d.ts → internal/HubMock.d.ts} +4 -5
  272. package/lib/esm/internal/HubMock.d.ts.map +1 -0
  273. package/lib/esm/{HubMock.js → internal/HubMock.js} +22 -11
  274. package/lib/esm/internal/HubMock.js.map +1 -0
  275. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  276. package/lib/esm/internal/NativePlatform.js.map +1 -1
  277. package/lib/esm/internal/NoLocks.js.map +1 -1
  278. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  279. package/lib/esm/internal/Symbols.d.ts +1 -2
  280. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  281. package/lib/esm/internal/Symbols.js +1 -2
  282. package/lib/esm/internal/Symbols.js.map +1 -1
  283. package/lib/esm/internal/cross-package.js.map +1 -1
  284. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  285. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  286. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +2 -16
  287. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  288. package/lib/esm/internal/workspace/WorkspaceImpl.js +36 -100
  289. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  290. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  291. package/lib/esm/rpc/multipart.js.map +1 -1
  292. package/lib/esm/rpc/tracing.js.map +1 -1
  293. package/lib/esm/rpc/web/logging.js.map +1 -1
  294. package/lib/esm/rpc/web/request.js.map +1 -1
  295. package/lib/esm/rpc/web/response.js.map +1 -1
  296. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  297. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  298. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  299. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  300. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  301. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  302. package/lib/esm/test/AttachDb.test.js +11 -11
  303. package/lib/esm/test/AttachDb.test.js.map +1 -1
  304. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  305. package/lib/esm/test/IModelHost.test.js.map +1 -1
  306. package/lib/esm/test/IModelTestUtils.d.ts +6 -2
  307. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  308. package/lib/esm/test/IModelTestUtils.js +27 -6
  309. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  310. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  311. package/lib/esm/test/IpcHost.test.js.map +1 -1
  312. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  313. package/lib/esm/test/PrintElementTree.js.map +1 -1
  314. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  315. package/lib/esm/test/RevisionUtility.js.map +1 -1
  316. package/lib/esm/test/SchemaUtils.test.js +25 -25
  317. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  318. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  319. package/lib/esm/test/TestChangeSetUtility.js +1 -1
  320. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  321. package/lib/esm/test/TestUtils.js.map +1 -1
  322. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  323. package/lib/esm/test/categories/Category.test.js.map +1 -1
  324. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  325. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  326. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  327. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  328. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  329. package/lib/esm/test/ecdb/ECDb.test.js +57 -57
  330. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  331. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  332. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js +4 -4
  333. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  334. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  335. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  336. package/lib/esm/test/ecdb/ECSqlQuery.test.js +7 -7
  337. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  338. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  339. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  340. package/lib/esm/test/ecdb/ECSqlStatement.test.js +292 -292
  341. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  342. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  343. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  344. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  345. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  346. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  347. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  348. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  349. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  350. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  351. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  352. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  353. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  354. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  355. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  356. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  357. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  358. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  359. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  360. package/lib/esm/test/font/IModelDbFonts.test.js +1 -1
  361. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  362. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +1 -1
  363. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  364. package/lib/esm/test/hubaccess/CheckpointManager.test.js +4 -3
  365. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  366. package/lib/esm/test/imageData.js.map +1 -1
  367. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  368. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  369. package/lib/esm/test/imodel/IModel.test.js +1 -1
  370. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  371. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  372. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  373. package/lib/esm/test/index.js.map +1 -1
  374. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  375. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  376. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  377. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  378. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  379. package/lib/esm/test/rpc/response.test.js.map +1 -1
  380. package/lib/esm/test/schema/ClassRegistry.test.js +71 -71
  381. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  382. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  383. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  384. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  385. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  386. package/lib/esm/test/standalone/ChangeMerge.test.js +1 -1
  387. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  388. package/lib/esm/test/standalone/ChangesetReader.test.js +29 -29
  389. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  390. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  391. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  392. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  393. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  394. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  395. package/lib/esm/test/standalone/ExportGraphics.test.js +19 -54
  396. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  397. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  398. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  399. package/lib/esm/test/standalone/HubMock.test.js +1 -1
  400. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  401. package/lib/esm/test/standalone/IModelWrite.test.js +28 -28
  402. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  403. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  404. package/lib/esm/test/standalone/MergeConflict.test.js +1 -1
  405. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  406. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  407. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  408. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  409. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  410. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  411. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  412. package/lib/esm/test/standalone/ServerBasedLocks.test.js +1 -1
  413. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  414. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  415. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  416. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  417. package/lib/esm/test/standalone/SnapshotDb.test.js +5 -4
  418. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  419. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  420. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  421. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  422. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  423. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  424. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  425. package/lib/esm/test/standalone/Workspace.test.js +4 -3
  426. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  427. package/lib/esm/workspace/Settings.js.map +1 -1
  428. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  429. package/lib/esm/workspace/Workspace.d.ts +6 -13
  430. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  431. package/lib/esm/workspace/Workspace.js.map +1 -1
  432. package/lib/esm/workspace/WorkspaceEditor.d.ts +2 -7
  433. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  434. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  435. package/package.json +13 -13
  436. package/lib/cjs/HubMock.d.ts.map +0 -1
  437. package/lib/cjs/HubMock.js.map +0 -1
  438. package/lib/esm/HubMock.d.ts.map +0 -1
  439. package/lib/esm/HubMock.js.map +0 -1
  440. package/lib/esm/test/CloudSqliteMock.d.ts +0 -37
  441. package/lib/esm/test/CloudSqliteMock.d.ts.map +0 -1
  442. package/lib/esm/test/CloudSqliteMock.js +0 -117
  443. package/lib/esm/test/CloudSqliteMock.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DgnDbWorker.test.js","sourceRoot":"","sources":["../../../../src/test/native/DgnDbWorker.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*--------------------------------------------------------------------------------------------*/\n\nimport { assert, expect } from \"chai\";\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { IModelNative } from \"../../internal/NativePlatform\";\nimport { StandaloneDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { _nativeDb } from \"../../internal/Symbols\";\n\ndescribe(\"DgnDbWorker\", () => {\n let imodel: StandaloneDb;\n\n function openIModel(): void {\n const rootSubject = { name: \"DgnDbWorker tests\", description: \"DgnDbWorker tests\" };\n imodel = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DgnDbWorker\", \"DgnDbWorker.bim\"), { rootSubject });\n }\n\n before(() => {\n openIModel();\n });\n\n after(() => {\n imodel.close();\n });\n\n class Worker {\n public promise: Promise<void> | undefined;\n private readonly _worker: IModelJsNative.TestWorker;\n\n public constructor() {\n this._worker = new IModelNative.platform.TestWorker(imodel[_nativeDb]);\n }\n\n public queue() { this.promise = this._worker.queue(); }\n public cancel() { this._worker.cancel(); }\n public setReady() { this._worker.setReady(); }\n public setThrow() { this._worker.setThrow(); }\n\n public get isCanceled(): boolean { return this._worker.isCanceled(); }\n public get wasExecuted(): boolean { return this._worker.wasExecuted(); }\n public get state(): IModelJsNative.TestWorkerState { return this._worker.getState(); }\n\n public get wasQueued() { return IModelJsNative.TestWorkerState.NotQueued !== this.state; }\n public get isQueued() { return IModelJsNative.TestWorkerState.Queued === this.state; }\n public get isRunning() { return IModelJsNative.TestWorkerState.Running === this.state; }\n public get isError() { return IModelJsNative.TestWorkerState.Error === this.state; }\n public get isOk() { return IModelJsNative.TestWorkerState.Ok === this.state; }\n public get isSkipped() { return IModelJsNative.TestWorkerState.Skipped === this.state; }\n public get isAborted() { return IModelJsNative.TestWorkerState.Aborted === this.state; }\n }\n\n async function waitUntil(condition: () => boolean): Promise<void> {\n if (condition())\n return;\n\n await new Promise<void>((resolve: any) => setTimeout(resolve, 100));\n return waitUntil(condition);\n }\n\n it(\"executes asynchronously\", async () => {\n const worker = new Worker();\n await BeDuration.wait(1000);\n expect(worker.wasQueued).to.be.false;\n expect(worker.isCanceled).to.be.false;\n\n worker.queue();\n expect(worker.isQueued || worker.isRunning).to.be.true;\n\n worker.setReady();\n await worker.promise;\n\n expect(worker.wasExecuted).to.be.true;\n expect(worker.isCanceled).to.be.false;\n expect(worker.isOk).to.be.true;\n });\n\n it(\"executes a maximum of 4 simultaneously\", async () => {\n // Create 4 workers. They should all start executing.\n const first = [new Worker(), new Worker(), new Worker(), new Worker()];\n for (const worker of first)\n worker.queue();\n\n await waitUntil(() => first.every((x) => x.isRunning));\n\n // Queue up 2 more workers. They should not start executing until at least one of the first 4 resolves.\n const next = [new Worker(), new Worker()];\n for (const worker of next)\n worker.queue();\n\n await BeDuration.wait(1000);\n expect(first.every((x) => x.isRunning)).to.be.true;\n expect(next.every((x) => x.isQueued)).to.be.true;\n\n // Let the first worker resolve.\n first[0].setReady();\n await first[0].promise;\n expect(first[0].isOk).to.be.true;\n\n // Exactly one of the 2 workers remaining in the queue should start executing.\n await waitUntil(() => next.some((x) => x.isRunning));\n await BeDuration.wait(1000);\n expect(next.every((x) => x.isRunning)).to.be.false;\n\n // Clear the queue.\n const workers = first.concat(next);\n for (const worker of workers)\n worker.setReady();\n\n await Promise.all(workers.map((x) => x.promise)); // eslint-disable-line @typescript-eslint/promise-function-async\n expect(workers.every((x) => x.isOk)).to.be.true;\n });\n\n it(\"skips execution if canceled before execution begins\", async () => {\n const worker = new Worker();\n worker.cancel();\n expect(worker.isCanceled).to.be.true;\n worker.queue();\n await assert.isRejected(worker.promise!, \"canceled\");\n expect(worker.isSkipped).to.be.true;\n expect(worker.wasExecuted).to.be.false;\n });\n\n it(\"executes if canceled after execution begins\", async () => {\n const worker = new Worker();\n worker.queue();\n await waitUntil(() => worker.isRunning);\n worker.cancel();\n worker.setReady();\n await worker.promise;\n expect(worker.isCanceled).to.be.true;\n expect(worker.isSkipped).to.be.false;\n expect(worker.wasExecuted).to.be.true;\n });\n\n it(\"throws\", async () => {\n const worker = new Worker();\n worker.setThrow();\n worker.queue();\n await assert.isRejected(worker.promise!, \"throw\");\n expect(worker.isCanceled).to.be.false;\n expect(worker.isError).to.be.true;\n });\n\n it(\"cancels all workers before iModel is closed\", async () => {\n const resolve = new Worker();\n resolve.setReady();\n const reject = new Worker();\n reject.setThrow();\n\n // These 6 workers will never resolve nor reject explicitly.\n const cancel = [new Worker(), new Worker(), new Worker(), new Worker(), new Worker(), new Worker()];\n\n // Queue up all the workers.\n const workers = cancel.concat([resolve, reject]);\n for (const worker of workers)\n worker.queue();\n\n // Closing the iModel cancels all extant workers.\n imodel.close();\n openIModel();\n\n await expect(Promise.all(workers.map(async (x) => x.promise))).rejectedWith(\"canceled\");\n\n expect(cancel.every((x) => x.isCanceled)).to.be.true;\n expect(cancel.every((x) => x.isAborted || x.isSkipped)).to.be.true;\n expect(resolve.isOk || resolve.isSkipped || resolve.isAborted).to.be.true;\n expect(reject.isError || reject.isSkipped).to.be.true;\n });\n\n it(\"cancels a snap request\", async () => {\n // Block the worker thread pool with 4 workers so that our snap cannot complete before they complete.\n const blockers = [new Worker(), new Worker(), new Worker(), new Worker()];\n blockers.forEach((w) => w.queue());\n\n const sessionId = \"0x222\";\n const snap = imodel.requestSnap(sessionId, {\n testPoint: { x: 1, y: 2, z: 3 },\n closePoint: { x: 1, y: 2, z: 3 },\n id: \"0x111\",\n worldToView: Matrix4d.createIdentity().toJSON(),\n });\n\n const toBeRejected = expect(snap).to.be.rejectedWith(\"aborted\");\n imodel.cancelSnap(sessionId);\n\n // Clear the worker thread pool so the snap request (now canceled) can be processed.\n blockers.forEach((w) => w.setReady());\n await Promise.all(blockers.map(async (w) => w.promise));\n\n await toBeRejected;\n });\n});\n"]}
1
+ {"version":3,"file":"DgnDbWorker.test.js","sourceRoot":"","sources":["../../../../src/test/native/DgnDbWorker.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\n\r\nimport { assert, expect } from \"chai\";\r\nimport { BeDuration } from \"@itwin/core-bentley\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { IModelNative } from \"../../internal/NativePlatform\";\r\nimport { StandaloneDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { _nativeDb } from \"../../internal/Symbols\";\r\n\r\ndescribe(\"DgnDbWorker\", () => {\r\n let imodel: StandaloneDb;\r\n\r\n function openIModel(): void {\r\n const rootSubject = { name: \"DgnDbWorker tests\", description: \"DgnDbWorker tests\" };\r\n imodel = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DgnDbWorker\", \"DgnDbWorker.bim\"), { rootSubject });\r\n }\r\n\r\n before(() => {\r\n openIModel();\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n class Worker {\r\n public promise: Promise<void> | undefined;\r\n private readonly _worker: IModelJsNative.TestWorker;\r\n\r\n public constructor() {\r\n this._worker = new IModelNative.platform.TestWorker(imodel[_nativeDb]);\r\n }\r\n\r\n public queue() { this.promise = this._worker.queue(); }\r\n public cancel() { this._worker.cancel(); }\r\n public setReady() { this._worker.setReady(); }\r\n public setThrow() { this._worker.setThrow(); }\r\n\r\n public get isCanceled(): boolean { return this._worker.isCanceled(); }\r\n public get wasExecuted(): boolean { return this._worker.wasExecuted(); }\r\n public get state(): IModelJsNative.TestWorkerState { return this._worker.getState(); }\r\n\r\n public get wasQueued() { return IModelJsNative.TestWorkerState.NotQueued !== this.state; }\r\n public get isQueued() { return IModelJsNative.TestWorkerState.Queued === this.state; }\r\n public get isRunning() { return IModelJsNative.TestWorkerState.Running === this.state; }\r\n public get isError() { return IModelJsNative.TestWorkerState.Error === this.state; }\r\n public get isOk() { return IModelJsNative.TestWorkerState.Ok === this.state; }\r\n public get isSkipped() { return IModelJsNative.TestWorkerState.Skipped === this.state; }\r\n public get isAborted() { return IModelJsNative.TestWorkerState.Aborted === this.state; }\r\n }\r\n\r\n async function waitUntil(condition: () => boolean): Promise<void> {\r\n if (condition())\r\n return;\r\n\r\n await new Promise<void>((resolve: any) => setTimeout(resolve, 100));\r\n return waitUntil(condition);\r\n }\r\n\r\n it(\"executes asynchronously\", async () => {\r\n const worker = new Worker();\r\n await BeDuration.wait(1000);\r\n expect(worker.wasQueued).to.be.false;\r\n expect(worker.isCanceled).to.be.false;\r\n\r\n worker.queue();\r\n expect(worker.isQueued || worker.isRunning).to.be.true;\r\n\r\n worker.setReady();\r\n await worker.promise;\r\n\r\n expect(worker.wasExecuted).to.be.true;\r\n expect(worker.isCanceled).to.be.false;\r\n expect(worker.isOk).to.be.true;\r\n });\r\n\r\n it(\"executes a maximum of 4 simultaneously\", async () => {\r\n // Create 4 workers. They should all start executing.\r\n const first = [new Worker(), new Worker(), new Worker(), new Worker()];\r\n for (const worker of first)\r\n worker.queue();\r\n\r\n await waitUntil(() => first.every((x) => x.isRunning));\r\n\r\n // Queue up 2 more workers. They should not start executing until at least one of the first 4 resolves.\r\n const next = [new Worker(), new Worker()];\r\n for (const worker of next)\r\n worker.queue();\r\n\r\n await BeDuration.wait(1000);\r\n expect(first.every((x) => x.isRunning)).to.be.true;\r\n expect(next.every((x) => x.isQueued)).to.be.true;\r\n\r\n // Let the first worker resolve.\r\n first[0].setReady();\r\n await first[0].promise;\r\n expect(first[0].isOk).to.be.true;\r\n\r\n // Exactly one of the 2 workers remaining in the queue should start executing.\r\n await waitUntil(() => next.some((x) => x.isRunning));\r\n await BeDuration.wait(1000);\r\n expect(next.every((x) => x.isRunning)).to.be.false;\r\n\r\n // Clear the queue.\r\n const workers = first.concat(next);\r\n for (const worker of workers)\r\n worker.setReady();\r\n\r\n await Promise.all(workers.map((x) => x.promise)); // eslint-disable-line @typescript-eslint/promise-function-async\r\n expect(workers.every((x) => x.isOk)).to.be.true;\r\n });\r\n\r\n it(\"skips execution if canceled before execution begins\", async () => {\r\n const worker = new Worker();\r\n worker.cancel();\r\n expect(worker.isCanceled).to.be.true;\r\n worker.queue();\r\n await assert.isRejected(worker.promise!, \"canceled\");\r\n expect(worker.isSkipped).to.be.true;\r\n expect(worker.wasExecuted).to.be.false;\r\n });\r\n\r\n it(\"executes if canceled after execution begins\", async () => {\r\n const worker = new Worker();\r\n worker.queue();\r\n await waitUntil(() => worker.isRunning);\r\n worker.cancel();\r\n worker.setReady();\r\n await worker.promise;\r\n expect(worker.isCanceled).to.be.true;\r\n expect(worker.isSkipped).to.be.false;\r\n expect(worker.wasExecuted).to.be.true;\r\n });\r\n\r\n it(\"throws\", async () => {\r\n const worker = new Worker();\r\n worker.setThrow();\r\n worker.queue();\r\n await assert.isRejected(worker.promise!, \"throw\");\r\n expect(worker.isCanceled).to.be.false;\r\n expect(worker.isError).to.be.true;\r\n });\r\n\r\n it(\"cancels all workers before iModel is closed\", async () => {\r\n const resolve = new Worker();\r\n resolve.setReady();\r\n const reject = new Worker();\r\n reject.setThrow();\r\n\r\n // These 6 workers will never resolve nor reject explicitly.\r\n const cancel = [new Worker(), new Worker(), new Worker(), new Worker(), new Worker(), new Worker()];\r\n\r\n // Queue up all the workers.\r\n const workers = cancel.concat([resolve, reject]);\r\n for (const worker of workers)\r\n worker.queue();\r\n\r\n // Closing the iModel cancels all extant workers.\r\n imodel.close();\r\n openIModel();\r\n\r\n await expect(Promise.all(workers.map(async (x) => x.promise))).rejectedWith(\"canceled\");\r\n\r\n expect(cancel.every((x) => x.isCanceled)).to.be.true;\r\n expect(cancel.every((x) => x.isAborted || x.isSkipped)).to.be.true;\r\n expect(resolve.isOk || resolve.isSkipped || resolve.isAborted).to.be.true;\r\n expect(reject.isError || reject.isSkipped).to.be.true;\r\n });\r\n\r\n it(\"cancels a snap request\", async () => {\r\n // Block the worker thread pool with 4 workers so that our snap cannot complete before they complete.\r\n const blockers = [new Worker(), new Worker(), new Worker(), new Worker()];\r\n blockers.forEach((w) => w.queue());\r\n\r\n const sessionId = \"0x222\";\r\n const snap = imodel.requestSnap(sessionId, {\r\n testPoint: { x: 1, y: 2, z: 3 },\r\n closePoint: { x: 1, y: 2, z: 3 },\r\n id: \"0x111\",\r\n worldToView: Matrix4d.createIdentity().toJSON(),\r\n });\r\n\r\n const toBeRejected = expect(snap).to.be.rejectedWith(\"aborted\");\r\n imodel.cancelSnap(sessionId);\r\n\r\n // Clear the worker thread pool so the snap request (now canceled) can be processed.\r\n blockers.forEach((w) => w.setReady());\r\n await Promise.all(blockers.map(async (w) => w.promise));\r\n\r\n await toBeRejected;\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"response.test.js","sourceRoot":"","sources":["../../../../src/test/rpc/response.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\nimport { SinonStub, stub } from \"sinon\";\nimport { Readable, Writable } from \"stream\";\nimport { HttpServerRequest, HttpServerResponse, RpcRequestFulfillment, RpcRequestStatus, SerializedRpcRequest, WebAppRpcProtocol } from \"@itwin/core-common\";\nimport { sendResponse } from \"../../rpc/web/response\";\nimport { brotliDecompressSync, unzipSync } from \"node:zlib\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\nclass StubResponse extends Writable implements HttpServerResponse {\n public chunks: any[] = [];\n public get buffer(): Buffer { return Buffer.concat(this.chunks); }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public override _write(chunk: any, _encoding: BufferEncoding, callback: VoidFunction): void {\n this.chunks.push(chunk);\n callback();\n }\n\n public send: SinonStub<any[], HttpServerResponse> = stub().returns(this);\n public status: SinonStub<[number], HttpServerResponse> = stub();\n public set: SinonStub<[string, string], void> = stub();\n}\n\ndescribe(\"sendResponse\", () => {\n let protocol: WebAppRpcProtocol;\n let request: SerializedRpcRequest;\n let fulfillment: RpcRequestFulfillment;\n let req: HttpServerRequest;\n let res: StubResponse;\n\n beforeEach(() => {\n protocol = { getStatus: () => RpcRequestStatus.Resolved } as any;\n request = { operation: { operationName: \"fake-RPC-operation\" } } as any;\n fulfillment = {\n allowCompression: true,\n status: 200,\n result: {\n data: [],\n },\n } as any;\n req = { header: () => \"gzip, deflate, br\" } as any;\n res = new StubResponse();\n });\n\n it(\"should compress response using Brotli\", async () => {\n // Arrange\n const originalData = generateJson();\n const originalDataSize = Buffer.byteLength(originalData);\n fulfillment.result.objects = originalData;\n\n // Act\n await sendResponse(protocol, request, fulfillment, req, res);\n\n // Assert\n expect(res.set.calledWithExactly(\"Content-Encoding\", \"br\")).to.be.true;\n\n const compressedData = res.send.getCall(0).args[0];\n expect(compressedData).to.not.be.undefined;\n expect(compressedData.length).to.be.lessThan(originalDataSize);\n expect(brotliDecompressSync(compressedData).toString()).to.be.equal(originalData);\n });\n\n it(\"should compress response using Gzip if Brotli is not supported\", async () => {\n // Arrange\n const originalData = generateJson();\n const originalDataSize = Buffer.byteLength(originalData);\n fulfillment.result.objects = originalData;\n req.header = () => \"gzip, deflate\";\n\n // Act\n await sendResponse(protocol, request, fulfillment, req, res);\n\n // Assert\n expect(res.set.calledWithExactly(\"Content-Encoding\", \"gzip\")).to.be.true;\n\n const compressedData = res.send.getCall(0).args[0];\n expect(compressedData).to.not.be.undefined;\n expect(compressedData.length).to.be.lessThan(originalDataSize);\n expect(unzipSync(compressedData).toString()).to.be.equal(originalData);\n });\n\n it(\"should not compress if Brotli and Gzip is not supported\", async () => {\n // Arrange\n const originalData = generateJson();\n fulfillment.result.objects = originalData;\n req.header = () => undefined;\n\n // Act\n await sendResponse(protocol, request, fulfillment, req, res);\n\n // Assert\n expect(res.set.calledWithMatch(\"Content-Encoding\")).to.be.false;\n\n expect(res.send.getCall(0).args[0]).to.be.equal(originalData);\n });\n\n it(\"should compress stream\", async () => {\n // Arrange\n const originalData = generateJson();\n const originalDataSize = Buffer.byteLength(originalData);\n fulfillment.result.stream = Readable.from(originalData);\n\n // Act\n await sendResponse(protocol, request, fulfillment, req, res);\n await new Promise((resolve) => res.on(\"finish\", resolve));\n\n // Assert\n const compressedData = res.buffer;\n expect(compressedData).to.not.be.undefined;\n expect(compressedData.length).to.be.lessThan(originalDataSize);\n expect(brotliDecompressSync(compressedData).toString()).to.be.equal(originalData);\n });\n\n it(\"should support Accept-Encoding header value format without spaces between values\", async () => {\n // Arrange\n fulfillment.result.objects = generateJson();\n req.header = () => \"gzip,deflate,br,zstd\";\n\n // Act\n await sendResponse(protocol, request, fulfillment, req, res);\n\n // Assert\n expect(res.set.calledWithExactly(\"Content-Encoding\", \"br\")).to.be.true;\n });\n});\n\nfunction generateJson(minimumSize = 2000): string {\n let propertyIdx = 0;\n const obj = {} as any;\n\n while (JSON.stringify(obj).length < minimumSize) {\n obj[`property-${propertyIdx}`] = `value-${propertyIdx}`;\n propertyIdx++;\n }\n\n return JSON.stringify(obj);\n}\n"]}
1
+ {"version":3,"file":"response.test.js","sourceRoot":"","sources":["../../../../src/test/rpc/response.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\r\nimport { SinonStub, stub } from \"sinon\";\r\nimport { Readable, Writable } from \"stream\";\r\nimport { HttpServerRequest, HttpServerResponse, RpcRequestFulfillment, RpcRequestStatus, SerializedRpcRequest, WebAppRpcProtocol } from \"@itwin/core-common\";\r\nimport { sendResponse } from \"../../rpc/web/response\";\r\nimport { brotliDecompressSync, unzipSync } from \"node:zlib\";\r\n\r\n/* eslint-disable @typescript-eslint/no-deprecated */\r\n\r\nclass StubResponse extends Writable implements HttpServerResponse {\r\n public chunks: any[] = [];\r\n public get buffer(): Buffer { return Buffer.concat(this.chunks); }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override _write(chunk: any, _encoding: BufferEncoding, callback: VoidFunction): void {\r\n this.chunks.push(chunk);\r\n callback();\r\n }\r\n\r\n public send: SinonStub<any[], HttpServerResponse> = stub().returns(this);\r\n public status: SinonStub<[number], HttpServerResponse> = stub();\r\n public set: SinonStub<[string, string], void> = stub();\r\n}\r\n\r\ndescribe(\"sendResponse\", () => {\r\n let protocol: WebAppRpcProtocol;\r\n let request: SerializedRpcRequest;\r\n let fulfillment: RpcRequestFulfillment;\r\n let req: HttpServerRequest;\r\n let res: StubResponse;\r\n\r\n beforeEach(() => {\r\n protocol = { getStatus: () => RpcRequestStatus.Resolved } as any;\r\n request = { operation: { operationName: \"fake-RPC-operation\" } } as any;\r\n fulfillment = {\r\n allowCompression: true,\r\n status: 200,\r\n result: {\r\n data: [],\r\n },\r\n } as any;\r\n req = { header: () => \"gzip, deflate, br\" } as any;\r\n res = new StubResponse();\r\n });\r\n\r\n it(\"should compress response using Brotli\", async () => {\r\n // Arrange\r\n const originalData = generateJson();\r\n const originalDataSize = Buffer.byteLength(originalData);\r\n fulfillment.result.objects = originalData;\r\n\r\n // Act\r\n await sendResponse(protocol, request, fulfillment, req, res);\r\n\r\n // Assert\r\n expect(res.set.calledWithExactly(\"Content-Encoding\", \"br\")).to.be.true;\r\n\r\n const compressedData = res.send.getCall(0).args[0];\r\n expect(compressedData).to.not.be.undefined;\r\n expect(compressedData.length).to.be.lessThan(originalDataSize);\r\n expect(brotliDecompressSync(compressedData).toString()).to.be.equal(originalData);\r\n });\r\n\r\n it(\"should compress response using Gzip if Brotli is not supported\", async () => {\r\n // Arrange\r\n const originalData = generateJson();\r\n const originalDataSize = Buffer.byteLength(originalData);\r\n fulfillment.result.objects = originalData;\r\n req.header = () => \"gzip, deflate\";\r\n\r\n // Act\r\n await sendResponse(protocol, request, fulfillment, req, res);\r\n\r\n // Assert\r\n expect(res.set.calledWithExactly(\"Content-Encoding\", \"gzip\")).to.be.true;\r\n\r\n const compressedData = res.send.getCall(0).args[0];\r\n expect(compressedData).to.not.be.undefined;\r\n expect(compressedData.length).to.be.lessThan(originalDataSize);\r\n expect(unzipSync(compressedData).toString()).to.be.equal(originalData);\r\n });\r\n\r\n it(\"should not compress if Brotli and Gzip is not supported\", async () => {\r\n // Arrange\r\n const originalData = generateJson();\r\n fulfillment.result.objects = originalData;\r\n req.header = () => undefined;\r\n\r\n // Act\r\n await sendResponse(protocol, request, fulfillment, req, res);\r\n\r\n // Assert\r\n expect(res.set.calledWithMatch(\"Content-Encoding\")).to.be.false;\r\n\r\n expect(res.send.getCall(0).args[0]).to.be.equal(originalData);\r\n });\r\n\r\n it(\"should compress stream\", async () => {\r\n // Arrange\r\n const originalData = generateJson();\r\n const originalDataSize = Buffer.byteLength(originalData);\r\n fulfillment.result.stream = Readable.from(originalData);\r\n\r\n // Act\r\n await sendResponse(protocol, request, fulfillment, req, res);\r\n await new Promise((resolve) => res.on(\"finish\", resolve));\r\n\r\n // Assert\r\n const compressedData = res.buffer;\r\n expect(compressedData).to.not.be.undefined;\r\n expect(compressedData.length).to.be.lessThan(originalDataSize);\r\n expect(brotliDecompressSync(compressedData).toString()).to.be.equal(originalData);\r\n });\r\n\r\n it(\"should support Accept-Encoding header value format without spaces between values\", async () => {\r\n // Arrange\r\n fulfillment.result.objects = generateJson();\r\n req.header = () => \"gzip,deflate,br,zstd\";\r\n\r\n // Act\r\n await sendResponse(protocol, request, fulfillment, req, res);\r\n\r\n // Assert\r\n expect(res.set.calledWithExactly(\"Content-Encoding\", \"br\")).to.be.true;\r\n });\r\n});\r\n\r\nfunction generateJson(minimumSize = 2000): string {\r\n let propertyIdx = 0;\r\n const obj = {} as any;\r\n\r\n while (JSON.stringify(obj).length < minimumSize) {\r\n obj[`property-${propertyIdx}`] = `value-${propertyIdx}`;\r\n propertyIdx++;\r\n }\r\n\r\n return JSON.stringify(obj);\r\n}\r\n"]}
@@ -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
  });
@@ -635,36 +635,36 @@ describe("Global state of ClassRegistry", () => {
635
635
  });
636
636
  it("registering a class in different imodels should not affect each other", async () => {
637
637
  await imodel1.importSchemaStrings([
638
- `<?xml version="1.0" encoding="UTF-8"?>
639
- <ECSchema schemaName="TestSchema" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
640
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
641
-
642
- <ECEntityClass typeName="TestClass">
643
- <BaseClass>bis:PhysicalElement</BaseClass>
644
- <ECProperty propertyName="foo" typeName="string"/>
645
- <ECNavigationProperty propertyName="RelatedTestClass" relationshipName="MyRelationship" direction="backward"/>
646
- </ECEntityClass>
647
-
648
- <ECRelationshipClass typeName="MyRelationship" modifier="None" strength="embedding">
649
- <Source multiplicity="(0..1)" roleLabel="has" polymorphic="false">
650
- <Class class="TestClass"/>
651
- </Source>
652
- <Target multiplicity="(0..*)" roleLabel="has" polymorphic="false">
653
- <Class class="TestClass"/>
654
- </Target>
655
- </ECRelationshipClass>
656
- </ECSchema>
638
+ `<?xml version="1.0" encoding="UTF-8"?>
639
+ <ECSchema schemaName="TestSchema" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
640
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
641
+
642
+ <ECEntityClass typeName="TestClass">
643
+ <BaseClass>bis:PhysicalElement</BaseClass>
644
+ <ECProperty propertyName="foo" typeName="string"/>
645
+ <ECNavigationProperty propertyName="RelatedTestClass" relationshipName="MyRelationship" direction="backward"/>
646
+ </ECEntityClass>
647
+
648
+ <ECRelationshipClass typeName="MyRelationship" modifier="None" strength="embedding">
649
+ <Source multiplicity="(0..1)" roleLabel="has" polymorphic="false">
650
+ <Class class="TestClass"/>
651
+ </Source>
652
+ <Target multiplicity="(0..*)" roleLabel="has" polymorphic="false">
653
+ <Class class="TestClass"/>
654
+ </Target>
655
+ </ECRelationshipClass>
656
+ </ECSchema>
657
657
  `,
658
658
  ]);
659
659
  await imodel2.importSchemaStrings([
660
- `<?xml version="1.0" encoding="UTF-8"?>
661
- <ECSchema schemaName="TestSchema" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
662
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
663
- <ECEntityClass typeName="TestClass">
664
- <BaseClass>bis:PhysicalElement</BaseClass>
665
- <ECProperty propertyName="bar" typeName="string"/>
666
- </ECEntityClass>
667
- </ECSchema>
660
+ `<?xml version="1.0" encoding="UTF-8"?>
661
+ <ECSchema schemaName="TestSchema" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
662
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
663
+ <ECEntityClass typeName="TestClass">
664
+ <BaseClass>bis:PhysicalElement</BaseClass>
665
+ <ECProperty propertyName="bar" typeName="string"/>
666
+ </ECEntityClass>
667
+ </ECSchema>
668
668
  `,
669
669
  ]);
670
670
  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":["/*---------------------------------------------------------------------------------------------\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, 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 } 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 // 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"]}
1
+ {"version":3,"file":"ClassRegistry.test.js","sourceRoot":"","sources":["../../../../src/test/schema/ClassRegistry.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EACL,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAA0B,SAAS,EAEzE,cAAc,EAA0C,WAAW,GACpE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAS,cAAc,EAC1H,MAAM,EAAc,qBAAqB,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,GACnF,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAyC,MAAM,0BAA0B,CAAC;AAE9F,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,MAAkB,CAAC;IAEvB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;QACjG,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,EAAE,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAExB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACpE,yDAAyD;YACzD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAChF,0CAA0C;YAC1C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACpF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACzE,sFAAsF;YACtF,MAAM,sBAAsB,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAsB,CAAC;YACjG,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAExB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACrE,gEAAgE;YAChE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACvF,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7F,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAuB,CAAC;YAChG,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gDAAgD,CAAC,CAAC;QACnH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAC1F,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAExF,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC/G,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAElC,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAEtG,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAEvE,6EAA6E;QAC7E,yCAAyC;QACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,4DAA4D;QAC5D,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,4BAA4B,EAAE,IAAI,EAAE,CAAC,QAAgB,EAAE,SAA2B,EAAE,EAAE;YACrH,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9C,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAkB,EAAE,EAAE;YAC1D,OAAO,UAAU,KAAK,mBAAmB,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,IAAI,MAAoB,CAAC;IAEzB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;QAC/F,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAEhD,MAAM,WAAW,GAAgB,YAAY,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAClF,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAChE,YAAY,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAEpD,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,MAAM,CAAC,mBAAmB,CAAC;YAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CC;SACF,CAAC,CAAC,CAAC,0CAA0C;IAChD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,EAAE,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,KAAK,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI;YACtC,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;YAC3C,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;YAC9C,CAAC,sCAAsC,EAAE,uBAAuB,CAAC;YACjE,CAAC,yCAAyC,EAAE,uBAAuB,CAAC;YACpE,CAAC,mCAAmC,EAAE,iBAAiB,CAAC;YACxD,CAAC,mCAAmC,EAAE,iBAAiB,CAAC;SAChD,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAI,MAAkB,CAAC;IACvB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;IAEpG,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;QAChG,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,0CAA0C;IAC1F,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,EAAE,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IA8BH,MAAM,oBAAqB,SAAQ,MAAM;QAChC,MAAM,KAAc,UAAU,KAAa,OAAO,sBAAsB,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,OAAO;YACvB,OAAO,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvJ,CAAC;QACM,MAAM,CAAC,cAAc;YAC1B,IAAI,IAAI,KAAK,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1D,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1C,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC7B,gEAAgE;gBAChE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAEM,MAAM,CAAC,gBAAgB;YAC5B,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;KACF;IAED,MAAM,sBAAuB,SAAQ,iBAAiB;QAC7C,MAAM,KAAc,SAAS,KAAK,OAAO,wBAAwB,CAAC,CAAC,CAAC;QACpE,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;QAC9C,OAAO,CAAiB;QAC/B,YAAmB,KAAkC,EAAE,QAAkB;YACvE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;;IAGH,MAAM,oBAAqB,SAAQ,eAAe;QACzC,MAAM,KAAc,SAAS,KAAK,OAAO,sBAAsB,CAAC,CAAC,CAAC;QAClE,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;QAC9C,WAAW,CAAiB;QAC5B,aAAa,CAAiB;QAC9B,UAAU,CAAiB;QAClC,YAAmB,KAAgC,EAAE,QAAkB;YACrE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACzD,IAAI,CAAC,aAAa,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzD,CAAC;;IAGH,MAAM,uBAAwB,SAAQ,uBAAuB;QACpD,MAAM,KAAc,SAAS,KAAK,OAAO,yBAAyB,CAAC,CAAC,CAAC;QACrE,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;QAC9C,WAAW,CAAiB;QAC5B,aAAa,CAAiB;QAC9B,YAAY,CAAiB;QACpC,YAAmB,KAAmC,EAAE,QAAkB;YACxE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACzD,IAAI,CAAC,aAAa,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,CAAC,YAAY,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7D,CAAC;;IAGH,MAAM,kBAAmB,SAAQ,sBAAsB;QAC9C,MAAM,KAAc,SAAS,KAAK,OAAO,oBAAoB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;QAC9C,cAAc,CAAiB;QACtC,YAAmB,KAA8B,EAAE,QAAkB;YACnE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACjE,CAAC;;IAGH,MAAM,QAAS,SAAQ,kBAAkB;QAChC,MAAM,KAAc,SAAS,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC;KAC9D;IACD,MAAM,QAAS,SAAQ,QAAQ;QACtB,MAAM,KAAc,SAAS,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC;KAC9D;IACD,MAAM,QAAS,SAAQ,QAAQ;QACtB,MAAM,KAAc,SAAS,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC;KAC9D;IACD,MAAM,QAAS,SAAQ,QAAQ;QACtB,MAAM,KAAc,SAAS,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC;KAC9D;IACD,MAAM,QAAS,SAAQ,QAAQ;QACtB,MAAM,KAAc,SAAS,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC;KAC9D;IAED,iGAAiG;IACjG,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAExF,MAAM,+BAAgC,SAAQ,MAAM,CAAC,UAAU,CAAiB,6CAA6C,CAAC;YAC5H,YAAY,KAAkC;gBAC5C,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvB,CAAC;SACF;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YACjD,aAAa,EAAE,iCAAiC;YAChD,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACN,CAAC,CAAC;QAEtB,MAAM,eAAe,GAAG,IAAI,+BAA+B,CAAC;YAC1D,aAAa,EAAE,6CAA6C;YAC5D,OAAO,EAAE;gBACP,EAAE,EAAE,YAAY;gBAChB,YAAY,EAAE,8BAA8B;aAC7C;SAC6B,CAAC,CAAC;QAElC,2DAA2D;QAC3D,MAAM,CAAC,SAAS,CAAC,+BAA+B,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACnF,MAAM,CACJ,CAAC,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC,CACvC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAChB,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;YACjF,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACxF,gBAAgB,CAAC,cAAc,CAAC,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC;SAC3E,CAAC,CAAC;QAEH,gEAAgE;QAChE,MAAM,8BAA8B,GAAG,MAAM,CAAC,UAAU,CAAC,4CAA4C,CAAC,CAAC;QACvG,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,mHAAmH;QACnH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAExF,MAAM,+BAAgC,SAAQ,MAAM,CAAC,UAAU,CAAiB,6CAA6C,CAAC;YAC5H,YAAY,KAAmB;gBAC7B,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvB,CAAC;SACF;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YACjD,aAAa,EAAE,iCAAiC;YAChD,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACN,CAAC,CAAC;QAEtB,MAAM,eAAe,GAAG,IAAI,+BAA+B,CAAC;YAC1D,aAAa,EAAE,6CAA6C;YAC5D,OAAO,EAAE,IAAI,cAAc,CAAC;gBAC1B,EAAE,EAAE,YAAY;gBAChB,YAAY,EAAE,8BAA8B;aAC7C,CAAC;YACF,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,IAAI,CAAC;gBACb,KAAK,EAAE,QAAQ,CAAC,aAAa;gBAC7B,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,EAAE;gBAChE,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,EAAE,IAAI,cAAc,CAAC;gBACzB,yFAAyF;gBACzF,EAAE,EAAE,YAAY;gBAChB,YAAY,EAAE,kCAAkC;aACjD,CAAC;SAC4B,CAAC,CAAC;QAElC,8FAA8F;QAC9F,MAAM,CACJ,CAAC,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC,CACvC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAChB,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;YACjF,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACxF,eAAe,CAAC,MAAM,IAAI,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,EAAE,mBAAmB,CAAC,OAAO,CAAC;YAClH,gBAAgB,CAAC,cAAc,CAAC,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC;SAC3E,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;QAElC,MAAM,kBAAkB,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YACtG,aAAa,EAAE,iCAAiC;YAChD,IAAI,EAAE,eAAe,KAAK,EAAE;YAC5B,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACN,CAAC,CAAC,CAAC;QAEvB,gEAAgE;QAChE,MAAM,8BAA8B,GAAG,MAAM,CAAC,UAAU,CAAC,4CAA4C,CAAC,CAAC;QAEvG,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;YACvD,aAAa,EAAE,8BAA8B,CAAC,aAAa;YAC3D,OAAO,EAAE,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,iCAAiC,EAAE;YACvF,OAAO,EAAE,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE;SACd,CAAC,CAAC;QAE5B,MAAM,6BAA8B,SAAQ,MAAM,CAAC,UAAU,CAAe,2CAA2C,CAAC;YACtH,YAAY,KAAgC;gBAC1C,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvB,CAAC;SACF;QAED,MAAM,gBAAgB,GAAG,IAAI,6BAA6B,CAAC;YACzD,aAAa,EAAE,6BAA6B,CAAC,aAAa;YAC1D,cAAc,EAAE,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE;YAC7C,WAAW,EAAE,QAAQ,CAAC,YAAY;YAClC,WAAW,EAAE,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,wCAAwC,EAAE;YAClG,aAAa,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,0CAA0C,EAAE;YACpG,uBAAuB;YACvB,+FAA+F;SACnE,CAAC,CAAC;QAEhC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAErD,MAAM,CACJ,CAAC,GAAG,gBAAgB,CAAC,eAAe,EAAE,CAAC,CACxC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAChB,gBAAgB,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACnF,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC;YACjF,gBAAgB,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACnF,gBAAgB,CAAC,cAAc,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,aAAa,CAAC;YACvF,2GAA2G;YAC3G,uFAAuF;SACxF,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;QAElC,MAAM,gBAAgB,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YACpG,aAAa,EAAE,iCAAiC;YAChD,IAAI,EAAE,aAAa,KAAK,EAAE;YAC1B,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACN,CAAC,CAAC,CAAC;QAEvB,gEAAgE;QAChE,MAAM,gCAAgC,GAAG,MAAM,CAAC,UAAU,CAAiC,8CAA8C,CAAC,CAAC;QAE3I,MAAM,cAAc,GAAG,IAAI,gCAAgC,CAAC;YAC1D,aAAa,EAAE,gCAAgC,CAAC,aAAa;YAC7D,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;YAC7B,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;YAC7B,WAAW,EAAE;gBACX,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBACvB,YAAY,EAAE,+CAA+C;aAC9D;YACD,YAAY,EAAE;gBACZ,EAAE,EAAE,kBAAkB;gBACtB,YAAY,EAAE,gDAAgD;aAC/D;YACD,aAAa,EAAE;gBACb,EAAE,EAAE,mBAAmB;gBACvB,YAAY,EAAE,iDAAiD;aAChE;SACF,EAAE,MAAM,CAAC,CAAC;QAEX,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;QAElD,MAAM,CACJ,CAAC,GAAG,cAAc,CAAC,eAAe,EAAE,CAAC,CACtC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAChB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACjG,gBAAgB,CAAC,cAAc,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,KAAK,CAAC;YAC9E,gBAAgB,CAAC,cAAc,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,aAAa,CAAC;SACxF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;QAC9C,MAAM,wBAAyB,SAAQ,sBAAsB;YAC3C,mBAAmB,CAAC,YAAgC;gBAClE,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBACxC,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YAC/C,CAAC;SACF;QACD,MAAM,sBAAuB,SAAQ,oBAAoB;YAChD,MAAM,KAAc,OAAO;gBAChC,OAAO,CAAC,wBAAwB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACtF,CAAC;SACF;QACD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,sBAAsB,CAAC,cAAc,EAAE,CAAC;QAExC,gEAAgE;QAChE,MAAM,4BAA4B,GAAG,MAAM,CAAC,UAAU,CAAkC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAE9H,MAAM,0CAA0C,GAAG,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAE5H,MAAM,wBAAyB,SAAQ,MAAM,CAAC,UAAU,CAAiB,kBAAkB,CAAC,aAAa,CAAC;YACxG,YAAY,KAA8B;gBACxC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvB,CAAC;SACF;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,aAAa,EAAE,iCAAiC;YAChD,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACN,CAAC,CAAC;QAEtB,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,aAAa,EAAE,iCAAiC;YAChD,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACN,CAAC,CAAC;QAEtB,MAAM,eAAe,GAAG,IAAI,4BAA4B,CAAC;YACvD,aAAa,EAAE,sBAAsB,CAAC,aAAa;YACnD,OAAO,EAAE;gBACP,EAAE,EAAE,aAAa;gBACjB,YAAY,EAAE,8BAA8B;aAC7C;SAC6B,EAAE,MAAM,CAAC,CAAC;QAE1C,6DAA6D;QAC7D,MAAM,CAAC,SAAS,CAAC,4BAA4B,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC7E,MAAM,CACJ,CAAC,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC,CACvC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAChB,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;YACjF,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACxF,eAAe,CAAC,MAAM,IAAI,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,EAAE,mBAAmB,CAAC,OAAO,CAAC;YAClH,gBAAgB,CAAC,cAAc,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,OAAO,CAAC;SAClF,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;QAElC,MAAM,CAAC,0CAA0C,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrE,0CAA0C,CAAC,YAAY,EAAE,CAAC;QAE1D,MAAM,sBAAsB,GAAG,IAAI,wBAAwB,CAAC;YAC1D,aAAa,EAAE,kBAAkB,CAAC,aAAa;YAC/C,OAAO,EAAE;gBACP,EAAE,EAAE,aAAa;gBACjB,YAAY,EAAE,8BAA8B;aAC7C;YACD,cAAc,EAAE;gBACd,EAAE,EAAE,aAAa;gBACjB,YAAY,EAAE,qCAAqC;aACpD;SACyB,CAAC,CAAC;QAE9B,2DAA2D;QAC3D,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC5E,uHAAuH;QACvH,MAAM,CACJ,CAAC,GAAG,sBAAsB,CAAC,eAAe,EAAE,CAAC,CAC9C,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAChB,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;YACjF,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACxF,eAAe,CAAC,MAAM,IAAI,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,EAAE,mBAAmB,CAAC,OAAO,CAAC;YAClH,gBAAgB,CAAC,cAAc,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,OAAO,CAAC;SAClF,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;QAClC,gDAAgD;QAChD,+GAA+G;QAC/G,MAAM,CAAC,0CAA0C,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAErE,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,UAAW,SAAQ,QAAQ;YACf,mBAAmB,CAAC,YAAgC;gBAClE,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBACxC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;SACF;QACD,MAAM,UAAW,SAAQ,QAAQ;YACf,mBAAmB,CAAC,YAAgC;gBAClE,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBACxC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;SACF;QACD,MAAM,sBAAuB,SAAQ,oBAAoB;YAChD,MAAM,KAAc,OAAO;gBAChC,iCAAiC;gBACjC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAClC,CAAC;SACF;QACD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,sBAAsB,CAAC,cAAc,EAAE,CAAC;QAExC,yDAAyD;QACzD,MAAM,4BAA4B,GAAG,MAAM,CAAC,UAAU,CAAiB,6CAA6C,CAAC,CAAC;QACtH,MAAM,wBAAwB,GAAG,MAAM,CAAC,UAAU,CAAiB,yCAAyC,CAAC,CAAC;QAC9G,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAiB,+BAA+B,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAiB,+BAA+B,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAiB,+BAA+B,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAiB,+BAA+B,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAiB,+BAA+B,CAAC,CAAC;QAE1F,MAAM,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjE,MAAM,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7D,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEnD,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAE,CAAC,CAAC,CAAC,6BAA6B;QAC3H,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,mDAAmD;QAClI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,+DAA+D;QAC/I,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,mDAAmD;QAClI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,mEAAmE;QACnJ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,mEAAmE;QAEnJ,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,aAAa,EAAE,+BAA+B;YAC9C,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACN,CAAC,CAAC;QAEtB,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,aAAa,EAAE,iCAAiC;YAChD,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACN,CAAC,CAAC;QAEtB,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC/C,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,OAAO,EAAE;gBACP,EAAE,EAAE,aAAa;gBACjB,YAAY,EAAE,8BAA8B;aAC7C;YACD,cAAc,EAAE;gBACd,EAAE,EAAE,aAAa;gBACjB,YAAY,EAAE,qCAAqC;aACpD;SACyB,CAAC,CAAC;QAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAExD;;WAEG;QACH,SAAS,sBAAsB,CAAC,GAAmB;YACjD,IAAK,GAAG,CAAC,SAAiB,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;gBAC5D,OAAQ,GAAG,CAAC,SAAiB,CAAC,mBAAmB,CAAC;YACpD,CAAC;YACD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,qBAA4B,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,yBAAyB,GAAG,sBAAsB,CAAC,4BAA4B,CAAC,CAAC;QACvF,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,wBAAwB,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAE3D,wHAAwH;QACxH,0EAA0E;QAC1E,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CACrD;YACE,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;YAC1E,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACjF,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACvG,0GAA0G;YAC1G,gHAAgH;YAChH,4GAA4G;YAC5G,gBAAgB,CAAC,cAAc,CAAC,WAAW,EAAE,mBAAmB,CAAC,OAAO,CAAC;SAC1E,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CACjC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,6DAA6D;QACzG,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACrD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEjD,oCAAoC;QACpC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEvC,wCAAwC;QACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEtC,MAAM,CACJ,IAAI,GAAG,CACL;YACE,OAAO;YACP,4BAA4B;YAC5B,wBAAwB;YACxB,QAAQ;YACR,QAAQ,EAAE,8CAA8C;YACxD,QAAQ;YACR,QAAQ,EAAE,8CAA8C;YACxD,QAAQ,EAAE,8CAA8C;SACzD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CACjD,CACF,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACb,IAAI,GAAG,CACL;YACE,OAAO;YACP,4BAA4B;YAC5B,wBAAwB;YACxB,QAAQ;YACR,QAAQ;SACT,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CACjD,CACF,CAAC;QAEF,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;QAC1C,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI;IACD,MAAM,CAAC,cAAc,GAAW,MAAM,CAAC;IACvC,MAAM,KAAK,OAAO,KAAa,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;;AAG5E,MAAM,OAAQ,SAAQ,IAAI;CACzB;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,6DAA6D;QAC3G,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAW,kDAAkD;QAChG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAM,0CAA0C;QAC1F,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,4CAA4C;QAC7F,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,WAAmB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,kDAAkD;QAClH,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,WAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,4CAA4C;IAC3G,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAI,OAAmB,CAAC;IACxB,IAAI,OAAmB,CAAC;IAExB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,eAAe,CAAC,iBAAiB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAC7F,MAAM,aAAa,GAAG,eAAe,CAAC,iBAAiB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAC7F,OAAO,GAAG,eAAe,CAAC,sBAAsB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAC9E,OAAO,GAAG,eAAe,CAAC,sBAAsB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,OAAO,EAAE,KAAK,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,OAAO,CAAC,mBAAmB,CAAC;YAChC;;;;;;;;;;;;;;;;;;;OAmBC;SACF,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,mBAAmB,CAAC;YAChC;;;;;;;;OAQC;SACF,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC9D,UAAkB,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AAGL,CAAC,CAAC,CAAC;AACH,mDAAmD","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, 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 } 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 // 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"]}