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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChannelControl.js.map +1 -1
  14. package/lib/cjs/CheckpointManager.js.map +1 -1
  15. package/lib/cjs/ClassRegistry.js +5 -5
  16. package/lib/cjs/ClassRegistry.js.map +1 -1
  17. package/lib/cjs/CloudSqlite.js.map +1 -1
  18. package/lib/cjs/CodeService.js.map +1 -1
  19. package/lib/cjs/CodeSpecs.js.map +1 -1
  20. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  21. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  22. package/lib/cjs/DevTools.js.map +1 -1
  23. package/lib/cjs/DisplayStyle.js.map +1 -1
  24. package/lib/cjs/ECDb.js.map +1 -1
  25. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  26. package/lib/cjs/ECSqlStatement.js.map +1 -1
  27. package/lib/cjs/Element.js.map +1 -1
  28. package/lib/cjs/ElementAspect.js.map +1 -1
  29. package/lib/cjs/ElementGraphics.js.map +1 -1
  30. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  31. package/lib/cjs/Entity.js.map +1 -1
  32. package/lib/cjs/EntityReferences.js.map +1 -1
  33. package/lib/cjs/ExportGraphics.js.map +1 -1
  34. package/lib/cjs/ExternalSource.js.map +1 -1
  35. package/lib/cjs/FontFile.js.map +1 -1
  36. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  37. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  38. package/lib/cjs/GeometrySummary.js +47 -47
  39. package/lib/cjs/GeometrySummary.js.map +1 -1
  40. package/lib/cjs/IModelDb.js +8 -8
  41. package/lib/cjs/IModelDb.js.map +1 -1
  42. package/lib/cjs/IModelDbFonts.js.map +1 -1
  43. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  44. package/lib/cjs/IModelHost.js.map +1 -1
  45. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  46. package/lib/cjs/IModelJsFs.js.map +1 -1
  47. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  48. package/lib/cjs/IpcHost.js.map +1 -1
  49. package/lib/cjs/LineStyle.js.map +1 -1
  50. package/lib/cjs/LocalHub.js +1 -1
  51. package/lib/cjs/LocalHub.js.map +1 -1
  52. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  53. package/lib/cjs/LockControl.js.map +1 -1
  54. package/lib/cjs/Material.js.map +1 -1
  55. package/lib/cjs/Model.js.map +1 -1
  56. package/lib/cjs/NativeAppStorage.js.map +1 -1
  57. package/lib/cjs/NativeHost.js.map +1 -1
  58. package/lib/cjs/NavigationRelationship.js.map +1 -1
  59. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  60. package/lib/cjs/PropertyStore.js.map +1 -1
  61. package/lib/cjs/Relationship.js.map +1 -1
  62. package/lib/cjs/RpcBackend.js.map +1 -1
  63. package/lib/cjs/SQLiteDb.js.map +1 -1
  64. package/lib/cjs/Schema.js.map +1 -1
  65. package/lib/cjs/SchemaSync.js.map +1 -1
  66. package/lib/cjs/SchemaUtils.js.map +1 -1
  67. package/lib/cjs/SheetIndex.js.map +1 -1
  68. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  69. package/lib/cjs/SqliteStatement.js.map +1 -1
  70. package/lib/cjs/StashManager.js.map +1 -1
  71. package/lib/cjs/Texture.js.map +1 -1
  72. package/lib/cjs/TileStorage.js.map +1 -1
  73. package/lib/cjs/TxnManager.js.map +1 -1
  74. package/lib/cjs/ViewDefinition.js.map +1 -1
  75. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  76. package/lib/cjs/ViewStore.js.map +1 -1
  77. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  78. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  79. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  80. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  81. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  82. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  83. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  84. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  85. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  86. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  87. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  88. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  89. package/lib/cjs/core-backend.js.map +1 -1
  90. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  91. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  92. package/lib/cjs/domains/GenericElements.js.map +1 -1
  93. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  94. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  95. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  96. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  97. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  98. package/lib/cjs/internal/HubMock.js.map +1 -1
  99. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  100. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  101. package/lib/cjs/internal/NoLocks.js.map +1 -1
  102. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  103. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  104. package/lib/cjs/internal/Symbols.js.map +1 -1
  105. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  106. package/lib/cjs/internal/cross-package.js.map +1 -1
  107. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  108. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  109. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  110. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  111. package/lib/cjs/rpc/multipart.js.map +1 -1
  112. package/lib/cjs/rpc/tracing.js.map +1 -1
  113. package/lib/cjs/rpc/web/logging.js.map +1 -1
  114. package/lib/cjs/rpc/web/request.js.map +1 -1
  115. package/lib/cjs/rpc/web/response.js.map +1 -1
  116. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  117. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  118. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  119. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  120. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  121. package/lib/cjs/workspace/Settings.js.map +1 -1
  122. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  123. package/lib/cjs/workspace/Workspace.js.map +1 -1
  124. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  125. package/lib/esm/BackendHubAccess.js.map +1 -1
  126. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  127. package/lib/esm/BisCoreSchema.js.map +1 -1
  128. package/lib/esm/BlobContainerService.js.map +1 -1
  129. package/lib/esm/BriefcaseManager.js.map +1 -1
  130. package/lib/esm/CatalogDb.js.map +1 -1
  131. package/lib/esm/Category.js.map +1 -1
  132. package/lib/esm/ChangeSummaryManager.js +2 -2
  133. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  134. package/lib/esm/ChangedElementsDb.js.map +1 -1
  135. package/lib/esm/ChangesetECAdaptor.js +248 -248
  136. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  137. package/lib/esm/ChannelControl.js.map +1 -1
  138. package/lib/esm/CheckpointManager.js.map +1 -1
  139. package/lib/esm/ClassRegistry.js +5 -5
  140. package/lib/esm/ClassRegistry.js.map +1 -1
  141. package/lib/esm/CloudSqlite.js.map +1 -1
  142. package/lib/esm/CodeService.js.map +1 -1
  143. package/lib/esm/CodeSpecs.js.map +1 -1
  144. package/lib/esm/ConcurrentQuery.js.map +1 -1
  145. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  146. package/lib/esm/DevTools.js.map +1 -1
  147. package/lib/esm/DisplayStyle.js.map +1 -1
  148. package/lib/esm/ECDb.js.map +1 -1
  149. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  150. package/lib/esm/ECSqlStatement.js.map +1 -1
  151. package/lib/esm/Element.js.map +1 -1
  152. package/lib/esm/ElementAspect.js.map +1 -1
  153. package/lib/esm/ElementGraphics.js.map +1 -1
  154. package/lib/esm/ElementTreeWalker.js.map +1 -1
  155. package/lib/esm/Entity.js.map +1 -1
  156. package/lib/esm/EntityReferences.js.map +1 -1
  157. package/lib/esm/ExportGraphics.js.map +1 -1
  158. package/lib/esm/ExternalSource.js.map +1 -1
  159. package/lib/esm/FontFile.js.map +1 -1
  160. package/lib/esm/GeoCoordConfig.js.map +1 -1
  161. package/lib/esm/GeographicCRSServices.js.map +1 -1
  162. package/lib/esm/GeometrySummary.js +47 -47
  163. package/lib/esm/GeometrySummary.js.map +1 -1
  164. package/lib/esm/IModelDb.js +8 -8
  165. package/lib/esm/IModelDb.js.map +1 -1
  166. package/lib/esm/IModelDbFonts.js.map +1 -1
  167. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  168. package/lib/esm/IModelHost.js.map +1 -1
  169. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  170. package/lib/esm/IModelJsFs.js.map +1 -1
  171. package/lib/esm/ImageSourceConversion.js.map +1 -1
  172. package/lib/esm/IpcHost.js.map +1 -1
  173. package/lib/esm/LineStyle.js.map +1 -1
  174. package/lib/esm/LocalHub.js +1 -1
  175. package/lib/esm/LocalHub.js.map +1 -1
  176. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  177. package/lib/esm/LockControl.js.map +1 -1
  178. package/lib/esm/Material.js.map +1 -1
  179. package/lib/esm/Model.js.map +1 -1
  180. package/lib/esm/NativeAppStorage.js.map +1 -1
  181. package/lib/esm/NativeHost.js.map +1 -1
  182. package/lib/esm/NavigationRelationship.js.map +1 -1
  183. package/lib/esm/PromiseMemoizer.js.map +1 -1
  184. package/lib/esm/PropertyStore.js.map +1 -1
  185. package/lib/esm/Relationship.js.map +1 -1
  186. package/lib/esm/RpcBackend.js.map +1 -1
  187. package/lib/esm/SQLiteDb.js.map +1 -1
  188. package/lib/esm/Schema.js.map +1 -1
  189. package/lib/esm/SchemaSync.js.map +1 -1
  190. package/lib/esm/SchemaUtils.js.map +1 -1
  191. package/lib/esm/SheetIndex.js.map +1 -1
  192. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  193. package/lib/esm/SqliteStatement.js.map +1 -1
  194. package/lib/esm/StashManager.js.map +1 -1
  195. package/lib/esm/Texture.js.map +1 -1
  196. package/lib/esm/TileStorage.js.map +1 -1
  197. package/lib/esm/TxnManager.js.map +1 -1
  198. package/lib/esm/ViewDefinition.js.map +1 -1
  199. package/lib/esm/ViewStateHydrator.js.map +1 -1
  200. package/lib/esm/ViewStore.js.map +1 -1
  201. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  202. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  203. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  204. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  205. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  206. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  207. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  208. package/lib/esm/core-backend.js.map +1 -1
  209. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  210. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  211. package/lib/esm/domains/GenericElements.js.map +1 -1
  212. package/lib/esm/domains/GenericSchema.js.map +1 -1
  213. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  214. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  215. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  216. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  217. package/lib/esm/internal/HubMock.js.map +1 -1
  218. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  219. package/lib/esm/internal/NativePlatform.js.map +1 -1
  220. package/lib/esm/internal/NoLocks.js.map +1 -1
  221. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  222. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  223. package/lib/esm/internal/Symbols.js.map +1 -1
  224. package/lib/esm/internal/annotations/fields.js.map +1 -1
  225. package/lib/esm/internal/cross-package.js.map +1 -1
  226. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  227. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  228. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  229. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  230. package/lib/esm/rpc/multipart.js.map +1 -1
  231. package/lib/esm/rpc/tracing.js.map +1 -1
  232. package/lib/esm/rpc/web/logging.js.map +1 -1
  233. package/lib/esm/rpc/web/request.js.map +1 -1
  234. package/lib/esm/rpc/web/response.js.map +1 -1
  235. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  236. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  237. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  238. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  239. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  240. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  241. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  242. package/lib/esm/test/AttachDb.test.js +11 -11
  243. package/lib/esm/test/AttachDb.test.js.map +1 -1
  244. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  245. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  246. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  247. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  248. package/lib/esm/test/IModelHost.test.js.map +1 -1
  249. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  250. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  251. package/lib/esm/test/IpcHost.test.js.map +1 -1
  252. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  253. package/lib/esm/test/PrintElementTree.js.map +1 -1
  254. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  255. package/lib/esm/test/RevisionUtility.js.map +1 -1
  256. package/lib/esm/test/SchemaUtils.test.js +25 -25
  257. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  258. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  259. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  260. package/lib/esm/test/TestUtils.js.map +1 -1
  261. package/lib/esm/test/annotations/Fields.test.js +53 -53
  262. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  263. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  264. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  265. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  266. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  267. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  268. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  269. package/lib/esm/test/categories/Category.test.js.map +1 -1
  270. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  271. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  272. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  273. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  274. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  275. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  276. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  277. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  278. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  279. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  280. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  281. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  282. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  283. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  284. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  285. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  286. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  287. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  288. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  289. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  290. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  291. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  292. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  293. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  294. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  295. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  296. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  297. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  298. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  299. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  300. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  301. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  302. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  303. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  304. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  305. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  306. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  307. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  308. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  309. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  310. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  311. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  312. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  313. package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
  314. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  315. package/lib/esm/test/imageData.js.map +1 -1
  316. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  317. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  318. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  319. package/lib/esm/test/imodel/IModel.test.js +44 -44
  320. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  321. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  322. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  323. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  324. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  325. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  326. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  327. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  328. package/lib/esm/test/index.js.map +1 -1
  329. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  330. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  331. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  332. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  333. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  334. package/lib/esm/test/rpc/response.test.js.map +1 -1
  335. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  336. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  337. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  338. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  339. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  340. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  341. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  342. package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
  343. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  344. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  345. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  346. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  347. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  348. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  349. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  350. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  351. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  352. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  353. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  354. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  355. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  356. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  357. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  358. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  359. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  360. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  361. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  362. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  363. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  364. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  365. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  366. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  367. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  368. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  369. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  370. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  371. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  372. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  373. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  374. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  375. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  376. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  377. package/lib/esm/workspace/Settings.js.map +1 -1
  378. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  379. package/lib/esm/workspace/Workspace.js.map +1 -1
  380. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  381. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"ElementDrivesElement.test.js","sourceRoot":"","sources":["../../../src/test/ElementDrivesElement.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { BeEvent, DbResult, Id64String, IModelStatus, StopWatch } from \"@itwin/core-bentley\";\r\nimport { Code, ElementProps, GeometricElement3dProps, GeometryStreamBuilder, GeometryStreamProps, IModel, IModelError, RelatedElement, RelationshipProps } from \"@itwin/core-common\";\r\nimport { LineSegment3d, Point3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport * as chai from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { SpatialCategory } from \"../Category\";\r\nimport { ChannelControl } from \"../ChannelControl\";\r\nimport { ClassRegistry } from \"../ClassRegistry\";\r\nimport { GeometricElement3d, PhysicalPartition } from \"../Element\";\r\nimport { BriefcaseDb, IModelDb } from \"../IModelDb\";\r\nimport { HubMock } from \"../internal/HubMock\";\r\nimport { PhysicalModel } from \"../Model\";\r\nimport { SubjectOwnsPartitionElements } from \"../NavigationRelationship\";\r\nimport { ElementDrivesElement, ElementDrivesElementProps } from \"../Relationship\";\r\nimport { Schema, Schemas } from \"../Schema\";\r\nimport { HubWrappers } from \"./IModelTestUtils\";\r\nimport { KnownTestLocations } from \"./KnownTestLocations\";\r\nchai.use(chaiAsPromised);\r\n/**\r\n 1. What is Change Propagation?**\r\n In engineering, models often consist of many interdependent components (e.g., parts, assemblies, constraints). When you modify one component (say, changing a dimension), that change can affect other components.\r\n **Change propagation** is the process of updating all dependent components so the design remains consistent.\r\n\r\n 2. Why Use Topological Sort?**\r\n The dependencies between components can be represented as a **Directed Acyclic Graph (DAG)**:\r\n - **Nodes** = components or features.\r\n - **Edges** = dependency relationships (e.g., \"Feature B depends on Feature A\").\r\n\r\n To propagate changes correctly:\r\n - You must update components **in dependency order** (parents before children).\r\n - This is where **topological sorting** comes in—it gives a linear order of nodes such that every dependency comes before the dependent.\r\n\r\n 3. How It Works**\r\n **Steps:**\r\n 1. **Build the dependency graph**:\r\n - For each feature/component, list what it depends on.\r\n 2. **Perform topological sort**:\r\n - Use algorithms like **Kahn’s Algorithm** or **DFS-based sort**.\r\n 3. **Propagate changes in sorted order**:\r\n - Start from nodes with no dependencies (roots).\r\n - Update each node, then move to its dependents.\r\n\r\n\r\n 4. Example**\r\n Imagine a CAD model:\r\n - **Sketch → Extrude → Fillet → Hole**\r\n - If you change the **Sketch**, the **Extrude**, **Fillet**, and **Hole** must update in that order.\r\n\r\n Graph:\r\n Sketch → Extrude → Fillet → Hole\r\n Topological sort result:\r\n [Sketch, Extrude, Fillet, Hole]\r\n Update in this order to maintain consistency.\r\n\r\n 5. Benefits**\r\n - Prevents circular updates (since DAG ensures no cycles).\r\n - Ensures deterministic and efficient update propagation.\r\n - Scales well for complex assemblies.\r\n */\r\n\r\nenum Color {\r\n White, // unvisited\r\n Gray, // visiting\r\n Black, // visited\r\n}\r\n\r\nexport class Graph<T> {\r\n private _nodes: T[] = [];\r\n private _edges = new Map<T, T[]>();\r\n public constructor() {\r\n }\r\n\r\n public addNode(node: T): void {\r\n if (!this._nodes.includes(node))\r\n this._nodes.push(node);\r\n }\r\n\r\n public *nodes(): IterableIterator<T> {\r\n yield* this._nodes;\r\n }\r\n\r\n public *edges(): IterableIterator<{ from: T, to: T }> {\r\n for (const [from, toList] of this._edges.entries()) {\r\n for (const to of toList) {\r\n yield { from, to };\r\n }\r\n }\r\n }\r\n\r\n public addEdge(from: T, to: T | T[]): void {\r\n this.addNode(from);\r\n if (!this._edges.has(from)) {\r\n this._edges.set(from, []);\r\n }\r\n if (Array.isArray(to)) {\r\n to.forEach(t => this.addNode(t));\r\n this._edges.get(from)!.push(...to);\r\n } else {\r\n this.addNode(to);\r\n this._edges.get(from)!.push(to);\r\n }\r\n }\r\n public getEdges(node: T): T[] {\r\n if (!this._edges.has(node))\r\n return [];\r\n return this._edges.get(node)!;\r\n }\r\n public clone(): Graph<T> {\r\n const newGraph = new Graph<T>();\r\n for (const node of this._nodes) {\r\n newGraph.addNode(node);\r\n }\r\n for (const [from, toList] of this._edges.entries()) {\r\n newGraph.addEdge(from, toList);\r\n }\r\n return newGraph;\r\n }\r\n public toGraphvis(accessor: NodeAccessor<T>): string {\r\n // Implementation for converting the graph to Graphviz DOT format\r\n let dot = \"digraph G {\\n\";\r\n for (const node of this._nodes) {\r\n dot += ` \"${accessor.getId(node)}\" [label=\"${accessor.getLabel(node)}\"];\\n`;\r\n }\r\n for (const [from, toList] of this._edges.entries()) {\r\n for (const to of toList) {\r\n dot += ` \"${accessor.getId(from)}\" -> \"${accessor.getId(to)}\";\\n`;\r\n }\r\n }\r\n dot += \"}\\n\";\r\n return dot;\r\n }\r\n}\r\nexport interface NodeAccessor<T> {\r\n getLabel: (node: T) => string;\r\n getId: (node: T) => string;\r\n}\r\nexport class TopologicalSorter {\r\n private static visit<T>(graph: Graph<T>, node: T, colors: Map<T, Color>, sorted: T[], failOnCycles: boolean): void {\r\n if (colors.get(node) === Color.Gray) {\r\n if (failOnCycles)\r\n throw new Error(\"Graph has a cycle\");\r\n else {\r\n return;\r\n }\r\n }\r\n\r\n if (colors.get(node) === Color.White) {\r\n colors.set(node, Color.Gray);\r\n const neighbors = graph.getEdges(node);\r\n for (const neighbor of neighbors) {\r\n this.visit(graph, neighbor, colors, sorted, failOnCycles);\r\n }\r\n colors.set(node, Color.Black);\r\n sorted.push(node);\r\n }\r\n }\r\n\r\n public static sortDepthFirst<T>(graph: Graph<T>, updated?: T[], failOnCycles = true): T[] {\r\n const sorted: T[] = [];\r\n const colors = new Map(Array.from(graph.nodes()).map((node) => [node, Color.White]));\r\n if (updated) {\r\n // remove duplicate\r\n let filteredUpdated = Array.from(new Set(updated));\r\n filteredUpdated = filteredUpdated.filter(node => colors.get(node) === Color.White);\r\n if (filteredUpdated.length !== updated.length) {\r\n throw new Error(\"Updated list contains nodes that are not in the graph or have duplicates\");\r\n }\r\n if (filteredUpdated.length === 0)\r\n updated = undefined;\r\n else\r\n updated = filteredUpdated;\r\n }\r\n for (const node of updated ?? Array.from(graph.nodes())) {\r\n if (colors.get(node) === Color.White) {\r\n this.visit(graph, node, colors, sorted, failOnCycles);\r\n }\r\n }\r\n\r\n return sorted.reverse();\r\n }\r\n public static sortBreadthFirst<T>(graph: Graph<T>, updated?: T[], failOnCycles = true): T[] {\r\n const sorted: T[] = [];\r\n const queue: T[] = [];\r\n // Vector to store indegree of each vertex\r\n const inDegree = new Map<T, number>();\r\n for (const node of graph.nodes()) {\r\n inDegree.set(node, 0);\r\n }\r\n for (const edge of graph.edges()) {\r\n inDegree.set(edge.to, (inDegree.get(edge.to) ?? 0) + 1);\r\n }\r\n\r\n if (updated) {\r\n // remove duplicate\r\n const filteredUpdated = Array.from(new Set(updated));\r\n if (filteredUpdated.length !== updated.length) {\r\n throw new Error(\"Updated list contains nodes that are not in the graph or have duplicates\");\r\n }\r\n if (filteredUpdated.length === 0)\r\n updated = undefined;\r\n else\r\n updated = filteredUpdated;\r\n }\r\n const startNodes = updated ?? Array.from(graph.nodes());\r\n for (const node of startNodes) {\r\n if (inDegree.get(node) === 0) {\r\n queue.push(node);\r\n }\r\n }\r\n if (startNodes.length === 0) {\r\n throw new Error(\"Graph has at least one cycle\");\r\n }\r\n\r\n if (startNodes)\r\n while (queue.length > 0) {\r\n const current = queue.shift()!;\r\n sorted.push(current);\r\n\r\n for (const neighbor of graph.getEdges(current)) {\r\n inDegree.set(neighbor, (inDegree.get(neighbor) ?? 0) - 1);\r\n if (inDegree.get(neighbor) === 0) {\r\n queue.push(neighbor);\r\n }\r\n }\r\n }\r\n if (failOnCycles && sorted.length !== Array.from(graph.nodes()).length)\r\n throw new Error(\"Graph has at least one cycle\");\r\n\r\n return sorted;\r\n }\r\n public static validate<T>(graph: Graph<T>, sorted: T[]): boolean {\r\n if (sorted.length !== Array.from(graph.nodes()).length) {\r\n return false;\r\n }\r\n\r\n const position = new Map<T, number>();\r\n for (let i = 0; i < sorted.length; i++) {\r\n position.set(sorted[i], i);\r\n }\r\n\r\n for (const { from, to } of graph.edges()) {\r\n if (position.get(from)! > position.get(to)!) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nclass ElementDrivesElementEventMonitor {\r\n public readonly onRootChanged: [string, string][] = [];\r\n public readonly onAllInputsHandled: string[] = [];\r\n public readonly onBeforeOutputsHandled: string[] = [];\r\n public readonly onDeletedDependency: [string, string][] = [];\r\n constructor(public iModelDb: IModelDb) {\r\n InputDrivesOutput.events.onDeletedDependency.addListener((props: RelationshipProps) => this.onDeletedDependency.push([this.iModelDb.elements.tryGetElement<NodeElement>(props.sourceId)?.userLabel as string, this.iModelDb.elements.tryGetElement<NodeElement>(props.targetId)?.userLabel as string]));\r\n InputDrivesOutput.events.onRootChanged.addListener((props: RelationshipProps) => this.onRootChanged.push([this.iModelDb.elements.tryGetElement<NodeElement>(props.sourceId)?.userLabel as string, this.iModelDb.elements.tryGetElement<NodeElement>(props.targetId)?.userLabel as string]));\r\n NodeElement.events.onAllInputsHandled.addListener((id: Id64String) => this.onAllInputsHandled.push(this.iModelDb.elements.tryGetElement<NodeElement>(id)?.userLabel as string));\r\n NodeElement.events.onBeforeOutputsHandled.addListener((id: Id64String) => this.onBeforeOutputsHandled.push(this.iModelDb.elements.tryGetElement<NodeElement>(id)?.userLabel as string));\r\n }\r\n public clear() {\r\n this.onRootChanged.length = 0;\r\n this.onAllInputsHandled.length = 0;\r\n this.onBeforeOutputsHandled.length = 0;\r\n this.onDeletedDependency.length = 0;\r\n }\r\n}\r\nexport interface InputDrivesOutputProps extends ElementDrivesElementProps {\r\n prop: number;\r\n}\r\n\r\nexport interface NodeElementProps extends GeometricElement3dProps {\r\n op: string;\r\n val: number;\r\n}\r\n\r\nexport class InputDrivesOutput extends ElementDrivesElement {\r\n public static readonly events = {\r\n onRootChanged: new BeEvent<(props: RelationshipProps, iModel: IModelDb) => void>(),\r\n onDeletedDependency: new BeEvent<(props: RelationshipProps, iModel: IModelDb) => void>(),\r\n };\r\n public static override get className(): string { return \"InputDrivesOutput\"; }\r\n protected constructor(props: InputDrivesOutputProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n public static override onRootChanged(props: RelationshipProps, iModel: IModelDb): void {\r\n this.events.onRootChanged.raiseEvent(props, iModel);\r\n }\r\n public static override onDeletedDependency(props: RelationshipProps, iModel: IModelDb): void {\r\n this.events.onDeletedDependency.raiseEvent(props, iModel);\r\n }\r\n}\r\nexport class NodeElement extends GeometricElement3d {\r\n public op: string;\r\n public val: number;\r\n public static readonly events = {\r\n onAllInputsHandled: new BeEvent<(id: Id64String, iModel: IModelDb) => void>(),\r\n onBeforeOutputsHandled: new BeEvent<(id: Id64String, iModel: IModelDb) => void>(),\r\n };\r\n\r\n public static override get className(): string { return \"Node\"; }\r\n protected constructor(props: NodeElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.op = props.op;\r\n this.val = props.val;\r\n }\r\n public override toJSON(): GeometricElement3dProps {\r\n const val = super.toJSON() as NodeElementProps;\r\n val.op = this.op;\r\n val.val = this.val;\r\n return val;\r\n }\r\n protected static override onAllInputsHandled(id: Id64String, iModel: IModelDb): void {\r\n this.events.onAllInputsHandled.raiseEvent(id, iModel);\r\n }\r\n protected static override onBeforeOutputsHandled(id: Id64String, iModel: IModelDb): void {\r\n this.events.onBeforeOutputsHandled.raiseEvent(id, iModel);\r\n }\r\n public static generateGeometry(radius: number): GeometryStreamProps {\r\n const builder = new GeometryStreamBuilder();\r\n const p1 = Point3d.createZero();\r\n const p2 = Point3d.createFrom({ x: radius, y: 0.0, z: 0.0 });\r\n const circle = LineSegment3d.create(p1, p2);\r\n builder.appendGeometry(circle);\r\n return builder.geometryStream;\r\n }\r\n public static getCategory(iModelDb: IModelDb) {\r\n const categoryId = SpatialCategory.queryCategoryIdByName(iModelDb, IModelDb.dictionaryId, this.classFullName);\r\n if (categoryId === undefined)\r\n throw new IModelError(IModelStatus.NotFound, \"Category not found\");\r\n return iModelDb.elements.getElement(categoryId);\r\n }\r\n}\r\n\r\nexport class NetworkSchema extends Schema {\r\n public static override get schemaName(): string { return \"Network\"; }\r\n public static registerSchema() {\r\n if (this !== Schemas.getRegisteredSchema(NetworkSchema.schemaName)) {\r\n Schemas.registerSchema(this);\r\n ClassRegistry.register(NodeElement, this);\r\n ClassRegistry.register(InputDrivesOutput, this);\r\n }\r\n }\r\n\r\n public static async importSchema(iModel: IModelDb): Promise<void> {\r\n if (iModel.querySchemaVersion(\"Network\"))\r\n return;\r\n\r\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"Network\" alias=\"net\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Node\">\r\n <BaseClass>bis:GraphicalElement3d</BaseClass>\r\n <ECProperty propertyName=\"op\" typeName=\"string\" />\r\n <ECProperty propertyName=\"val\" typeName=\"double\" />\r\n </ECEntityClass>\r\n <ECRelationshipClass typeName=\"InputDrivesOutput\" modifier=\"None\" strength=\"referencing\">\r\n <BaseClass>bis:ElementDrivesElement</BaseClass>\r\n <Source multiplicity=\"(0..1)\" roleLabel=\"drives\" polymorphic=\"true\">\r\n <Class class=\"Node\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..*)\" roleLabel=\"is driven by\" polymorphic=\"false\">\r\n <Class class=\"Node\"/>\r\n </Target>\r\n <ECProperty propertyName=\"prop\" typeName=\"double\" />\r\n </ECRelationshipClass>\r\n </ECSchema>`;\r\n await iModel.importSchemaStrings([schema1]);\r\n }\r\n}\r\n\r\nexport class Engine {\r\n public static async createGraph(iModelDb: IModelDb, modelId: Id64String, graph: Graph<string>): Promise<Graph<{ id: Id64String, name: string }>> {\r\n const nodes = new Map<string, { id: Id64String, name: string }>();\r\n const outGraph = new Graph<{ id: Id64String, name: string }>();\r\n for (const node of graph.nodes()) {\r\n const id = await this.insertNode(iModelDb, modelId, node, \"\", 0, new Point3d(0, 0, 0));\r\n nodes.set(node, { id, name: node });\r\n }\r\n for (const edge of graph.edges()) {\r\n const fromId = nodes.get(edge.from)!.id;\r\n const toId = nodes.get(edge.to)!.id;\r\n await this.insertEdge(iModelDb, fromId, toId, 0);\r\n outGraph.addEdge(nodes.get(edge.from)!, nodes.get(edge.to)!);\r\n }\r\n return outGraph;\r\n }\r\n public static countNodes(iModelDb: IModelDb): number {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModelDb.withPreparedStatement(\"SELECT COUNT(*) FROM Network.Node\", (stmt) => {\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n return stmt.getValue(0).getInteger();\r\n }\r\n return 0;\r\n });\r\n }\r\n public static countEdges(iModelDb: IModelDb): number {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModelDb.withPreparedStatement(\"SELECT COUNT(*) FROM [Network].[InputDrivesOutput]\", (stmt) => {\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n return stmt.getValue(0).getInteger();\r\n }\r\n return 0;\r\n });\r\n }\r\n public static queryEdgesForSource(iModelDb: IModelDb, sourceId: Id64String): InputDrivesOutputProps[] {\r\n const edges: InputDrivesOutputProps[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(\"SELECT [ECInstanceId], [SourceECInstanceId], [TargetECInstanceId], [prop], [Status], [Priority] FROM [Network].[InputDrivesOutput] WHERE [SourceECInstanceId] = ?\", (stmt) => {\r\n stmt.bindId(1, sourceId);\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n edges.push({\r\n id: stmt.getValue(0).getId(),\r\n classFullName: InputDrivesOutput.classFullName,\r\n sourceId: stmt.getValue(1).getId(),\r\n targetId: stmt.getValue(2).getId(),\r\n prop: stmt.getValue(3).getDouble(),\r\n status: stmt.getValue(4).getInteger(),\r\n priority: stmt.getValue(5).getInteger(),\r\n });\r\n }\r\n });\r\n return edges;\r\n }\r\n public static queryEdgesForTarget(iModelDb: IModelDb, targetId: Id64String): InputDrivesOutputProps[] {\r\n const edges: InputDrivesOutputProps[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModelDb.withPreparedStatement(\"SELECT [ECInstanceId], [SourceECInstanceId], [TargetECInstanceId], [prop], [Status], [Priority] FROM [Network].[InputDrivesOutput] WHERE [TargetECInstanceId] = ?\", (stmt) => {\r\n stmt.bindId(1, targetId);\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n edges.push({\r\n id: stmt.getValue(0).getId(),\r\n classFullName: InputDrivesOutput.classFullName,\r\n sourceId: stmt.getValue(1).getId(),\r\n targetId: stmt.getValue(2).getId(),\r\n prop: stmt.getValue(3).getDouble(),\r\n status: stmt.getValue(4).getInteger(),\r\n priority: stmt.getValue(5).getInteger(),\r\n });\r\n }\r\n });\r\n return edges;\r\n }\r\n private static async createPartition(iModelDb: IModelDb): Promise<Id64String> {\r\n const parentId = new SubjectOwnsPartitionElements(IModel.rootSubjectId);\r\n const modelId = IModel.repositoryModelId;\r\n const modeledElementProps: ElementProps = {\r\n classFullName: PhysicalPartition.classFullName,\r\n parent: parentId,\r\n model: modelId,\r\n code: Code.createEmpty(),\r\n userLabel: \"NetworkPhysicalPartition\"\r\n };\r\n const modeledElement = iModelDb.elements.createElement(modeledElementProps);\r\n await iModelDb.locks.acquireLocks({ shared: modelId });\r\n return iModelDb.elements.insertElement(modeledElement.toJSON());\r\n }\r\n private static async createModel(iModelDb: IModelDb): Promise<Id64String> {\r\n const partitionId = await this.createPartition(iModelDb);\r\n const modeledElementRef = new RelatedElement({ id: partitionId });\r\n const newModel = iModelDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName });\r\n const newModelId = newModel.insert();\r\n return newModelId;\r\n }\r\n private static async createNodeCategory(iModelDb: IModelDb) {\r\n const category = SpatialCategory.create(iModelDb, IModelDb.dictionaryId, NodeElement.classFullName);\r\n return category.insert();\r\n }\r\n public static async initialize(iModelDb: IModelDb) {\r\n await NetworkSchema.importSchema(iModelDb);\r\n NetworkSchema.registerSchema();\r\n const modelId = await this.createModel(iModelDb);\r\n const categoryId = await this.createNodeCategory(iModelDb);\r\n return {\r\n modelId,\r\n categoryId,\r\n };\r\n }\r\n public static async insertNode(iModelDb: IModelDb, modelId: Id64String, name: string, op: string, val: number, location: Point3d, radius: number = 0.1) {\r\n const props: NodeElementProps = {\r\n classFullName: NodeElement.classFullName,\r\n model: modelId,\r\n code: Code.createEmpty(),\r\n userLabel: name,\r\n category: NodeElement.getCategory(iModelDb).id,\r\n placement: { origin: location, angles: new YawPitchRollAngles() },\r\n geom: NodeElement.generateGeometry(radius),\r\n op,\r\n val,\r\n };\r\n await iModelDb.locks.acquireLocks({ shared: modelId });\r\n return iModelDb.elements.insertElement(props);\r\n }\r\n public static async deleteNode(iModelDb: IModelDb, nodeId: Id64String) {\r\n await iModelDb.locks.acquireLocks({ exclusive: nodeId });\r\n return iModelDb.elements.deleteElement(nodeId);\r\n }\r\n public static async updateNodeProps(iModelDb: IModelDb, props: Partial<NodeElementProps>) {\r\n await iModelDb.locks.acquireLocks({ exclusive: props.id });\r\n return iModelDb.elements.updateElement(props);\r\n }\r\n public static async updateNode(iModelDb: IModelDb, userLabel: string) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const id = iModelDb.withPreparedStatement(\"SELECT [ECInstanceId] FROM [Network].[Node] WHERE [UserLabel] = ?\", (stmt) => {\r\n stmt.bindString(1, userLabel);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n return stmt.getValue(0).getId();\r\n return undefined;\r\n });\r\n if (!id) {\r\n throw new Error(`Node with userLabel ${userLabel} not found`);\r\n }\r\n await this.updateNodeProps(iModelDb, { id });\r\n }\r\n public static async deleteEdge(iModelDb: IModelDb, from: string, to: string) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const edge = iModelDb.withPreparedStatement(`\r\n SELECT [IDo].[ECInstanceId], [IDo].[SourceECInstanceId], [IDo].[TargetECInstanceId]\r\n FROM [Network].[InputDrivesOutput] [IDo]\r\n JOIN [Network].[Node] [Src] ON [Src].[ECInstanceId] = [IDo].[SourceECInstanceId]\r\n JOIN [Network].[Node] [Tgt] ON [Tgt].[ECInstanceId] = [IDo].[TargetECInstanceId]\r\n WHERE [Src].[UserLabel] = ? AND [Tgt].[UserLabel] = ?`, (stmt) => {\r\n stmt.bindString(1, from);\r\n stmt.bindString(2, to);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n return {\r\n id: stmt.getValue(0).getId(),\r\n classFullName: InputDrivesOutput.classFullName,\r\n sourceId: stmt.getValue(1).getId(),\r\n targetId: stmt.getValue(2).getId(),\r\n } as RelationshipProps;\r\n return undefined;\r\n });\r\n if (!edge) {\r\n throw new Error(`Edge from ${from} to ${to} not found`);\r\n }\r\n iModelDb.relationships.deleteInstance(edge);\r\n }\r\n public static async insertEdge(iModelDb: IModelDb, sourceId: Id64String, targetId: Id64String, prop: number) {\r\n const props: InputDrivesOutputProps = {\r\n classFullName: InputDrivesOutput.classFullName,\r\n sourceId,\r\n targetId,\r\n prop,\r\n status: 0,\r\n priority: 0\r\n };\r\n return iModelDb.relationships.insertInstance(props);\r\n }\r\n}\r\n\r\ndescribe(\"ElementDrivesElement Tests\", () => {\r\n const briefcases: BriefcaseDb[] = [];\r\n let iModelId: string;\r\n async function openBriefcase(): Promise<BriefcaseDb> {\r\n const iModelDb = await HubWrappers.downloadAndOpenBriefcase({ iTwinId: HubMock.iTwinId, iModelId });\r\n iModelDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n iModelDb.saveChanges();\r\n briefcases.push(iModelDb);\r\n return iModelDb;\r\n }\r\n beforeEach(async () => {\r\n HubMock.startup(\"TestIModel\", KnownTestLocations.outputDir);\r\n iModelId = await HubMock.createNewIModel({ iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\r\n });\r\n afterEach(async () => {\r\n NodeElement.events.onAllInputsHandled.clear();\r\n NodeElement.events.onBeforeOutputsHandled.clear();\r\n InputDrivesOutput.events.onRootChanged.clear();\r\n InputDrivesOutput.events.onDeletedDependency.clear();\r\n for (const briefcase of briefcases) {\r\n briefcase.close();\r\n }\r\n HubMock.shutdown();\r\n });\r\n it(\"local: topological sort\", async () => {\r\n const graph = new Graph<string>();\r\n\r\n graph.addEdge(\"1\", [\"2\", \"3\"]);\r\n graph.addEdge(\"2\", [\"5\", \"4\"]);\r\n graph.addEdge(\"3\", [\"4\"]);\r\n graph.addEdge(\"4\", [\"5\"]);\r\n const df = TopologicalSorter.sortDepthFirst(graph);\r\n chai.expect(TopologicalSorter.validate(graph, df)).to.be.true;\r\n chai.expect(df).to.deep.equal([\"1\", \"3\", \"2\", \"4\", \"5\"]);\r\n\r\n const bf = TopologicalSorter.sortBreadthFirst(graph);\r\n chai.expect(TopologicalSorter.validate(graph, bf)).to.be.true;\r\n chai.expect(bf).to.deep.equal([\"1\", \"2\", \"3\", \"4\", \"5\"]);\r\n });\r\n\r\n it(\"local: cycle detection (suppress cycles)\", async () => {\r\n const graph = new Graph<string>();\r\n // Graph structure:\r\n // 1 --> 2 <-- 3\r\n // ^ |\r\n // |-----------|\r\n graph.addEdge(\"1\", [\"2\"]);\r\n graph.addEdge(\"2\", [\"3\"]);\r\n graph.addEdge(\"3\", [\"1\"]);\r\n\r\n const df = TopologicalSorter.sortDepthFirst(graph, [], false);\r\n chai.expect(TopologicalSorter.validate(graph, df)).to.be.false;\r\n chai.expect(df).to.deep.equal([\"1\", \"2\", \"3\"]);\r\n });\r\n it(\"local: cycle detection (throw)\", async () => {\r\n const graph = new Graph<string>();\r\n // Graph structure:\r\n // 1 --> 2 --> 3\r\n // ^ |\r\n // |-----------|\r\n graph.addEdge(\"1\", [\"2\"]);\r\n graph.addEdge(\"2\", [\"3\"]);\r\n graph.addEdge(\"3\", [\"1\"]);\r\n\r\n chai.expect(() => TopologicalSorter.sortDepthFirst(graph)).to.throw(\r\n \"Graph has a cycle\"\r\n );\r\n });\r\n it(\"EDE/local: build system dependencies\", async () => {\r\n const graph = new Graph<string>();\r\n /*\r\n Example: Build system dependencies\r\n\r\n - Compile main.c and util.c to main.o and util.o\r\n - Link main.o and util.o to produce app.exe\r\n - app.exe depends on config.json\r\n - test.exe depends on main.o, util.o, and test.c\r\n\r\n Graph:\r\n main.c util.c test.c config.json\r\n | | | |\r\n v v | |\r\n main.o util.o | |\r\n \\ / | |\r\n \\ / | |\r\n app.exe test.exe |\r\n | | |\r\n +----------------+---------+\r\n */\r\n\r\n graph.addEdge(\"main.c\", [\"main.o\"]);\r\n graph.addEdge(\"util.c\", [\"util.o\"]);\r\n graph.addEdge(\"test.c\", [\"test.exe\"]);\r\n graph.addEdge(\"main.o\", [\"app.exe\", \"test.exe\"]);\r\n graph.addEdge(\"util.o\", [\"app.exe\", \"test.exe\"]);\r\n graph.addEdge(\"config.json\", [\"app.exe\", \"test.exe\"]);\r\n\r\n\r\n // create graph\r\n const b1 = await openBriefcase();\r\n const { modelId, } = await Engine.initialize(b1);\r\n const monitor = new ElementDrivesElementEventMonitor(b1);\r\n await Engine.createGraph(b1, modelId, graph);\r\n b1.saveChanges();\r\n b1.saveChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([\r\n [\"main.c\", \"main.o\"],\r\n [\"main.o\", \"test.exe\"],\r\n [\"main.o\", \"app.exe\"],\r\n [\"util.c\", \"util.o\"],\r\n [\"util.o\", \"test.exe\"],\r\n [\"util.o\", \"app.exe\"],\r\n [\"test.c\", \"test.exe\"],\r\n [\"config.json\", \"test.exe\"],\r\n [\"config.json\", \"app.exe\"],\r\n ]);\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"main.o\", \"util.o\", \"test.exe\", \"app.exe\"]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"main.c\", \"util.c\", \"test.c\", \"config.json\"]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\r\n\r\n // update main.c\r\n monitor.clear();\r\n await Engine.updateNode(b1, \"main.c\");\r\n b1.saveChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([\r\n [\"main.c\", \"main.o\"],\r\n [\"main.o\", \"test.exe\"],\r\n [\"main.o\", \"app.exe\"],\r\n ]);\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"main.o\", \"test.exe\", \"app.exe\"]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"main.c\"]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\r\n\r\n // Topological sort (depth-first)\r\n const df = TopologicalSorter.sortDepthFirst(graph);\r\n chai.expect(TopologicalSorter.validate(graph, df)).to.be.true;\r\n\r\n // Topological sort (breadth-first)\r\n const bf = TopologicalSorter.sortBreadthFirst(graph);\r\n chai.expect(TopologicalSorter.validate(graph, bf)).to.be.true;\r\n chai.expect(df).to.deep.equal([\"config.json\", \"test.c\", \"util.c\", \"util.o\", \"main.c\", \"main.o\", \"test.exe\", \"app.exe\"]);\r\n chai.expect(bf).to.deep.equal([\"main.c\", \"util.c\", \"test.c\", \"config.json\", \"main.o\", \"util.o\", \"app.exe\", \"test.exe\"]);\r\n });\r\n it(\"EDE/local: complex, subset\", async () => {\r\n const graph = new Graph<string>();\r\n /*\r\n Graph shows what must be put on before other items:\r\n - Socks before Shoes\r\n - Underwear before Shoes and Pants\r\n - Pants before Belt and Shoes\r\n - Shirt before Belt and Tie\r\n - Tie before Jacket\r\n - Belt before Jacket\r\n - Watch has no dependencies\r\n */\r\n\r\n graph.addEdge(\"Socks\", [\"Shoes\"]);\r\n graph.addEdge(\"Underwear\", [\"Shoes\", \"Pants\"]);\r\n graph.addEdge(\"Pants\", [\"Belt\", \"Shoes\"]);\r\n graph.addEdge(\"Shirt\", [\"Belt\", \"Tie\"]);\r\n graph.addEdge(\"Tie\", [\"Jacket\"]);\r\n graph.addEdge(\"Belt\", [\"Jacket\"]);\r\n graph.addNode(\"Watch\");\r\n\r\n // Test using EDE\r\n const b1 = await openBriefcase();\r\n const { modelId, } = await Engine.initialize(b1);\r\n const monitor = new ElementDrivesElementEventMonitor(b1);\r\n await Engine.createGraph(b1, modelId, graph);\r\n b1.saveChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([\r\n [\"Socks\", \"Shoes\"],\r\n [\"Underwear\", \"Shoes\"],\r\n [\"Underwear\", \"Pants\"],\r\n [\"Pants\", \"Shoes\"],\r\n [\"Pants\", \"Belt\"],\r\n [\"Shirt\", \"Belt\"],\r\n [\"Belt\", \"Jacket\"],\r\n [\"Shirt\", \"Tie\"],\r\n [\"Tie\", \"Jacket\"]\r\n ]);\r\n\r\n // Watch is missing as it is not connected to any other node.\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"Pants\", \"Shoes\", \"Belt\", \"Tie\", \"Jacket\"]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"Socks\", \"Underwear\", \"Shirt\"]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\r\n\r\n monitor.clear();\r\n await Engine.updateNode(b1, \"Socks\");\r\n b1.saveChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([[\"Socks\", \"Shoes\"]]);\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"Shoes\"]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"Socks\"]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\r\n\r\n const sorted = TopologicalSorter.sortDepthFirst(graph);\r\n chai.expect(TopologicalSorter.validate(graph, sorted)).to.be.true;\r\n chai.expect(sorted).to.deep.equal([\"Watch\", \"Shirt\", \"Tie\", \"Underwear\", \"Pants\", \"Belt\", \"Jacket\", \"Socks\", \"Shoes\"]);\r\n\r\n // Test sorting with a subset of nodes\r\n const sorted1 = TopologicalSorter.sortDepthFirst(graph, [\"Underwear\"]);\r\n chai.expect(sorted1).to.deep.equal([\"Underwear\", \"Pants\", \"Belt\", \"Jacket\", \"Shoes\"]);\r\n\r\n const sorted2 = TopologicalSorter.sortDepthFirst(graph, [\"Belt\"]);\r\n chai.expect(sorted2).to.deep.equal([\"Belt\", \"Jacket\"]);\r\n\r\n const sorted3 = TopologicalSorter.sortDepthFirst(graph, [\"Shoes\"]);\r\n chai.expect(sorted3).to.deep.equal([\"Shoes\"]);\r\n\r\n const sorted4 = TopologicalSorter.sortDepthFirst(graph, [\"Socks\"]);\r\n chai.expect(sorted4).to.deep.equal([\"Socks\", \"Shoes\"]);\r\n\r\n const sorted5 = TopologicalSorter.sortDepthFirst(graph, [\"Tie\"]);\r\n chai.expect(sorted5).to.deep.equal([\"Tie\", \"Jacket\"]);\r\n\r\n const sorted6 = TopologicalSorter.sortDepthFirst(graph, [\"Jacket\"]);\r\n chai.expect(sorted6).to.deep.equal([\"Jacket\"]);\r\n\r\n const sorted7 = TopologicalSorter.sortDepthFirst(graph, [\"Shirt\"]);\r\n chai.expect(sorted7).to.deep.equal([\"Shirt\", \"Tie\", \"Belt\", \"Jacket\"]);\r\n\r\n const sorted8 = TopologicalSorter.sortDepthFirst(graph, [\"Watch\"]);\r\n chai.expect(sorted8).to.deep.equal([\"Watch\"]);\r\n });\r\n\r\n it(\"EDE: basic graph operations\", async () => {\r\n const b1 = await openBriefcase();\r\n const { modelId, } = await Engine.initialize(b1);\r\n const graph = new Graph<string>();\r\n\r\n // Graph structure:\r\n // A\r\n // / \\\r\n // B C\r\n // |\\ /\r\n // | \\/\r\n // E--D \r\n graph.addEdge(\"A\", [\"B\", \"C\"]);\r\n graph.addEdge(\"B\", [\"E\", \"D\"]);\r\n graph.addEdge(\"C\", [\"D\"]);\r\n graph.addEdge(\"D\", [\"E\"]);\r\n const monitor = new ElementDrivesElementEventMonitor(b1);\r\n\r\n // create a network\r\n await Engine.createGraph(b1, modelId, graph);\r\n b1.saveChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([\r\n [\"A\", \"B\"],\r\n [\"A\", \"C\"],\r\n [\"B\", \"E\"],\r\n [\"B\", \"D\"],\r\n [\"C\", \"D\"],\r\n [\"D\", \"E\"]]);\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"B\", \"C\", \"D\", \"E\"]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"A\"]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\r\n monitor.clear();\r\n\r\n // update a node in network\r\n await Engine.updateNode(b1, \"B\");\r\n b1.saveChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([\r\n [\"B\", \"E\"],\r\n [\"B\", \"D\"],\r\n [\"D\", \"E\"]]);\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"D\", \"E\"]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"B\"]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\r\n monitor.clear();\r\n\r\n // delete edge in network\r\n await Engine.deleteEdge(b1, \"B\", \"E\");\r\n b1.saveChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([]);\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([[\"B\", \"E\"]]);\r\n });\r\n it(\"EDE: cyclical throw exception\", async () => {\r\n const b1 = await openBriefcase();\r\n const { modelId, } = await Engine.initialize(b1);\r\n const graph = new Graph<string>();\r\n // Graph structure with a cycle:\r\n // A\r\n // / \\\r\n // B - C\r\n\r\n graph.addEdge(\"A\", [\"B\"]);\r\n graph.addEdge(\"B\", [\"C\"]);\r\n graph.addEdge(\"C\", [\"A\"]);\r\n\r\n const monitor = new ElementDrivesElementEventMonitor(b1);\r\n // create a network\r\n await Engine.createGraph(b1, modelId, graph);\r\n chai.expect(() => b1.saveChanges()).to.throw(\"Could not save changes due to propagation failure.\");\r\n b1.abandonChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([[\"B\", \"C\"], [\"C\", \"A\"], [\"A\", \"B\"]]);\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"C\", \"A\", \"B\"]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\r\n monitor.clear();\r\n });\r\n it(\"EDE: cyclical graph can start propagation with no clear starting element\", async () => {\r\n const b1 = await openBriefcase();\r\n const { modelId, } = await Engine.initialize(b1);\r\n const graph = new Graph<string>();\r\n // Graph structure with a cycle:\r\n // A\r\n // / \\\r\n // B - C\r\n\r\n // order of insertion effect graph with cycles.\r\n graph.addNode(\"B\");\r\n graph.addNode(\"A\");\r\n graph.addNode(\"C\");\r\n\r\n graph.addEdge(\"A\", [\"B\"]);\r\n graph.addEdge(\"B\", [\"C\"]);\r\n graph.addEdge(\"C\", [\"A\"]);\r\n\r\n const monitor = new ElementDrivesElementEventMonitor(b1);\r\n // create a network\r\n await Engine.createGraph(b1, modelId, graph);\r\n chai.expect(() => b1.saveChanges()).to.throw(\"Could not save changes due to propagation failure.\");\r\n b1.abandonChanges();\r\n chai.expect(monitor.onRootChanged).to.deep.equal([[\"C\", \"A\"], [\"A\", \"B\"], [\"B\", \"C\"]]);\r\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"A\", \"B\", \"C\"]);\r\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([]);\r\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\r\n monitor.clear();\r\n });\r\n it.skip(\"EDE: performance\", async () => {\r\n const b1 = await openBriefcase();\r\n const { modelId, } = await Engine.initialize(b1);\r\n const graph = new Graph<string>();\r\n\r\n const createTree = (depth: number, breadth: number, prefix: string) => {\r\n if (depth === 0)\r\n return;\r\n for (let i = 0; i < breadth; i++) {\r\n const node = `${prefix}${i}`;\r\n graph.addNode(node);\r\n if (depth > 1) {\r\n for (let j = 0; j < breadth; j++) {\r\n const child = `${prefix}${i}${j}`;\r\n graph.addEdge(node, [child]);\r\n createTree(depth - 1, breadth, `${prefix}${i}${j}`);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const stopWatch0 = new StopWatch(\"create graph\", true);\r\n createTree(5, 3, \"N\");\r\n await Engine.createGraph(b1, modelId, graph);\r\n stopWatch0.stop();\r\n const createGraphTime = stopWatch0.elapsed.seconds;\r\n\r\n let onRootChangedCount = 0;\r\n let onDeletedDependencyCount = 0;\r\n let onAllInputsHandledCount = 0;\r\n let onBeforeOutputsHandledCount = 0;\r\n InputDrivesOutput.events.onRootChanged.addListener(() => { onRootChangedCount++; });\r\n InputDrivesOutput.events.onDeletedDependency.addListener(() => { onDeletedDependencyCount++; });\r\n NodeElement.events.onAllInputsHandled.addListener((_id: Id64String) => { onAllInputsHandledCount++; });\r\n NodeElement.events.onBeforeOutputsHandled.addListener(() => { onBeforeOutputsHandledCount++; });\r\n\r\n const stopWatch1 = new StopWatch(\"save changes\", true);\r\n b1.saveChanges();\r\n stopWatch1.stop();\r\n const saveChangesTime = stopWatch1.elapsed.seconds;\r\n chai.expect(onRootChangedCount).to.be.equals(7380);\r\n chai.expect(onDeletedDependencyCount).to.equal(0);\r\n chai.expect(onAllInputsHandledCount).to.be.equals(7380);\r\n chai.expect(onBeforeOutputsHandledCount).to.equal(2460);\r\n chai.expect(createGraphTime).to.be.lessThan(3);\r\n chai.expect(saveChangesTime).to.be.lessThan(3);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ElementDrivesElement.test.js","sourceRoot":"","sources":["../../../src/test/ElementDrivesElement.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { BeEvent, DbResult, Id64String, IModelStatus, StopWatch } from \"@itwin/core-bentley\";\nimport { Code, ElementProps, GeometricElement3dProps, GeometryStreamBuilder, GeometryStreamProps, IModel, IModelError, RelatedElement, RelationshipProps } from \"@itwin/core-common\";\nimport { LineSegment3d, Point3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { SpatialCategory } from \"../Category\";\nimport { ChannelControl } from \"../ChannelControl\";\nimport { ClassRegistry } from \"../ClassRegistry\";\nimport { GeometricElement3d, PhysicalPartition } from \"../Element\";\nimport { BriefcaseDb, IModelDb } from \"../IModelDb\";\nimport { HubMock } from \"../internal/HubMock\";\nimport { PhysicalModel } from \"../Model\";\nimport { SubjectOwnsPartitionElements } from \"../NavigationRelationship\";\nimport { ElementDrivesElement, ElementDrivesElementProps } from \"../Relationship\";\nimport { Schema, Schemas } from \"../Schema\";\nimport { HubWrappers } from \"./IModelTestUtils\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\nchai.use(chaiAsPromised);\n/**\n 1. What is Change Propagation?**\n In engineering, models often consist of many interdependent components (e.g., parts, assemblies, constraints). When you modify one component (say, changing a dimension), that change can affect other components.\n **Change propagation** is the process of updating all dependent components so the design remains consistent.\n\n 2. Why Use Topological Sort?**\n The dependencies between components can be represented as a **Directed Acyclic Graph (DAG)**:\n - **Nodes** = components or features.\n - **Edges** = dependency relationships (e.g., \"Feature B depends on Feature A\").\n\n To propagate changes correctly:\n - You must update components **in dependency order** (parents before children).\n - This is where **topological sorting** comes in—it gives a linear order of nodes such that every dependency comes before the dependent.\n\n 3. How It Works**\n **Steps:**\n 1. **Build the dependency graph**:\n - For each feature/component, list what it depends on.\n 2. **Perform topological sort**:\n - Use algorithms like **Kahn’s Algorithm** or **DFS-based sort**.\n 3. **Propagate changes in sorted order**:\n - Start from nodes with no dependencies (roots).\n - Update each node, then move to its dependents.\n\n\n 4. Example**\n Imagine a CAD model:\n - **Sketch → Extrude → Fillet → Hole**\n - If you change the **Sketch**, the **Extrude**, **Fillet**, and **Hole** must update in that order.\n\n Graph:\n Sketch → Extrude → Fillet → Hole\n Topological sort result:\n [Sketch, Extrude, Fillet, Hole]\n Update in this order to maintain consistency.\n\n 5. Benefits**\n - Prevents circular updates (since DAG ensures no cycles).\n - Ensures deterministic and efficient update propagation.\n - Scales well for complex assemblies.\n */\n\nenum Color {\n White, // unvisited\n Gray, // visiting\n Black, // visited\n}\n\nexport class Graph<T> {\n private _nodes: T[] = [];\n private _edges = new Map<T, T[]>();\n public constructor() {\n }\n\n public addNode(node: T): void {\n if (!this._nodes.includes(node))\n this._nodes.push(node);\n }\n\n public *nodes(): IterableIterator<T> {\n yield* this._nodes;\n }\n\n public *edges(): IterableIterator<{ from: T, to: T }> {\n for (const [from, toList] of this._edges.entries()) {\n for (const to of toList) {\n yield { from, to };\n }\n }\n }\n\n public addEdge(from: T, to: T | T[]): void {\n this.addNode(from);\n if (!this._edges.has(from)) {\n this._edges.set(from, []);\n }\n if (Array.isArray(to)) {\n to.forEach(t => this.addNode(t));\n this._edges.get(from)!.push(...to);\n } else {\n this.addNode(to);\n this._edges.get(from)!.push(to);\n }\n }\n public getEdges(node: T): T[] {\n if (!this._edges.has(node))\n return [];\n return this._edges.get(node)!;\n }\n public clone(): Graph<T> {\n const newGraph = new Graph<T>();\n for (const node of this._nodes) {\n newGraph.addNode(node);\n }\n for (const [from, toList] of this._edges.entries()) {\n newGraph.addEdge(from, toList);\n }\n return newGraph;\n }\n public toGraphvis(accessor: NodeAccessor<T>): string {\n // Implementation for converting the graph to Graphviz DOT format\n let dot = \"digraph G {\\n\";\n for (const node of this._nodes) {\n dot += ` \"${accessor.getId(node)}\" [label=\"${accessor.getLabel(node)}\"];\\n`;\n }\n for (const [from, toList] of this._edges.entries()) {\n for (const to of toList) {\n dot += ` \"${accessor.getId(from)}\" -> \"${accessor.getId(to)}\";\\n`;\n }\n }\n dot += \"}\\n\";\n return dot;\n }\n}\nexport interface NodeAccessor<T> {\n getLabel: (node: T) => string;\n getId: (node: T) => string;\n}\nexport class TopologicalSorter {\n private static visit<T>(graph: Graph<T>, node: T, colors: Map<T, Color>, sorted: T[], failOnCycles: boolean): void {\n if (colors.get(node) === Color.Gray) {\n if (failOnCycles)\n throw new Error(\"Graph has a cycle\");\n else {\n return;\n }\n }\n\n if (colors.get(node) === Color.White) {\n colors.set(node, Color.Gray);\n const neighbors = graph.getEdges(node);\n for (const neighbor of neighbors) {\n this.visit(graph, neighbor, colors, sorted, failOnCycles);\n }\n colors.set(node, Color.Black);\n sorted.push(node);\n }\n }\n\n public static sortDepthFirst<T>(graph: Graph<T>, updated?: T[], failOnCycles = true): T[] {\n const sorted: T[] = [];\n const colors = new Map(Array.from(graph.nodes()).map((node) => [node, Color.White]));\n if (updated) {\n // remove duplicate\n let filteredUpdated = Array.from(new Set(updated));\n filteredUpdated = filteredUpdated.filter(node => colors.get(node) === Color.White);\n if (filteredUpdated.length !== updated.length) {\n throw new Error(\"Updated list contains nodes that are not in the graph or have duplicates\");\n }\n if (filteredUpdated.length === 0)\n updated = undefined;\n else\n updated = filteredUpdated;\n }\n for (const node of updated ?? Array.from(graph.nodes())) {\n if (colors.get(node) === Color.White) {\n this.visit(graph, node, colors, sorted, failOnCycles);\n }\n }\n\n return sorted.reverse();\n }\n public static sortBreadthFirst<T>(graph: Graph<T>, updated?: T[], failOnCycles = true): T[] {\n const sorted: T[] = [];\n const queue: T[] = [];\n // Vector to store indegree of each vertex\n const inDegree = new Map<T, number>();\n for (const node of graph.nodes()) {\n inDegree.set(node, 0);\n }\n for (const edge of graph.edges()) {\n inDegree.set(edge.to, (inDegree.get(edge.to) ?? 0) + 1);\n }\n\n if (updated) {\n // remove duplicate\n const filteredUpdated = Array.from(new Set(updated));\n if (filteredUpdated.length !== updated.length) {\n throw new Error(\"Updated list contains nodes that are not in the graph or have duplicates\");\n }\n if (filteredUpdated.length === 0)\n updated = undefined;\n else\n updated = filteredUpdated;\n }\n const startNodes = updated ?? Array.from(graph.nodes());\n for (const node of startNodes) {\n if (inDegree.get(node) === 0) {\n queue.push(node);\n }\n }\n if (startNodes.length === 0) {\n throw new Error(\"Graph has at least one cycle\");\n }\n\n if (startNodes)\n while (queue.length > 0) {\n const current = queue.shift()!;\n sorted.push(current);\n\n for (const neighbor of graph.getEdges(current)) {\n inDegree.set(neighbor, (inDegree.get(neighbor) ?? 0) - 1);\n if (inDegree.get(neighbor) === 0) {\n queue.push(neighbor);\n }\n }\n }\n if (failOnCycles && sorted.length !== Array.from(graph.nodes()).length)\n throw new Error(\"Graph has at least one cycle\");\n\n return sorted;\n }\n public static validate<T>(graph: Graph<T>, sorted: T[]): boolean {\n if (sorted.length !== Array.from(graph.nodes()).length) {\n return false;\n }\n\n const position = new Map<T, number>();\n for (let i = 0; i < sorted.length; i++) {\n position.set(sorted[i], i);\n }\n\n for (const { from, to } of graph.edges()) {\n if (position.get(from)! > position.get(to)!) {\n return false;\n }\n }\n return true;\n }\n}\n\nclass ElementDrivesElementEventMonitor {\n public readonly onRootChanged: [string, string][] = [];\n public readonly onAllInputsHandled: string[] = [];\n public readonly onBeforeOutputsHandled: string[] = [];\n public readonly onDeletedDependency: [string, string][] = [];\n constructor(public iModelDb: IModelDb) {\n InputDrivesOutput.events.onDeletedDependency.addListener((props: RelationshipProps) => this.onDeletedDependency.push([this.iModelDb.elements.tryGetElement<NodeElement>(props.sourceId)?.userLabel as string, this.iModelDb.elements.tryGetElement<NodeElement>(props.targetId)?.userLabel as string]));\n InputDrivesOutput.events.onRootChanged.addListener((props: RelationshipProps) => this.onRootChanged.push([this.iModelDb.elements.tryGetElement<NodeElement>(props.sourceId)?.userLabel as string, this.iModelDb.elements.tryGetElement<NodeElement>(props.targetId)?.userLabel as string]));\n NodeElement.events.onAllInputsHandled.addListener((id: Id64String) => this.onAllInputsHandled.push(this.iModelDb.elements.tryGetElement<NodeElement>(id)?.userLabel as string));\n NodeElement.events.onBeforeOutputsHandled.addListener((id: Id64String) => this.onBeforeOutputsHandled.push(this.iModelDb.elements.tryGetElement<NodeElement>(id)?.userLabel as string));\n }\n public clear() {\n this.onRootChanged.length = 0;\n this.onAllInputsHandled.length = 0;\n this.onBeforeOutputsHandled.length = 0;\n this.onDeletedDependency.length = 0;\n }\n}\nexport interface InputDrivesOutputProps extends ElementDrivesElementProps {\n prop: number;\n}\n\nexport interface NodeElementProps extends GeometricElement3dProps {\n op: string;\n val: number;\n}\n\nexport class InputDrivesOutput extends ElementDrivesElement {\n public static readonly events = {\n onRootChanged: new BeEvent<(props: RelationshipProps, iModel: IModelDb) => void>(),\n onDeletedDependency: new BeEvent<(props: RelationshipProps, iModel: IModelDb) => void>(),\n };\n public static override get className(): string { return \"InputDrivesOutput\"; }\n protected constructor(props: InputDrivesOutputProps, iModel: IModelDb) {\n super(props, iModel);\n }\n public static override onRootChanged(props: RelationshipProps, iModel: IModelDb): void {\n this.events.onRootChanged.raiseEvent(props, iModel);\n }\n public static override onDeletedDependency(props: RelationshipProps, iModel: IModelDb): void {\n this.events.onDeletedDependency.raiseEvent(props, iModel);\n }\n}\nexport class NodeElement extends GeometricElement3d {\n public op: string;\n public val: number;\n public static readonly events = {\n onAllInputsHandled: new BeEvent<(id: Id64String, iModel: IModelDb) => void>(),\n onBeforeOutputsHandled: new BeEvent<(id: Id64String, iModel: IModelDb) => void>(),\n };\n\n public static override get className(): string { return \"Node\"; }\n protected constructor(props: NodeElementProps, iModel: IModelDb) {\n super(props, iModel);\n this.op = props.op;\n this.val = props.val;\n }\n public override toJSON(): GeometricElement3dProps {\n const val = super.toJSON() as NodeElementProps;\n val.op = this.op;\n val.val = this.val;\n return val;\n }\n protected static override onAllInputsHandled(id: Id64String, iModel: IModelDb): void {\n this.events.onAllInputsHandled.raiseEvent(id, iModel);\n }\n protected static override onBeforeOutputsHandled(id: Id64String, iModel: IModelDb): void {\n this.events.onBeforeOutputsHandled.raiseEvent(id, iModel);\n }\n public static generateGeometry(radius: number): GeometryStreamProps {\n const builder = new GeometryStreamBuilder();\n const p1 = Point3d.createZero();\n const p2 = Point3d.createFrom({ x: radius, y: 0.0, z: 0.0 });\n const circle = LineSegment3d.create(p1, p2);\n builder.appendGeometry(circle);\n return builder.geometryStream;\n }\n public static getCategory(iModelDb: IModelDb) {\n const categoryId = SpatialCategory.queryCategoryIdByName(iModelDb, IModelDb.dictionaryId, this.classFullName);\n if (categoryId === undefined)\n throw new IModelError(IModelStatus.NotFound, \"Category not found\");\n return iModelDb.elements.getElement(categoryId);\n }\n}\n\nexport class NetworkSchema extends Schema {\n public static override get schemaName(): string { return \"Network\"; }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(NetworkSchema.schemaName)) {\n Schemas.registerSchema(this);\n ClassRegistry.register(NodeElement, this);\n ClassRegistry.register(InputDrivesOutput, this);\n }\n }\n\n public static async importSchema(iModel: IModelDb): Promise<void> {\n if (iModel.querySchemaVersion(\"Network\"))\n return;\n\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Network\" alias=\"net\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Node\">\n <BaseClass>bis:GraphicalElement3d</BaseClass>\n <ECProperty propertyName=\"op\" typeName=\"string\" />\n <ECProperty propertyName=\"val\" typeName=\"double\" />\n </ECEntityClass>\n <ECRelationshipClass typeName=\"InputDrivesOutput\" modifier=\"None\" strength=\"referencing\">\n <BaseClass>bis:ElementDrivesElement</BaseClass>\n <Source multiplicity=\"(0..1)\" roleLabel=\"drives\" polymorphic=\"true\">\n <Class class=\"Node\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"is driven by\" polymorphic=\"false\">\n <Class class=\"Node\"/>\n </Target>\n <ECProperty propertyName=\"prop\" typeName=\"double\" />\n </ECRelationshipClass>\n </ECSchema>`;\n await iModel.importSchemaStrings([schema1]);\n }\n}\n\nexport class Engine {\n public static async createGraph(iModelDb: IModelDb, modelId: Id64String, graph: Graph<string>): Promise<Graph<{ id: Id64String, name: string }>> {\n const nodes = new Map<string, { id: Id64String, name: string }>();\n const outGraph = new Graph<{ id: Id64String, name: string }>();\n for (const node of graph.nodes()) {\n const id = await this.insertNode(iModelDb, modelId, node, \"\", 0, new Point3d(0, 0, 0));\n nodes.set(node, { id, name: node });\n }\n for (const edge of graph.edges()) {\n const fromId = nodes.get(edge.from)!.id;\n const toId = nodes.get(edge.to)!.id;\n await this.insertEdge(iModelDb, fromId, toId, 0);\n outGraph.addEdge(nodes.get(edge.from)!, nodes.get(edge.to)!);\n }\n return outGraph;\n }\n public static countNodes(iModelDb: IModelDb): number {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModelDb.withPreparedStatement(\"SELECT COUNT(*) FROM Network.Node\", (stmt) => {\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n return stmt.getValue(0).getInteger();\n }\n return 0;\n });\n }\n public static countEdges(iModelDb: IModelDb): number {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModelDb.withPreparedStatement(\"SELECT COUNT(*) FROM [Network].[InputDrivesOutput]\", (stmt) => {\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n return stmt.getValue(0).getInteger();\n }\n return 0;\n });\n }\n public static queryEdgesForSource(iModelDb: IModelDb, sourceId: Id64String): InputDrivesOutputProps[] {\n const edges: InputDrivesOutputProps[] = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(\"SELECT [ECInstanceId], [SourceECInstanceId], [TargetECInstanceId], [prop], [Status], [Priority] FROM [Network].[InputDrivesOutput] WHERE [SourceECInstanceId] = ?\", (stmt) => {\n stmt.bindId(1, sourceId);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n edges.push({\n id: stmt.getValue(0).getId(),\n classFullName: InputDrivesOutput.classFullName,\n sourceId: stmt.getValue(1).getId(),\n targetId: stmt.getValue(2).getId(),\n prop: stmt.getValue(3).getDouble(),\n status: stmt.getValue(4).getInteger(),\n priority: stmt.getValue(5).getInteger(),\n });\n }\n });\n return edges;\n }\n public static queryEdgesForTarget(iModelDb: IModelDb, targetId: Id64String): InputDrivesOutputProps[] {\n const edges: InputDrivesOutputProps[] = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModelDb.withPreparedStatement(\"SELECT [ECInstanceId], [SourceECInstanceId], [TargetECInstanceId], [prop], [Status], [Priority] FROM [Network].[InputDrivesOutput] WHERE [TargetECInstanceId] = ?\", (stmt) => {\n stmt.bindId(1, targetId);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n edges.push({\n id: stmt.getValue(0).getId(),\n classFullName: InputDrivesOutput.classFullName,\n sourceId: stmt.getValue(1).getId(),\n targetId: stmt.getValue(2).getId(),\n prop: stmt.getValue(3).getDouble(),\n status: stmt.getValue(4).getInteger(),\n priority: stmt.getValue(5).getInteger(),\n });\n }\n });\n return edges;\n }\n private static async createPartition(iModelDb: IModelDb): Promise<Id64String> {\n const parentId = new SubjectOwnsPartitionElements(IModel.rootSubjectId);\n const modelId = IModel.repositoryModelId;\n const modeledElementProps: ElementProps = {\n classFullName: PhysicalPartition.classFullName,\n parent: parentId,\n model: modelId,\n code: Code.createEmpty(),\n userLabel: \"NetworkPhysicalPartition\"\n };\n const modeledElement = iModelDb.elements.createElement(modeledElementProps);\n await iModelDb.locks.acquireLocks({ shared: modelId });\n return iModelDb.elements.insertElement(modeledElement.toJSON());\n }\n private static async createModel(iModelDb: IModelDb): Promise<Id64String> {\n const partitionId = await this.createPartition(iModelDb);\n const modeledElementRef = new RelatedElement({ id: partitionId });\n const newModel = iModelDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName });\n const newModelId = newModel.insert();\n return newModelId;\n }\n private static async createNodeCategory(iModelDb: IModelDb) {\n const category = SpatialCategory.create(iModelDb, IModelDb.dictionaryId, NodeElement.classFullName);\n return category.insert();\n }\n public static async initialize(iModelDb: IModelDb) {\n await NetworkSchema.importSchema(iModelDb);\n NetworkSchema.registerSchema();\n const modelId = await this.createModel(iModelDb);\n const categoryId = await this.createNodeCategory(iModelDb);\n return {\n modelId,\n categoryId,\n };\n }\n public static async insertNode(iModelDb: IModelDb, modelId: Id64String, name: string, op: string, val: number, location: Point3d, radius: number = 0.1) {\n const props: NodeElementProps = {\n classFullName: NodeElement.classFullName,\n model: modelId,\n code: Code.createEmpty(),\n userLabel: name,\n category: NodeElement.getCategory(iModelDb).id,\n placement: { origin: location, angles: new YawPitchRollAngles() },\n geom: NodeElement.generateGeometry(radius),\n op,\n val,\n };\n await iModelDb.locks.acquireLocks({ shared: modelId });\n return iModelDb.elements.insertElement(props);\n }\n public static async deleteNode(iModelDb: IModelDb, nodeId: Id64String) {\n await iModelDb.locks.acquireLocks({ exclusive: nodeId });\n return iModelDb.elements.deleteElement(nodeId);\n }\n public static async updateNodeProps(iModelDb: IModelDb, props: Partial<NodeElementProps>) {\n await iModelDb.locks.acquireLocks({ exclusive: props.id });\n return iModelDb.elements.updateElement(props);\n }\n public static async updateNode(iModelDb: IModelDb, userLabel: string) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const id = iModelDb.withPreparedStatement(\"SELECT [ECInstanceId] FROM [Network].[Node] WHERE [UserLabel] = ?\", (stmt) => {\n stmt.bindString(1, userLabel);\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\n return stmt.getValue(0).getId();\n return undefined;\n });\n if (!id) {\n throw new Error(`Node with userLabel ${userLabel} not found`);\n }\n await this.updateNodeProps(iModelDb, { id });\n }\n public static async deleteEdge(iModelDb: IModelDb, from: string, to: string) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const edge = iModelDb.withPreparedStatement(`\n SELECT [IDo].[ECInstanceId], [IDo].[SourceECInstanceId], [IDo].[TargetECInstanceId]\n FROM [Network].[InputDrivesOutput] [IDo]\n JOIN [Network].[Node] [Src] ON [Src].[ECInstanceId] = [IDo].[SourceECInstanceId]\n JOIN [Network].[Node] [Tgt] ON [Tgt].[ECInstanceId] = [IDo].[TargetECInstanceId]\n WHERE [Src].[UserLabel] = ? AND [Tgt].[UserLabel] = ?`, (stmt) => {\n stmt.bindString(1, from);\n stmt.bindString(2, to);\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\n return {\n id: stmt.getValue(0).getId(),\n classFullName: InputDrivesOutput.classFullName,\n sourceId: stmt.getValue(1).getId(),\n targetId: stmt.getValue(2).getId(),\n } as RelationshipProps;\n return undefined;\n });\n if (!edge) {\n throw new Error(`Edge from ${from} to ${to} not found`);\n }\n iModelDb.relationships.deleteInstance(edge);\n }\n public static async insertEdge(iModelDb: IModelDb, sourceId: Id64String, targetId: Id64String, prop: number) {\n const props: InputDrivesOutputProps = {\n classFullName: InputDrivesOutput.classFullName,\n sourceId,\n targetId,\n prop,\n status: 0,\n priority: 0\n };\n return iModelDb.relationships.insertInstance(props);\n }\n}\n\ndescribe(\"ElementDrivesElement Tests\", () => {\n const briefcases: BriefcaseDb[] = [];\n let iModelId: string;\n async function openBriefcase(): Promise<BriefcaseDb> {\n const iModelDb = await HubWrappers.downloadAndOpenBriefcase({ iTwinId: HubMock.iTwinId, iModelId });\n iModelDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n iModelDb.saveChanges();\n briefcases.push(iModelDb);\n return iModelDb;\n }\n beforeEach(async () => {\n HubMock.startup(\"TestIModel\", KnownTestLocations.outputDir);\n iModelId = await HubMock.createNewIModel({ iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\n });\n afterEach(async () => {\n NodeElement.events.onAllInputsHandled.clear();\n NodeElement.events.onBeforeOutputsHandled.clear();\n InputDrivesOutput.events.onRootChanged.clear();\n InputDrivesOutput.events.onDeletedDependency.clear();\n for (const briefcase of briefcases) {\n briefcase.close();\n }\n HubMock.shutdown();\n });\n it(\"local: topological sort\", async () => {\n const graph = new Graph<string>();\n\n graph.addEdge(\"1\", [\"2\", \"3\"]);\n graph.addEdge(\"2\", [\"5\", \"4\"]);\n graph.addEdge(\"3\", [\"4\"]);\n graph.addEdge(\"4\", [\"5\"]);\n const df = TopologicalSorter.sortDepthFirst(graph);\n chai.expect(TopologicalSorter.validate(graph, df)).to.be.true;\n chai.expect(df).to.deep.equal([\"1\", \"3\", \"2\", \"4\", \"5\"]);\n\n const bf = TopologicalSorter.sortBreadthFirst(graph);\n chai.expect(TopologicalSorter.validate(graph, bf)).to.be.true;\n chai.expect(bf).to.deep.equal([\"1\", \"2\", \"3\", \"4\", \"5\"]);\n });\n\n it(\"local: cycle detection (suppress cycles)\", async () => {\n const graph = new Graph<string>();\n // Graph structure:\n // 1 --> 2 <-- 3\n // ^ |\n // |-----------|\n graph.addEdge(\"1\", [\"2\"]);\n graph.addEdge(\"2\", [\"3\"]);\n graph.addEdge(\"3\", [\"1\"]);\n\n const df = TopologicalSorter.sortDepthFirst(graph, [], false);\n chai.expect(TopologicalSorter.validate(graph, df)).to.be.false;\n chai.expect(df).to.deep.equal([\"1\", \"2\", \"3\"]);\n });\n it(\"local: cycle detection (throw)\", async () => {\n const graph = new Graph<string>();\n // Graph structure:\n // 1 --> 2 --> 3\n // ^ |\n // |-----------|\n graph.addEdge(\"1\", [\"2\"]);\n graph.addEdge(\"2\", [\"3\"]);\n graph.addEdge(\"3\", [\"1\"]);\n\n chai.expect(() => TopologicalSorter.sortDepthFirst(graph)).to.throw(\n \"Graph has a cycle\"\n );\n });\n it(\"EDE/local: build system dependencies\", async () => {\n const graph = new Graph<string>();\n /*\n Example: Build system dependencies\n\n - Compile main.c and util.c to main.o and util.o\n - Link main.o and util.o to produce app.exe\n - app.exe depends on config.json\n - test.exe depends on main.o, util.o, and test.c\n\n Graph:\n main.c util.c test.c config.json\n | | | |\n v v | |\n main.o util.o | |\n \\ / | |\n \\ / | |\n app.exe test.exe |\n | | |\n +----------------+---------+\n */\n\n graph.addEdge(\"main.c\", [\"main.o\"]);\n graph.addEdge(\"util.c\", [\"util.o\"]);\n graph.addEdge(\"test.c\", [\"test.exe\"]);\n graph.addEdge(\"main.o\", [\"app.exe\", \"test.exe\"]);\n graph.addEdge(\"util.o\", [\"app.exe\", \"test.exe\"]);\n graph.addEdge(\"config.json\", [\"app.exe\", \"test.exe\"]);\n\n\n // create graph\n const b1 = await openBriefcase();\n const { modelId, } = await Engine.initialize(b1);\n const monitor = new ElementDrivesElementEventMonitor(b1);\n await Engine.createGraph(b1, modelId, graph);\n b1.saveChanges();\n b1.saveChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([\n [\"main.c\", \"main.o\"],\n [\"main.o\", \"test.exe\"],\n [\"main.o\", \"app.exe\"],\n [\"util.c\", \"util.o\"],\n [\"util.o\", \"test.exe\"],\n [\"util.o\", \"app.exe\"],\n [\"test.c\", \"test.exe\"],\n [\"config.json\", \"test.exe\"],\n [\"config.json\", \"app.exe\"],\n ]);\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"main.o\", \"util.o\", \"test.exe\", \"app.exe\"]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"main.c\", \"util.c\", \"test.c\", \"config.json\"]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\n\n // update main.c\n monitor.clear();\n await Engine.updateNode(b1, \"main.c\");\n b1.saveChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([\n [\"main.c\", \"main.o\"],\n [\"main.o\", \"test.exe\"],\n [\"main.o\", \"app.exe\"],\n ]);\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"main.o\", \"test.exe\", \"app.exe\"]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"main.c\"]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\n\n // Topological sort (depth-first)\n const df = TopologicalSorter.sortDepthFirst(graph);\n chai.expect(TopologicalSorter.validate(graph, df)).to.be.true;\n\n // Topological sort (breadth-first)\n const bf = TopologicalSorter.sortBreadthFirst(graph);\n chai.expect(TopologicalSorter.validate(graph, bf)).to.be.true;\n chai.expect(df).to.deep.equal([\"config.json\", \"test.c\", \"util.c\", \"util.o\", \"main.c\", \"main.o\", \"test.exe\", \"app.exe\"]);\n chai.expect(bf).to.deep.equal([\"main.c\", \"util.c\", \"test.c\", \"config.json\", \"main.o\", \"util.o\", \"app.exe\", \"test.exe\"]);\n });\n it(\"EDE/local: complex, subset\", async () => {\n const graph = new Graph<string>();\n /*\n Graph shows what must be put on before other items:\n - Socks before Shoes\n - Underwear before Shoes and Pants\n - Pants before Belt and Shoes\n - Shirt before Belt and Tie\n - Tie before Jacket\n - Belt before Jacket\n - Watch has no dependencies\n */\n\n graph.addEdge(\"Socks\", [\"Shoes\"]);\n graph.addEdge(\"Underwear\", [\"Shoes\", \"Pants\"]);\n graph.addEdge(\"Pants\", [\"Belt\", \"Shoes\"]);\n graph.addEdge(\"Shirt\", [\"Belt\", \"Tie\"]);\n graph.addEdge(\"Tie\", [\"Jacket\"]);\n graph.addEdge(\"Belt\", [\"Jacket\"]);\n graph.addNode(\"Watch\");\n\n // Test using EDE\n const b1 = await openBriefcase();\n const { modelId, } = await Engine.initialize(b1);\n const monitor = new ElementDrivesElementEventMonitor(b1);\n await Engine.createGraph(b1, modelId, graph);\n b1.saveChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([\n [\"Socks\", \"Shoes\"],\n [\"Underwear\", \"Shoes\"],\n [\"Underwear\", \"Pants\"],\n [\"Pants\", \"Shoes\"],\n [\"Pants\", \"Belt\"],\n [\"Shirt\", \"Belt\"],\n [\"Belt\", \"Jacket\"],\n [\"Shirt\", \"Tie\"],\n [\"Tie\", \"Jacket\"]\n ]);\n\n // Watch is missing as it is not connected to any other node.\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"Pants\", \"Shoes\", \"Belt\", \"Tie\", \"Jacket\"]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"Socks\", \"Underwear\", \"Shirt\"]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\n\n monitor.clear();\n await Engine.updateNode(b1, \"Socks\");\n b1.saveChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([[\"Socks\", \"Shoes\"]]);\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"Shoes\"]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"Socks\"]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\n\n const sorted = TopologicalSorter.sortDepthFirst(graph);\n chai.expect(TopologicalSorter.validate(graph, sorted)).to.be.true;\n chai.expect(sorted).to.deep.equal([\"Watch\", \"Shirt\", \"Tie\", \"Underwear\", \"Pants\", \"Belt\", \"Jacket\", \"Socks\", \"Shoes\"]);\n\n // Test sorting with a subset of nodes\n const sorted1 = TopologicalSorter.sortDepthFirst(graph, [\"Underwear\"]);\n chai.expect(sorted1).to.deep.equal([\"Underwear\", \"Pants\", \"Belt\", \"Jacket\", \"Shoes\"]);\n\n const sorted2 = TopologicalSorter.sortDepthFirst(graph, [\"Belt\"]);\n chai.expect(sorted2).to.deep.equal([\"Belt\", \"Jacket\"]);\n\n const sorted3 = TopologicalSorter.sortDepthFirst(graph, [\"Shoes\"]);\n chai.expect(sorted3).to.deep.equal([\"Shoes\"]);\n\n const sorted4 = TopologicalSorter.sortDepthFirst(graph, [\"Socks\"]);\n chai.expect(sorted4).to.deep.equal([\"Socks\", \"Shoes\"]);\n\n const sorted5 = TopologicalSorter.sortDepthFirst(graph, [\"Tie\"]);\n chai.expect(sorted5).to.deep.equal([\"Tie\", \"Jacket\"]);\n\n const sorted6 = TopologicalSorter.sortDepthFirst(graph, [\"Jacket\"]);\n chai.expect(sorted6).to.deep.equal([\"Jacket\"]);\n\n const sorted7 = TopologicalSorter.sortDepthFirst(graph, [\"Shirt\"]);\n chai.expect(sorted7).to.deep.equal([\"Shirt\", \"Tie\", \"Belt\", \"Jacket\"]);\n\n const sorted8 = TopologicalSorter.sortDepthFirst(graph, [\"Watch\"]);\n chai.expect(sorted8).to.deep.equal([\"Watch\"]);\n });\n\n it(\"EDE: basic graph operations\", async () => {\n const b1 = await openBriefcase();\n const { modelId, } = await Engine.initialize(b1);\n const graph = new Graph<string>();\n\n // Graph structure:\n // A\n // / \\\n // B C\n // |\\ /\n // | \\/\n // E--D \n graph.addEdge(\"A\", [\"B\", \"C\"]);\n graph.addEdge(\"B\", [\"E\", \"D\"]);\n graph.addEdge(\"C\", [\"D\"]);\n graph.addEdge(\"D\", [\"E\"]);\n const monitor = new ElementDrivesElementEventMonitor(b1);\n\n // create a network\n await Engine.createGraph(b1, modelId, graph);\n b1.saveChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([\n [\"A\", \"B\"],\n [\"A\", \"C\"],\n [\"B\", \"E\"],\n [\"B\", \"D\"],\n [\"C\", \"D\"],\n [\"D\", \"E\"]]);\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"B\", \"C\", \"D\", \"E\"]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"A\"]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\n monitor.clear();\n\n // update a node in network\n await Engine.updateNode(b1, \"B\");\n b1.saveChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([\n [\"B\", \"E\"],\n [\"B\", \"D\"],\n [\"D\", \"E\"]]);\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"D\", \"E\"]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([\"B\"]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\n monitor.clear();\n\n // delete edge in network\n await Engine.deleteEdge(b1, \"B\", \"E\");\n b1.saveChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([]);\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([[\"B\", \"E\"]]);\n });\n it(\"EDE: cyclical throw exception\", async () => {\n const b1 = await openBriefcase();\n const { modelId, } = await Engine.initialize(b1);\n const graph = new Graph<string>();\n // Graph structure with a cycle:\n // A\n // / \\\n // B - C\n\n graph.addEdge(\"A\", [\"B\"]);\n graph.addEdge(\"B\", [\"C\"]);\n graph.addEdge(\"C\", [\"A\"]);\n\n const monitor = new ElementDrivesElementEventMonitor(b1);\n // create a network\n await Engine.createGraph(b1, modelId, graph);\n chai.expect(() => b1.saveChanges()).to.throw(\"Could not save changes due to propagation failure.\");\n b1.abandonChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([[\"B\", \"C\"], [\"C\", \"A\"], [\"A\", \"B\"]]);\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"C\", \"A\", \"B\"]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\n monitor.clear();\n });\n it(\"EDE: cyclical graph can start propagation with no clear starting element\", async () => {\n const b1 = await openBriefcase();\n const { modelId, } = await Engine.initialize(b1);\n const graph = new Graph<string>();\n // Graph structure with a cycle:\n // A\n // / \\\n // B - C\n\n // order of insertion effect graph with cycles.\n graph.addNode(\"B\");\n graph.addNode(\"A\");\n graph.addNode(\"C\");\n\n graph.addEdge(\"A\", [\"B\"]);\n graph.addEdge(\"B\", [\"C\"]);\n graph.addEdge(\"C\", [\"A\"]);\n\n const monitor = new ElementDrivesElementEventMonitor(b1);\n // create a network\n await Engine.createGraph(b1, modelId, graph);\n chai.expect(() => b1.saveChanges()).to.throw(\"Could not save changes due to propagation failure.\");\n b1.abandonChanges();\n chai.expect(monitor.onRootChanged).to.deep.equal([[\"C\", \"A\"], [\"A\", \"B\"], [\"B\", \"C\"]]);\n chai.expect(monitor.onAllInputsHandled).to.deep.equal([\"A\", \"B\", \"C\"]);\n chai.expect(monitor.onBeforeOutputsHandled).to.deep.equal([]);\n chai.expect(monitor.onDeletedDependency).to.deep.equal([]);\n monitor.clear();\n });\n it.skip(\"EDE: performance\", async () => {\n const b1 = await openBriefcase();\n const { modelId, } = await Engine.initialize(b1);\n const graph = new Graph<string>();\n\n const createTree = (depth: number, breadth: number, prefix: string) => {\n if (depth === 0)\n return;\n for (let i = 0; i < breadth; i++) {\n const node = `${prefix}${i}`;\n graph.addNode(node);\n if (depth > 1) {\n for (let j = 0; j < breadth; j++) {\n const child = `${prefix}${i}${j}`;\n graph.addEdge(node, [child]);\n createTree(depth - 1, breadth, `${prefix}${i}${j}`);\n }\n }\n }\n };\n\n const stopWatch0 = new StopWatch(\"create graph\", true);\n createTree(5, 3, \"N\");\n await Engine.createGraph(b1, modelId, graph);\n stopWatch0.stop();\n const createGraphTime = stopWatch0.elapsed.seconds;\n\n let onRootChangedCount = 0;\n let onDeletedDependencyCount = 0;\n let onAllInputsHandledCount = 0;\n let onBeforeOutputsHandledCount = 0;\n InputDrivesOutput.events.onRootChanged.addListener(() => { onRootChangedCount++; });\n InputDrivesOutput.events.onDeletedDependency.addListener(() => { onDeletedDependencyCount++; });\n NodeElement.events.onAllInputsHandled.addListener((_id: Id64String) => { onAllInputsHandledCount++; });\n NodeElement.events.onBeforeOutputsHandled.addListener(() => { onBeforeOutputsHandledCount++; });\n\n const stopWatch1 = new StopWatch(\"save changes\", true);\n b1.saveChanges();\n stopWatch1.stop();\n const saveChangesTime = stopWatch1.elapsed.seconds;\n chai.expect(onRootChangedCount).to.be.equals(7380);\n chai.expect(onDeletedDependencyCount).to.equal(0);\n chai.expect(onAllInputsHandledCount).to.be.equals(7380);\n chai.expect(onBeforeOutputsHandledCount).to.equal(2460);\n chai.expect(createGraphTime).to.be.lessThan(3);\n chai.expect(saveChangesTime).to.be.lessThan(3);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementLRUCache.test.js","sourceRoot":"","sources":["../../../src/test/ElementLRUCache.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\r\nimport { CachedElement, ElementLRUCache, InstanceKeyLRUCache } from \"../internal/ElementLRUCache\";\r\nimport { IModelJsNative } from \"../core-backend\";\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\n\r\ndescribe('ElementLruCache', () => {\r\n const testElem1: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId\",\r\n model: \"testModel\",\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n },\r\n classFullName: \"testName\"\r\n },\r\n }\r\n\r\n const testElem2: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId2\",\r\n model: \"testModel2\",\r\n code: {\r\n spec: \"testSpec2\",\r\n scope: \"testScope2\",\r\n value: \"testValue2\"\r\n },\r\n classFullName: \"testName2\"\r\n },\r\n }\r\n\r\n const testElem3: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId3\",\r\n model: \"testModel3\",\r\n code: {\r\n spec: \"testSpec3\",\r\n scope: \"testScope3\"\r\n },\r\n classFullName: \"testName3\"\r\n },\r\n }\r\n\r\n const testElemFedGuid: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testIdFed\",\r\n model: \"testModel\",\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n },\r\n classFullName: \"testName\",\r\n federationGuid: \"testFedGuid\"\r\n },\r\n }\r\n\r\n const testElemCode: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId5\",\r\n model: \"testModel5\",\r\n code: {\r\n spec: \"testSpec2:testValue2\",\r\n scope: \"testScope2\"\r\n },\r\n classFullName: \"testName5\",\r\n federationGuid: \"testFedGuid5\"\r\n },\r\n }\r\n\r\n const testElemNoId: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: undefined,\r\n model: \"testModel5\",\r\n code: {\r\n spec: \"testSpec2\",\r\n scope: \"testScope2\"\r\n },\r\n classFullName: \"testName5\",\r\n federationGuid: \"testFedGuid5\"\r\n },\r\n }\r\n\r\n it('should store and retrieve a valid element', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem1);\r\n });\r\n\r\n it('should overwrite existing valid element', () => {\r\n const cache = new ElementLRUCache(3);\r\n const testElemModel = testElem1;\r\n cache.set(testElemModel);\r\n const retrievedElem = cache.get({ id: testElemModel.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElemModel);\r\n\r\n testElemModel.elProps.model = \"newModel\";\r\n cache.set(testElemModel);\r\n const retrievedElem2 = cache.get({ id: testElemModel.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElemModel);\r\n });\r\n\r\n it('should store and retrieve a valid element by fedGuid', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElemFedGuid);\r\n const retrievedElem = cache.get({ federationGuid: testElemFedGuid.elProps.federationGuid });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElemFedGuid);\r\n });\r\n\r\n it('should store and retrieve a valid element by code', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n const retrievedElem = cache.get({ code: testElem1.elProps.code });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem1);\r\n\r\n cache.set(testElem2);\r\n const retrievedElem2 = cache.get({ code: testElem2.elProps.code });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem2);\r\n });\r\n\r\n it('should fail to store an element without id', () => {\r\n const cache = new ElementLRUCache(3);\r\n expect(() => cache.set(testElemNoId)).to.throw(Error, \"Element must have an id\");\r\n });\r\n\r\n it('should delete least used element', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n cache.set(testElemFedGuid);\r\n expect(cache.size).to.equal(3);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem2);\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.be.undefined;\r\n\r\n const retrievedElem3 = cache.get({ id: testElem3.elProps.id });\r\n expect(retrievedElem3).to.not.be.undefined;\r\n expect(retrievedElem3).to.equal(testElem3);\r\n });\r\n\r\n it('should delete with id', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ id: testElem2.elProps.id });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with federation guid', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElemFedGuid);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ federationGuid: testElemFedGuid.elProps.federationGuid });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElemFedGuid.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with code', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ code: testElem2.elProps.code });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with model id', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.deleteWithModel(testElem2.elProps.model);\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should clear the cache', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.clear();\r\n expect(cache.size).to.equal(0);\r\n\r\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n\r\n it('should not return wrong element when passed a manipulated code value', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem2);\r\n expect(cache.size).to.equal(1);\r\n\r\n const retrievedElem = cache.get({ code: testElemCode.elProps.code });\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n});\r\n\r\ndescribe('InstanceKeyLRUCache', () => {\r\n const testArgs1: IModelJsNative.ResolveInstanceKeyArgs = {\r\n partialKey: {\r\n id: Id64.fromJSON(\"0x123\"),\r\n baseClassName: \"baseName\",\r\n },\r\n }\r\n\r\n const testArgs2: IModelJsNative.ResolveInstanceKeyArgs = {\r\n federationGuid: \"testFedGuid\",\r\n }\r\n\r\n const testArgs3: IModelJsNative.ResolveInstanceKeyArgs = {\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\",\r\n value: \"testValue\"\r\n }\r\n }\r\n\r\n const testArgs4: IModelJsNative.ResolveInstanceKeyArgs = {\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n }\r\n }\r\n\r\n const testResults: IModelJsNative.ResolveInstanceKeyResult[] = [\r\n {\r\n id: Id64.fromJSON(\"0x123\"),\r\n classFullName: \"testName1\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x122\"),\r\n classFullName: \"testName2\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x133\"),\r\n classFullName: \"testName3\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x144\"),\r\n classFullName: \"testName4\",\r\n }\r\n ];\r\n\r\n it('should store and retrieve a valid InstanceKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n });\r\n\r\n it('should overwrite existing valid InstanceKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n const testResult = testResults[0];\r\n cache.set(testArgs1, testResult);\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResult);\r\n\r\n const newTestResult = { id: testResult.id, classFullName: \"newModel\" };\r\n cache.set(testArgs1, newTestResult);\r\n const retrievedResult2 = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(newTestResult);\r\n });\r\n\r\n it('should store and retrieve a valid InstanceKey by fedGuid', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs2, testResults[0]);\r\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n });\r\n\r\n it('should store and retrieve a valid InstanceKey by code', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs3, testResults[0]);\r\n const retrievedResult = cache.get({ code: testArgs3.code });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n\r\n cache.set(testArgs4, testResults[1]);\r\n const retrievedResult2 = cache.get({ code: testArgs4.code });\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should find the same InstanceKey with either code, fedGuid, or Id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set({ ...testArgs1, ...testArgs2, ...testArgs3}, testResults[0]);\r\n\r\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResultById).to.not.be.undefined;\r\n expect(retrievedResultById).to.equal(testResults[0]);\r\n\r\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResultByFedGuid).to.not.be.undefined;\r\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\r\n\r\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\r\n expect(retrievedResultByCode).to.not.be.undefined;\r\n expect(retrievedResultByCode).to.equal(testResults[0]);\r\n });\r\n\r\n it('should update an existing InstanceKey with either code, fedGuid, or Id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[0]);\r\n cache.set(testArgs3, testResults[0]);\r\n\r\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResultById).to.not.be.undefined;\r\n expect(retrievedResultById).to.equal(testResults[0]);\r\n\r\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResultByFedGuid).to.not.be.undefined;\r\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\r\n\r\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\r\n expect(retrievedResultByCode).to.not.be.undefined;\r\n expect(retrievedResultByCode).to.equal(testResults[0]);\r\n });\r\n\r\n it('should not store a bad id as result in the cache', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n const badResult: IModelJsNative.ResolveInstanceKeyResult = { id: Id64.invalid, classFullName: \"badName\" };\r\n expect(() => cache.set(testArgs1, badResult)).to.throw(Error, \"Invalid InstanceKey result\");\r\n expect(cache.size).to.equal(0);\r\n });\r\n\r\n it('should delete least used element', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n cache.set(testArgs4, testResults[3]);\r\n expect(cache.size).to.equal(3);\r\n\r\n const retrievedResult = cache.get(testArgs2);\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[1]);\r\n\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.be.undefined;\r\n\r\n const retrievedResult3 = cache.get(testArgs3);\r\n expect(retrievedResult3).to.not.be.undefined;\r\n expect(retrievedResult3).to.equal(testResults[2]);\r\n });\r\n\r\n it('should delete with partialKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ partialKey: testArgs1.partialKey });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs2);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should delete with id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.deleteById(testArgs1.partialKey!.id);\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs2);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should throw when deleting with a bad id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n expect(() => cache.deleteById(\"badid\")).to.throw(Error, \"Invalid id provided\");\r\n expect(cache.size).to.equal(3);\r\n });\r\n\r\n it('should delete with federation guid', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ federationGuid: testArgs2.federationGuid });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs3);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[2]);\r\n });\r\n\r\n it('should delete with code', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ code: testArgs3.code });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ code: testArgs3.code });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[0]);\r\n });\r\n\r\n it('should delete with any applicable arg', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[0]);\r\n cache.set(testArgs3, testResults[0]);\r\n expect(cache.size).to.equal(1);\r\n cache.delete(testArgs3);\r\n expect(cache.size).to.equal(0);\r\n const retrievedResult = cache.get(testArgs1);\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.set(testArgs4, testResults[0]);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.delete(testArgs4);\r\n expect(cache.size).to.equal(2);\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.be.undefined;\r\n });\r\n\r\n it('should throw when trying to delete with all undefined keys', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n\r\n expect(() => cache.delete({\r\n partialKey: undefined,\r\n federationGuid: undefined,\r\n code: undefined\r\n })).to.throw(Error, \"ResolveInstanceKeyArgs must have a partialKey, code, or federationGuid\");\r\n\r\n expect(cache.size).to.equal(3);\r\n });\r\n\r\n it('should clear the cache', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.clear();\r\n expect(cache.size).to.equal(0);\r\n\r\n const retrievedElem = cache.get(testArgs1);\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n});"]}
1
+ {"version":3,"file":"ElementLRUCache.test.js","sourceRoot":"","sources":["../../../src/test/ElementLRUCache.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\nimport { CachedElement, ElementLRUCache, InstanceKeyLRUCache } from \"../internal/ElementLRUCache\";\nimport { IModelJsNative } from \"../core-backend\";\nimport { Id64 } from \"@itwin/core-bentley\";\n\ndescribe('ElementLruCache', () => {\n const testElem1: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId\",\n model: \"testModel\",\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n },\n classFullName: \"testName\"\n },\n }\n\n const testElem2: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId2\",\n model: \"testModel2\",\n code: {\n spec: \"testSpec2\",\n scope: \"testScope2\",\n value: \"testValue2\"\n },\n classFullName: \"testName2\"\n },\n }\n\n const testElem3: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId3\",\n model: \"testModel3\",\n code: {\n spec: \"testSpec3\",\n scope: \"testScope3\"\n },\n classFullName: \"testName3\"\n },\n }\n\n const testElemFedGuid: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testIdFed\",\n model: \"testModel\",\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n },\n classFullName: \"testName\",\n federationGuid: \"testFedGuid\"\n },\n }\n\n const testElemCode: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId5\",\n model: \"testModel5\",\n code: {\n spec: \"testSpec2:testValue2\",\n scope: \"testScope2\"\n },\n classFullName: \"testName5\",\n federationGuid: \"testFedGuid5\"\n },\n }\n\n const testElemNoId: CachedElement = {\n loadOptions: {},\n elProps: {\n id: undefined,\n model: \"testModel5\",\n code: {\n spec: \"testSpec2\",\n scope: \"testScope2\"\n },\n classFullName: \"testName5\",\n federationGuid: \"testFedGuid5\"\n },\n }\n\n it('should store and retrieve a valid element', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem1);\n });\n\n it('should overwrite existing valid element', () => {\n const cache = new ElementLRUCache(3);\n const testElemModel = testElem1;\n cache.set(testElemModel);\n const retrievedElem = cache.get({ id: testElemModel.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElemModel);\n\n testElemModel.elProps.model = \"newModel\";\n cache.set(testElemModel);\n const retrievedElem2 = cache.get({ id: testElemModel.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElemModel);\n });\n\n it('should store and retrieve a valid element by fedGuid', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElemFedGuid);\n const retrievedElem = cache.get({ federationGuid: testElemFedGuid.elProps.federationGuid });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElemFedGuid);\n });\n\n it('should store and retrieve a valid element by code', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n const retrievedElem = cache.get({ code: testElem1.elProps.code });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem1);\n\n cache.set(testElem2);\n const retrievedElem2 = cache.get({ code: testElem2.elProps.code });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem2);\n });\n\n it('should fail to store an element without id', () => {\n const cache = new ElementLRUCache(3);\n expect(() => cache.set(testElemNoId)).to.throw(Error, \"Element must have an id\");\n });\n\n it('should delete least used element', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n cache.set(testElemFedGuid);\n expect(cache.size).to.equal(3);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem2);\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.be.undefined;\n\n const retrievedElem3 = cache.get({ id: testElem3.elProps.id });\n expect(retrievedElem3).to.not.be.undefined;\n expect(retrievedElem3).to.equal(testElem3);\n });\n\n it('should delete with id', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.delete({ id: testElem2.elProps.id });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with federation guid', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElemFedGuid);\n expect(cache.size).to.equal(3);\n cache.delete({ federationGuid: testElemFedGuid.elProps.federationGuid });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElemFedGuid.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with code', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.delete({ code: testElem2.elProps.code });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with model id', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.deleteWithModel(testElem2.elProps.model);\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should clear the cache', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n\n cache.clear();\n expect(cache.size).to.equal(0);\n\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem).to.be.undefined;\n });\n\n it('should not return wrong element when passed a manipulated code value', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem2);\n expect(cache.size).to.equal(1);\n\n const retrievedElem = cache.get({ code: testElemCode.elProps.code });\n expect(retrievedElem).to.be.undefined;\n });\n});\n\ndescribe('InstanceKeyLRUCache', () => {\n const testArgs1: IModelJsNative.ResolveInstanceKeyArgs = {\n partialKey: {\n id: Id64.fromJSON(\"0x123\"),\n baseClassName: \"baseName\",\n },\n }\n\n const testArgs2: IModelJsNative.ResolveInstanceKeyArgs = {\n federationGuid: \"testFedGuid\",\n }\n\n const testArgs3: IModelJsNative.ResolveInstanceKeyArgs = {\n code: {\n spec: \"testSpec\",\n scope: \"testScope\",\n value: \"testValue\"\n }\n }\n\n const testArgs4: IModelJsNative.ResolveInstanceKeyArgs = {\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n }\n }\n\n const testResults: IModelJsNative.ResolveInstanceKeyResult[] = [\n {\n id: Id64.fromJSON(\"0x123\"),\n classFullName: \"testName1\",\n },\n {\n id: Id64.fromJSON(\"0x122\"),\n classFullName: \"testName2\",\n },\n {\n id: Id64.fromJSON(\"0x133\"),\n classFullName: \"testName3\",\n },\n {\n id: Id64.fromJSON(\"0x144\"),\n classFullName: \"testName4\",\n }\n ];\n\n it('should store and retrieve a valid InstanceKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n });\n\n it('should overwrite existing valid InstanceKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n const testResult = testResults[0];\n cache.set(testArgs1, testResult);\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResult);\n\n const newTestResult = { id: testResult.id, classFullName: \"newModel\" };\n cache.set(testArgs1, newTestResult);\n const retrievedResult2 = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(newTestResult);\n });\n\n it('should store and retrieve a valid InstanceKey by fedGuid', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs2, testResults[0]);\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n });\n\n it('should store and retrieve a valid InstanceKey by code', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs3, testResults[0]);\n const retrievedResult = cache.get({ code: testArgs3.code });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n\n cache.set(testArgs4, testResults[1]);\n const retrievedResult2 = cache.get({ code: testArgs4.code });\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should find the same InstanceKey with either code, fedGuid, or Id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set({ ...testArgs1, ...testArgs2, ...testArgs3}, testResults[0]);\n\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResultById).to.not.be.undefined;\n expect(retrievedResultById).to.equal(testResults[0]);\n\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResultByFedGuid).to.not.be.undefined;\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\n\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\n expect(retrievedResultByCode).to.not.be.undefined;\n expect(retrievedResultByCode).to.equal(testResults[0]);\n });\n\n it('should update an existing InstanceKey with either code, fedGuid, or Id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[0]);\n cache.set(testArgs3, testResults[0]);\n\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResultById).to.not.be.undefined;\n expect(retrievedResultById).to.equal(testResults[0]);\n\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResultByFedGuid).to.not.be.undefined;\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\n\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\n expect(retrievedResultByCode).to.not.be.undefined;\n expect(retrievedResultByCode).to.equal(testResults[0]);\n });\n\n it('should not store a bad id as result in the cache', () => {\n const cache = new InstanceKeyLRUCache(3);\n const badResult: IModelJsNative.ResolveInstanceKeyResult = { id: Id64.invalid, classFullName: \"badName\" };\n expect(() => cache.set(testArgs1, badResult)).to.throw(Error, \"Invalid InstanceKey result\");\n expect(cache.size).to.equal(0);\n });\n\n it('should delete least used element', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n cache.set(testArgs4, testResults[3]);\n expect(cache.size).to.equal(3);\n\n const retrievedResult = cache.get(testArgs2);\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[1]);\n\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.be.undefined;\n\n const retrievedResult3 = cache.get(testArgs3);\n expect(retrievedResult3).to.not.be.undefined;\n expect(retrievedResult3).to.equal(testResults[2]);\n });\n\n it('should delete with partialKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ partialKey: testArgs1.partialKey });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs2);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should delete with id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.deleteById(testArgs1.partialKey!.id);\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs2);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should throw when deleting with a bad id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n expect(() => cache.deleteById(\"badid\")).to.throw(Error, \"Invalid id provided\");\n expect(cache.size).to.equal(3);\n });\n\n it('should delete with federation guid', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ federationGuid: testArgs2.federationGuid });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs3);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[2]);\n });\n\n it('should delete with code', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ code: testArgs3.code });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ code: testArgs3.code });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[0]);\n });\n\n it('should delete with any applicable arg', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[0]);\n cache.set(testArgs3, testResults[0]);\n expect(cache.size).to.equal(1);\n cache.delete(testArgs3);\n expect(cache.size).to.equal(0);\n const retrievedResult = cache.get(testArgs1);\n expect(retrievedResult).to.be.undefined;\n\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.set(testArgs4, testResults[0]);\n expect(cache.size).to.equal(3);\n\n cache.delete(testArgs4);\n expect(cache.size).to.equal(2);\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.be.undefined;\n });\n\n it('should throw when trying to delete with all undefined keys', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n\n expect(() => cache.delete({\n partialKey: undefined,\n federationGuid: undefined,\n code: undefined\n })).to.throw(Error, \"ResolveInstanceKeyArgs must have a partialKey, code, or federationGuid\");\n\n expect(cache.size).to.equal(3);\n });\n\n it('should clear the cache', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n\n cache.clear();\n expect(cache.size).to.equal(0);\n\n const retrievedElem = cache.get(testArgs1);\n expect(retrievedElem).to.be.undefined;\n });\n});"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryTestUtil.js","sourceRoot":"","sources":["../../../src/test/GeometryTestUtil.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EACI,SAAS,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACO,QAAQ,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,QAAQ,GAAqB,IAAI,CAAC,KAAK,CAClD,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE;IAClE,QAAQ,EAAE,MAAM;CACjB,CAAC,CACH,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAAgB,EAAE,MAA2B;IAC/E,gFAAgF;IAChF,MAAM,QAAQ,GAAoC;QAChD,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,4CAA4C;QAC/E,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;KACtD,CAAC;IAEF,MAAM,SAAS,GAAyB;QACtC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;KACtG,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC","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 * as fs from \"fs\";\r\nimport {\r\n Point3d, Transform, YawPitchRollAngles,\r\n} from \"@itwin/core-geometry\";\r\nimport {\r\n BRepEntity, ColorDef,\r\n} from \"@itwin/core-common\";\r\nimport { IModelTestUtils } from \"./IModelTestUtils\";\r\n\r\nexport const brepData: { data: string } = JSON.parse(\r\n fs.readFileSync(IModelTestUtils.resolveAssetFile(\"brepdata1.json\"), {\r\n encoding: \"utf8\",\r\n }),\r\n);\r\n\r\nexport function createBRepDataProps(origin?: Point3d, angles?: YawPitchRollAngles): BRepEntity.DataProps {\r\n // This brep has a face symbology attribute attached to one face, make it green.\r\n const faceSymb: BRepEntity.FaceSymbologyProps[] = [\r\n { color: ColorDef.blue.toJSON() }, // base symbology should match appearance...\r\n { color: ColorDef.green.toJSON(), transparency: 0.5 },\r\n ];\r\n\r\n const brepProps: BRepEntity.DataProps = {\r\n data: brepData.data,\r\n faceSymbology: faceSymb,\r\n transform: Transform.createOriginAndMatrix(origin, angles ? angles.toMatrix3d() : undefined).toJSON(),\r\n };\r\n\r\n return brepProps;\r\n}\r\n"]}
1
+ {"version":3,"file":"GeometryTestUtil.js","sourceRoot":"","sources":["../../../src/test/GeometryTestUtil.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EACI,SAAS,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACO,QAAQ,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,QAAQ,GAAqB,IAAI,CAAC,KAAK,CAClD,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE;IAClE,QAAQ,EAAE,MAAM;CACjB,CAAC,CACH,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAAgB,EAAE,MAA2B;IAC/E,gFAAgF;IAChF,MAAM,QAAQ,GAAoC;QAChD,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,4CAA4C;QAC/E,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;KACtD,CAAC;IAEF,MAAM,SAAS,GAAyB;QACtC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;KACtG,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC","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 * as fs from \"fs\";\nimport {\n Point3d, Transform, YawPitchRollAngles,\n} from \"@itwin/core-geometry\";\nimport {\n BRepEntity, ColorDef,\n} from \"@itwin/core-common\";\nimport { IModelTestUtils } from \"./IModelTestUtils\";\n\nexport const brepData: { data: string } = JSON.parse(\n fs.readFileSync(IModelTestUtils.resolveAssetFile(\"brepdata1.json\"), {\n encoding: \"utf8\",\n }),\n);\n\nexport function createBRepDataProps(origin?: Point3d, angles?: YawPitchRollAngles): BRepEntity.DataProps {\n // This brep has a face symbology attribute attached to one face, make it green.\n const faceSymb: BRepEntity.FaceSymbologyProps[] = [\n { color: ColorDef.blue.toJSON() }, // base symbology should match appearance...\n { color: ColorDef.green.toJSON(), transparency: 0.5 },\n ];\n\n const brepProps: BRepEntity.DataProps = {\n data: brepData.data,\n faceSymbology: faceSymb,\n transform: Transform.createOriginAndMatrix(origin, angles ? angles.toMatrix3d() : undefined).toJSON(),\n };\n\n return brepProps;\n}\n"]}