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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) 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.d.ts +14 -0
  78. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  79. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +32 -19
  80. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  81. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  82. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  83. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  84. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  85. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  86. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
  87. package/lib/cjs/annotations/TextBlockLayout.js +2 -1
  88. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  89. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  90. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  91. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  92. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  93. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  94. package/lib/cjs/core-backend.js.map +1 -1
  95. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  96. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  97. package/lib/cjs/domains/GenericElements.js.map +1 -1
  98. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  99. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  100. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  101. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  102. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  103. package/lib/cjs/internal/HubMock.js.map +1 -1
  104. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  105. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  106. package/lib/cjs/internal/NoLocks.js.map +1 -1
  107. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  108. package/lib/cjs/internal/Symbols.js.map +1 -1
  109. package/lib/cjs/internal/annotations/fields.d.ts +3 -2
  110. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  111. package/lib/cjs/internal/annotations/fields.js +12 -5
  112. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  113. package/lib/cjs/internal/cross-package.js.map +1 -1
  114. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  115. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  116. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  117. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  118. package/lib/cjs/rpc/multipart.js.map +1 -1
  119. package/lib/cjs/rpc/tracing.js.map +1 -1
  120. package/lib/cjs/rpc/web/logging.js.map +1 -1
  121. package/lib/cjs/rpc/web/request.js.map +1 -1
  122. package/lib/cjs/rpc/web/response.js.map +1 -1
  123. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  124. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  125. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  126. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  127. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  128. package/lib/cjs/workspace/Settings.js.map +1 -1
  129. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  130. package/lib/cjs/workspace/Workspace.js.map +1 -1
  131. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  132. package/lib/esm/BackendHubAccess.js.map +1 -1
  133. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  134. package/lib/esm/BisCoreSchema.js.map +1 -1
  135. package/lib/esm/BlobContainerService.js.map +1 -1
  136. package/lib/esm/BriefcaseManager.js.map +1 -1
  137. package/lib/esm/CatalogDb.js.map +1 -1
  138. package/lib/esm/Category.js.map +1 -1
  139. package/lib/esm/ChangeSummaryManager.js +2 -2
  140. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  141. package/lib/esm/ChangedElementsDb.js.map +1 -1
  142. package/lib/esm/ChangesetECAdaptor.js +248 -248
  143. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  144. package/lib/esm/ChannelControl.js.map +1 -1
  145. package/lib/esm/CheckpointManager.js.map +1 -1
  146. package/lib/esm/ClassRegistry.js +5 -5
  147. package/lib/esm/ClassRegistry.js.map +1 -1
  148. package/lib/esm/CloudSqlite.js.map +1 -1
  149. package/lib/esm/CodeService.js.map +1 -1
  150. package/lib/esm/CodeSpecs.js.map +1 -1
  151. package/lib/esm/ConcurrentQuery.js.map +1 -1
  152. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  153. package/lib/esm/DevTools.js.map +1 -1
  154. package/lib/esm/DisplayStyle.js.map +1 -1
  155. package/lib/esm/ECDb.js.map +1 -1
  156. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  157. package/lib/esm/ECSqlStatement.js.map +1 -1
  158. package/lib/esm/Element.js.map +1 -1
  159. package/lib/esm/ElementAspect.js.map +1 -1
  160. package/lib/esm/ElementGraphics.js.map +1 -1
  161. package/lib/esm/ElementTreeWalker.js.map +1 -1
  162. package/lib/esm/Entity.js.map +1 -1
  163. package/lib/esm/EntityReferences.js.map +1 -1
  164. package/lib/esm/ExportGraphics.js.map +1 -1
  165. package/lib/esm/ExternalSource.js.map +1 -1
  166. package/lib/esm/FontFile.js.map +1 -1
  167. package/lib/esm/GeoCoordConfig.js.map +1 -1
  168. package/lib/esm/GeographicCRSServices.js.map +1 -1
  169. package/lib/esm/GeometrySummary.js +47 -47
  170. package/lib/esm/GeometrySummary.js.map +1 -1
  171. package/lib/esm/IModelDb.js +8 -8
  172. package/lib/esm/IModelDb.js.map +1 -1
  173. package/lib/esm/IModelDbFonts.js.map +1 -1
  174. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  175. package/lib/esm/IModelHost.js.map +1 -1
  176. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  177. package/lib/esm/IModelJsFs.js.map +1 -1
  178. package/lib/esm/ImageSourceConversion.js.map +1 -1
  179. package/lib/esm/IpcHost.js.map +1 -1
  180. package/lib/esm/LineStyle.js.map +1 -1
  181. package/lib/esm/LocalHub.js +1 -1
  182. package/lib/esm/LocalHub.js.map +1 -1
  183. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  184. package/lib/esm/LockControl.js.map +1 -1
  185. package/lib/esm/Material.js.map +1 -1
  186. package/lib/esm/Model.js.map +1 -1
  187. package/lib/esm/NativeAppStorage.js.map +1 -1
  188. package/lib/esm/NativeHost.js.map +1 -1
  189. package/lib/esm/NavigationRelationship.js.map +1 -1
  190. package/lib/esm/PromiseMemoizer.js.map +1 -1
  191. package/lib/esm/PropertyStore.js.map +1 -1
  192. package/lib/esm/Relationship.js.map +1 -1
  193. package/lib/esm/RpcBackend.js.map +1 -1
  194. package/lib/esm/SQLiteDb.js.map +1 -1
  195. package/lib/esm/Schema.js.map +1 -1
  196. package/lib/esm/SchemaSync.js.map +1 -1
  197. package/lib/esm/SchemaUtils.js.map +1 -1
  198. package/lib/esm/SheetIndex.js.map +1 -1
  199. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  200. package/lib/esm/SqliteStatement.js.map +1 -1
  201. package/lib/esm/StashManager.js.map +1 -1
  202. package/lib/esm/Texture.js.map +1 -1
  203. package/lib/esm/TileStorage.js.map +1 -1
  204. package/lib/esm/TxnManager.js.map +1 -1
  205. package/lib/esm/ViewDefinition.js.map +1 -1
  206. package/lib/esm/ViewStateHydrator.js.map +1 -1
  207. package/lib/esm/ViewStore.js.map +1 -1
  208. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +14 -0
  209. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  210. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +33 -20
  211. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  212. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  213. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  214. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  215. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  216. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  217. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
  218. package/lib/esm/annotations/TextBlockLayout.js +2 -1
  219. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  220. package/lib/esm/core-backend.js.map +1 -1
  221. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  222. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  223. package/lib/esm/domains/GenericElements.js.map +1 -1
  224. package/lib/esm/domains/GenericSchema.js.map +1 -1
  225. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  226. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  227. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  228. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  229. package/lib/esm/internal/HubMock.js.map +1 -1
  230. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  231. package/lib/esm/internal/NativePlatform.js.map +1 -1
  232. package/lib/esm/internal/NoLocks.js.map +1 -1
  233. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  234. package/lib/esm/internal/Symbols.js.map +1 -1
  235. package/lib/esm/internal/annotations/fields.d.ts +3 -2
  236. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  237. package/lib/esm/internal/annotations/fields.js +11 -5
  238. package/lib/esm/internal/annotations/fields.js.map +1 -1
  239. package/lib/esm/internal/cross-package.js.map +1 -1
  240. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  241. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  242. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  243. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  244. package/lib/esm/rpc/multipart.js.map +1 -1
  245. package/lib/esm/rpc/tracing.js.map +1 -1
  246. package/lib/esm/rpc/web/logging.js.map +1 -1
  247. package/lib/esm/rpc/web/request.js.map +1 -1
  248. package/lib/esm/rpc/web/response.js.map +1 -1
  249. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  250. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  251. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  252. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  253. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  254. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  255. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  256. package/lib/esm/test/AttachDb.test.js +11 -11
  257. package/lib/esm/test/AttachDb.test.js.map +1 -1
  258. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  259. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  260. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  261. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  262. package/lib/esm/test/IModelHost.test.js.map +1 -1
  263. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  264. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  265. package/lib/esm/test/IpcHost.test.js.map +1 -1
  266. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  267. package/lib/esm/test/PrintElementTree.js.map +1 -1
  268. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  269. package/lib/esm/test/RevisionUtility.js.map +1 -1
  270. package/lib/esm/test/SchemaUtils.test.js +25 -25
  271. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  272. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  273. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  274. package/lib/esm/test/TestUtils.js.map +1 -1
  275. package/lib/esm/test/annotations/Fields.test.js +53 -53
  276. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  277. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  278. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  279. package/lib/esm/test/annotations/TextAnnotation.test.js +3 -1
  280. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  281. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  282. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  283. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  284. package/lib/esm/test/categories/Category.test.js.map +1 -1
  285. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  286. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  287. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  288. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  289. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  290. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  291. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  292. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  293. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  294. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  295. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  296. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  297. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  298. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  299. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  300. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  301. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  302. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  303. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  304. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  305. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  306. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  307. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  308. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  309. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  310. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  311. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  312. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  313. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  314. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  315. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  316. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  317. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  318. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  319. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  320. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  321. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  322. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  323. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  324. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  325. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  326. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  327. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  328. package/lib/esm/test/hubaccess/Rebase.test.js +97 -41
  329. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  330. package/lib/esm/test/imageData.js.map +1 -1
  331. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  332. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  333. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  334. package/lib/esm/test/imodel/IModel.test.js +44 -44
  335. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  336. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  337. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  338. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  339. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  340. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  341. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  342. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  343. package/lib/esm/test/index.js.map +1 -1
  344. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  345. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  346. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  347. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  348. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  349. package/lib/esm/test/rpc/response.test.js.map +1 -1
  350. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  351. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  352. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  353. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  354. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  355. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  356. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  357. package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
  358. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  359. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  360. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  361. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  362. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  363. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  364. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  365. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  366. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  367. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  368. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  369. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  370. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  371. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  372. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  373. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  374. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  375. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  376. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  377. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  378. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  379. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  380. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  381. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  382. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  383. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  384. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  385. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  386. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  387. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  388. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  389. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  390. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  391. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  392. package/lib/esm/workspace/Settings.js.map +1 -1
  393. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  394. package/lib/esm/workspace/Workspace.js.map +1 -1
  395. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  396. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedEqual.js","sourceRoot":"","sources":["../../../src/test/AdvancedEqual.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAiBhD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,SAAS,EAAE,KAAK;IAChB,oCAAoC,EAAE,KAAK;CACnC,CAAC;AAWX,mEAAmE;AACnE,MAAM,mBAAmB,GAAmD,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAEhI,4CAA4C;AAC5C,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAOlF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,CAAM,EACN,CAAM,EACN,UAAiC,EAAE;IAEnC,MAAM,wBAAwB,GAC1B,OAAO,CAAC,uBAAuB,KAAK,IAAI;QACxC,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,uBAAuB,IAAI,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QACjC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC;QACT,OAAO,IAAI,CAAC;IACd,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,QAAQ,OAAO,CAAC,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACtD,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,CAAC,kEAAkE;QAClF,KAAK,QAAQ;YACX,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,oCAAoC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACtH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,oCAAoC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACtH,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAC7E,CAAC,MAAM,EAAE,EAAE,CACT,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,oCAAoC,CAAC;gBAC7D,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvC,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjF,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CACvD,CAAC;QACJ,SAAS,mBAAmB;YAC1B,MAAM,KAAK,CAAC,2DAA2D,OAAO,CAAC,GAAG,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,CAAC,SAAS,CACjB,eAAe,EACf,SAAS,aAAa,CACpB,QAAa,EACb,UAAyB,EAAE;IAE3B,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QACjC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CACT,MAAM;QACJ,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;QAC9C,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAC5D,YACE,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GACjC,yCAAyC,OAAO,CAAC,SAAS,EAAE,EAC5D,YACE,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,GACnC,yCAAyC,OAAO,CAAC,SAAS,EAAE,EAC5D,QAAQ,EACR,MAAM,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,SAAS,CAAC,SAAS,CACjB,aAAa,EACb,SAAS,WAAW,CAClB,QAAa,EACb,UAAyB,EAAE;IAE3B,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QACjC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,IAAI,CAAC,MAAM,CACT,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAC,GAAG,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAC3E,+CAA+C,EAC/C,mDAAmD,EACnD,QAAQ,EACR,MAAM,CACP,CAAC;AACJ,CAAC,CACF,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 { Assertion, util } from \"chai\";\nimport { Geometry } from \"@itwin/core-geometry\";\n\ninterface DeepEqualOpts {\n /**\n * Tolerance for number fields, if not defined will be 1e-10\n * If you don't want a tolerance, either supply 0 or use regular .deep.equal\n */\n tolerance?: number;\n /** e.g. consider {x: undefined} and {} as deeply equal */\n considerNonExistingAndUndefinedEqual?: boolean;\n /** Specify standard property keys holding ec class identifiers (when true, `classFullName` and `relClassName`)\n * to be normalized during comparison so that differently cased and alternative syntax still is considered equal\n * Passing `true`, is the same as passing `[\"classFullName\", \"relClassName\"]`\n */\n normalizeClassNameProps?: boolean | string[];\n}\n\nexport const defaultOpts = {\n tolerance: 1e-10,\n considerNonExistingAndUndefinedEqual: false,\n} as const;\n\ndeclare global {\n namespace Chai {\n interface Deep {\n advancedEqual(actual: any, options?: DeepEqualOpts): Assertion;\n subsetEqual(actual: any, options?: DeepEqualOpts): Assertion;\n }\n }\n}\n\n/** get whether two numbers are almost equal within a tolerance */\nconst isAlmostEqualNumber: (a: number, b: number, tol: number) => boolean = (a, b, tol) => Geometry.isSameCoordinate(a, b, tol);\n\n/** normalize a classname for comparisons */\nconst normalizeClassName = (name: string) => name.toLowerCase().replace(/:/, \".\");\n\ninterface AdvancedEqualFuncOpts extends DeepEqualOpts {\n /** only test */\n useSubsetEquality?: boolean;\n}\n\n/**\n * The diff shown on failure will show undefined fields as part of the diff even if\n * consideringNonExistingAndUndefinedEqual is true. You can ignore that.\n * We would have to mutate the object to clean the diff, although it is worth considering.\n */\nexport function advancedDeepEqual(\n e: any,\n a: any,\n options: AdvancedEqualFuncOpts = {},\n): boolean {\n const normalizedClassNameProps\n = options.normalizeClassNameProps === true\n ? [\"classFullName\", \"relClassName\"]\n : options.normalizeClassNameProps || [];\n if (options.tolerance === undefined)\n options.tolerance = defaultOpts.tolerance;\n if (e === a)\n return true;\n if (typeof e !== typeof a)\n return false;\n switch (typeof e) {\n case \"number\":\n return isAlmostEqualNumber(e, a, options.tolerance);\n case \"string\":\n case \"boolean\":\n case \"function\":\n case \"symbol\":\n case \"undefined\":\n return false; // these objects can only be strict equal which was already tested\n case \"object\":\n if ((e === null) !== (a === null))\n return false;\n const eSize = Object.keys(e).filter((k) => options.considerNonExistingAndUndefinedEqual && e[k] !== undefined).length;\n const aSize = Object.keys(a).filter((k) => options.considerNonExistingAndUndefinedEqual && a[k] !== undefined).length;\n return (eSize === aSize || !!options.useSubsetEquality) && Object.keys(e).every(\n (keyOfE) =>\n (keyOfE in a || options.considerNonExistingAndUndefinedEqual) &&\n normalizedClassNameProps.includes(keyOfE)\n ? advancedDeepEqual(normalizeClassName(e[keyOfE]), normalizeClassName(a[keyOfE]))\n : advancedDeepEqual(e[keyOfE], a[keyOfE], options),\n );\n default: // bigint unhandled\n throw Error(`unhandled deep compare type code returned from typeof, \"${typeof e}\"`);\n }\n}\n\nAssertion.addMethod(\n \"advancedEqual\",\n function advancedEqual(\n expected: any,\n options: DeepEqualOpts = {},\n ) {\n if (options.tolerance === undefined)\n options.tolerance = 1e-10;\n const actual = this._obj;\n const isDeep = util.flag(this, \"deep\");\n this.assert(\n isDeep\n ? advancedDeepEqual(expected, actual, options)\n : isAlmostEqualNumber(expected, actual, options.tolerance),\n `expected ${\n isDeep ? \"deep equality of \" : \" \"\n }#{exp} and #{act} with a tolerance of ${options.tolerance}`,\n `expected ${\n isDeep ? \"deep inequality of \" : \" \"\n }#{exp} and #{act} with a tolerance of ${options.tolerance}`,\n expected,\n actual,\n );\n },\n);\n\nAssertion.addMethod(\n \"subsetEqual\",\n function subsetEqual(\n expected: any,\n options: DeepEqualOpts = {},\n ) {\n if (options.tolerance === undefined)\n options.tolerance = 1e-10;\n const actual = this._obj;\n this.assert(\n advancedDeepEqual(expected, actual, {...options, useSubsetEquality: true }),\n `expected #{act} to contain as a subset #{exp}`,\n `expected #{act} not to contain as a subset #{exp}`,\n expected,\n actual,\n );\n },\n);\n"]}
1
+ {"version":3,"file":"AdvancedEqual.js","sourceRoot":"","sources":["../../../src/test/AdvancedEqual.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Assertion, util } from \"chai\";\r\nimport { Geometry } from \"@itwin/core-geometry\";\r\n\r\ninterface DeepEqualOpts {\r\n /**\r\n * Tolerance for number fields, if not defined will be 1e-10\r\n * If you don't want a tolerance, either supply 0 or use regular .deep.equal\r\n */\r\n tolerance?: number;\r\n /** e.g. consider {x: undefined} and {} as deeply equal */\r\n considerNonExistingAndUndefinedEqual?: boolean;\r\n /** Specify standard property keys holding ec class identifiers (when true, `classFullName` and `relClassName`)\r\n * to be normalized during comparison so that differently cased and alternative syntax still is considered equal\r\n * Passing `true`, is the same as passing `[\"classFullName\", \"relClassName\"]`\r\n */\r\n normalizeClassNameProps?: boolean | string[];\r\n}\r\n\r\nexport const defaultOpts = {\r\n tolerance: 1e-10,\r\n considerNonExistingAndUndefinedEqual: false,\r\n} as const;\r\n\r\ndeclare global {\r\n namespace Chai {\r\n interface Deep {\r\n advancedEqual(actual: any, options?: DeepEqualOpts): Assertion;\r\n subsetEqual(actual: any, options?: DeepEqualOpts): Assertion;\r\n }\r\n }\r\n}\r\n\r\n/** get whether two numbers are almost equal within a tolerance */\r\nconst isAlmostEqualNumber: (a: number, b: number, tol: number) => boolean = (a, b, tol) => Geometry.isSameCoordinate(a, b, tol);\r\n\r\n/** normalize a classname for comparisons */\r\nconst normalizeClassName = (name: string) => name.toLowerCase().replace(/:/, \".\");\r\n\r\ninterface AdvancedEqualFuncOpts extends DeepEqualOpts {\r\n /** only test */\r\n useSubsetEquality?: boolean;\r\n}\r\n\r\n/**\r\n * The diff shown on failure will show undefined fields as part of the diff even if\r\n * consideringNonExistingAndUndefinedEqual is true. You can ignore that.\r\n * We would have to mutate the object to clean the diff, although it is worth considering.\r\n */\r\nexport function advancedDeepEqual(\r\n e: any,\r\n a: any,\r\n options: AdvancedEqualFuncOpts = {},\r\n): boolean {\r\n const normalizedClassNameProps\r\n = options.normalizeClassNameProps === true\r\n ? [\"classFullName\", \"relClassName\"]\r\n : options.normalizeClassNameProps || [];\r\n if (options.tolerance === undefined)\r\n options.tolerance = defaultOpts.tolerance;\r\n if (e === a)\r\n return true;\r\n if (typeof e !== typeof a)\r\n return false;\r\n switch (typeof e) {\r\n case \"number\":\r\n return isAlmostEqualNumber(e, a, options.tolerance);\r\n case \"string\":\r\n case \"boolean\":\r\n case \"function\":\r\n case \"symbol\":\r\n case \"undefined\":\r\n return false; // these objects can only be strict equal which was already tested\r\n case \"object\":\r\n if ((e === null) !== (a === null))\r\n return false;\r\n const eSize = Object.keys(e).filter((k) => options.considerNonExistingAndUndefinedEqual && e[k] !== undefined).length;\r\n const aSize = Object.keys(a).filter((k) => options.considerNonExistingAndUndefinedEqual && a[k] !== undefined).length;\r\n return (eSize === aSize || !!options.useSubsetEquality) && Object.keys(e).every(\r\n (keyOfE) =>\r\n (keyOfE in a || options.considerNonExistingAndUndefinedEqual) &&\r\n normalizedClassNameProps.includes(keyOfE)\r\n ? advancedDeepEqual(normalizeClassName(e[keyOfE]), normalizeClassName(a[keyOfE]))\r\n : advancedDeepEqual(e[keyOfE], a[keyOfE], options),\r\n );\r\n default: // bigint unhandled\r\n throw Error(`unhandled deep compare type code returned from typeof, \"${typeof e}\"`);\r\n }\r\n}\r\n\r\nAssertion.addMethod(\r\n \"advancedEqual\",\r\n function advancedEqual(\r\n expected: any,\r\n options: DeepEqualOpts = {},\r\n ) {\r\n if (options.tolerance === undefined)\r\n options.tolerance = 1e-10;\r\n const actual = this._obj;\r\n const isDeep = util.flag(this, \"deep\");\r\n this.assert(\r\n isDeep\r\n ? advancedDeepEqual(expected, actual, options)\r\n : isAlmostEqualNumber(expected, actual, options.tolerance),\r\n `expected ${\r\n isDeep ? \"deep equality of \" : \" \"\r\n }#{exp} and #{act} with a tolerance of ${options.tolerance}`,\r\n `expected ${\r\n isDeep ? \"deep inequality of \" : \" \"\r\n }#{exp} and #{act} with a tolerance of ${options.tolerance}`,\r\n expected,\r\n actual,\r\n );\r\n },\r\n);\r\n\r\nAssertion.addMethod(\r\n \"subsetEqual\",\r\n function subsetEqual(\r\n expected: any,\r\n options: DeepEqualOpts = {},\r\n ) {\r\n if (options.tolerance === undefined)\r\n options.tolerance = 1e-10;\r\n const actual = this._obj;\r\n this.assert(\r\n advancedDeepEqual(expected, actual, {...options, useSubsetEquality: true }),\r\n `expected #{act} to contain as a subset #{exp}`,\r\n `expected #{act} not to contain as a subset #{exp}`,\r\n expected,\r\n actual,\r\n );\r\n },\r\n);\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotationTestUtils.js","sourceRoot":"","sources":["../../../src/test/AnnotationTestUtils.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,eAAe,EAAyC,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,EAAqB,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAA6D,eAAe,EAAqC,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAInK,MAAM,UAAU,8BAA8B,CAAC,IAAoC;IACjF,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,SAAoB,EAAE,IAI9C;IACC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC;QAC9C,SAAS;QACT,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;QACpC,MAAM,EAAE,EAAS;QACjB,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;KACzE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,eAAe,CAAC;QAC7B,SAAS;QACT,MAAM,EAAE,EAAS;QACjB,iBAAiB;QACjB,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzC,gBAAgB,EAAE,8BAA8B;KACjD,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wFAAwF;AACxF,MAAM,OAAO,WAAY,SAAQ,eAAe,CAAC,OAAO;IAC/C,MAAM,GAAqB,EAAE,CAAC;IAC9B,UAAU,GAAwB,EAAE,CAAC;IACrC,WAAW,GAAiB,EAAE,CAAA;IAErB,0BAA0B,CAAC,MAAsB;QAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IACe,mBAAmB,CAAC,QAA2B;QAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAEe,gBAAgB,CAAC,IAAgB;QAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CAEF","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 { ElementGeometry, GeometryParams, TextBlock, TextString, TextStyleSettings } from \"@itwin/core-common\";\nimport { AnyCurvePrimitive, Range2d } from \"@itwin/core-geometry\";\nimport { ComputeRangesForTextLayoutArgs, FindFontId, FindTextStyle, layoutTextBlock, TextBlockLayout, TextLayoutRanges, TextStyleResolver } from \"../core-backend\";\nimport { Id64String } from \"@itwin/core-bentley\";\n\n\nexport function computeTextRangeAsStringLength(args: ComputeRangesForTextLayoutArgs): TextLayoutRanges {\n const range = new Range2d(0, 0, args.chars.length, args.textHeight);\n return { layout: range, justification: range };\n}\n\nexport function doLayout(textBlock: TextBlock, args?: {\n textStyleId?: Id64String,\n findTextStyle?: FindTextStyle;\n findFontId?: FindFontId;\n}): TextBlockLayout {\n const textStyleResolver = new TextStyleResolver({\n textBlock,\n textStyleId: args?.textStyleId ?? \"\",\n iModel: {} as any,\n findTextStyle: args?.findTextStyle ?? (() => TextStyleSettings.defaults)\n });\n const layout = layoutTextBlock({\n textBlock,\n iModel: {} as any,\n textStyleResolver,\n findFontId: args?.findFontId ?? (() => 0),\n computeTextRange: computeTextRangeAsStringLength,\n });\n\n return layout;\n}\n\n// Extending this because the ElementGeometry.Builder.entries attribute is hard to parse\nexport class MockBuilder extends ElementGeometry.Builder {\n public params: GeometryParams[] = [];\n public geometries: AnyCurvePrimitive[] = [];\n public textStrings: TextString[] = []\n\n public override appendGeometryParamsChange(params: GeometryParams): boolean {\n this.params.push(params.clone());\n return super.appendGeometryParamsChange(params);\n }\n public override appendGeometryQuery(geometry: AnyCurvePrimitive): boolean {\n this.geometries.push(geometry);\n return super.appendGeometryQuery(geometry);\n }\n\n public override appendTextString(text: TextString): boolean {\n this.textStrings.push(text);\n return super.appendTextString(text);\n }\n\n}"]}
1
+ {"version":3,"file":"AnnotationTestUtils.js","sourceRoot":"","sources":["../../../src/test/AnnotationTestUtils.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,eAAe,EAAyC,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,EAAqB,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAA6D,eAAe,EAAqC,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAInK,MAAM,UAAU,8BAA8B,CAAC,IAAoC;IACjF,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,SAAoB,EAAE,IAI9C;IACC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC;QAC9C,SAAS;QACT,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;QACpC,MAAM,EAAE,EAAS;QACjB,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;KACzE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,eAAe,CAAC;QAC7B,SAAS;QACT,MAAM,EAAE,EAAS;QACjB,iBAAiB;QACjB,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzC,gBAAgB,EAAE,8BAA8B;KACjD,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wFAAwF;AACxF,MAAM,OAAO,WAAY,SAAQ,eAAe,CAAC,OAAO;IAC/C,MAAM,GAAqB,EAAE,CAAC;IAC9B,UAAU,GAAwB,EAAE,CAAC;IACrC,WAAW,GAAiB,EAAE,CAAA;IAErB,0BAA0B,CAAC,MAAsB;QAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IACe,mBAAmB,CAAC,QAA2B;QAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAEe,gBAAgB,CAAC,IAAgB;QAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CAEF","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 { ElementGeometry, GeometryParams, TextBlock, TextString, TextStyleSettings } from \"@itwin/core-common\";\r\nimport { AnyCurvePrimitive, Range2d } from \"@itwin/core-geometry\";\r\nimport { ComputeRangesForTextLayoutArgs, FindFontId, FindTextStyle, layoutTextBlock, TextBlockLayout, TextLayoutRanges, TextStyleResolver } from \"../core-backend\";\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\n\r\n\r\nexport function computeTextRangeAsStringLength(args: ComputeRangesForTextLayoutArgs): TextLayoutRanges {\r\n const range = new Range2d(0, 0, args.chars.length, args.textHeight);\r\n return { layout: range, justification: range };\r\n}\r\n\r\nexport function doLayout(textBlock: TextBlock, args?: {\r\n textStyleId?: Id64String,\r\n findTextStyle?: FindTextStyle;\r\n findFontId?: FindFontId;\r\n}): TextBlockLayout {\r\n const textStyleResolver = new TextStyleResolver({\r\n textBlock,\r\n textStyleId: args?.textStyleId ?? \"\",\r\n iModel: {} as any,\r\n findTextStyle: args?.findTextStyle ?? (() => TextStyleSettings.defaults)\r\n });\r\n const layout = layoutTextBlock({\r\n textBlock,\r\n iModel: {} as any,\r\n textStyleResolver,\r\n findFontId: args?.findFontId ?? (() => 0),\r\n computeTextRange: computeTextRangeAsStringLength,\r\n });\r\n\r\n return layout;\r\n}\r\n\r\n// Extending this because the ElementGeometry.Builder.entries attribute is hard to parse\r\nexport class MockBuilder extends ElementGeometry.Builder {\r\n public params: GeometryParams[] = [];\r\n public geometries: AnyCurvePrimitive[] = [];\r\n public textStrings: TextString[] = []\r\n\r\n public override appendGeometryParamsChange(params: GeometryParams): boolean {\r\n this.params.push(params.clone());\r\n return super.appendGeometryParamsChange(params);\r\n }\r\n public override appendGeometryQuery(geometry: AnyCurvePrimitive): boolean {\r\n this.geometries.push(geometry);\r\n return super.appendGeometryQuery(geometry);\r\n }\r\n\r\n public override appendTextString(text: TextString): boolean {\r\n this.textStrings.push(text);\r\n return super.appendTextString(text);\r\n }\r\n\r\n}"]}
@@ -11,17 +11,17 @@ describe("Attach/Detach Db", () => {
11
11
  const simulationFile = IModelTestUtils.resolveAssetFile("sim-attach.ecdb");
12
12
  const master = SnapshotDb.openFile(masterFile);
13
13
  master.attachDb(simulationFile, "SimDb");
14
- const ecsql = `
15
- SELECT ts.TimeFromStart [Time From Start (s)],
16
- p.UserLabel [Pipe with Max Flow],
17
- MAX(ltvrr.Flow) [Max Flow (L/s)]
18
- FROM
19
- SimDb.simrescore.TimeStep ts
20
- INNER JOIN SimDb.stmswrres.BasicFlowResultRecord ltvrr ON ts.ECInstanceId = ltvrr.TimeStep.Id
21
- INNER JOIN swrhyd.Pipe p ON p.ECInstanceId = ltvrr.ElementId
22
- GROUP BY
23
- ts.ECInstanceId
24
- HAVING
14
+ const ecsql = `
15
+ SELECT ts.TimeFromStart [Time From Start (s)],
16
+ p.UserLabel [Pipe with Max Flow],
17
+ MAX(ltvrr.Flow) [Max Flow (L/s)]
18
+ FROM
19
+ SimDb.simrescore.TimeStep ts
20
+ INNER JOIN SimDb.stmswrres.BasicFlowResultRecord ltvrr ON ts.ECInstanceId = ltvrr.TimeStep.Id
21
+ INNER JOIN swrhyd.Pipe p ON p.ECInstanceId = ltvrr.ElementId
22
+ GROUP BY
23
+ ts.ECInstanceId
24
+ HAVING
25
25
  MAX(ltvrr.Flow) > 1`;
26
26
  const reader = master.createQueryReader(ecsql);
27
27
  const rows = [];
@@ -1 +1 @@
1
- {"version":3,"file":"AttachDb.test.js","sourceRoot":"","sources":["../../../src/test/AttachDb.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport { SnapshotDb } from \"../IModelDb\";\nimport { IModelTestUtils } from \"./IModelTestUtils\";\n\ndescribe(\"Attach/Detach Db\", () => {\n it(\"attach simulation db\", async () => {\n const masterFile = IModelTestUtils.resolveAssetFile(\"sim-master.bim\");\n const simulationFile = IModelTestUtils.resolveAssetFile(\"sim-attach.ecdb\");\n\n const master = SnapshotDb.openFile(masterFile);\n master.attachDb(simulationFile, \"SimDb\");\n\n const ecsql = `\n SELECT ts.TimeFromStart [Time From Start (s)],\n p.UserLabel [Pipe with Max Flow],\n MAX(ltvrr.Flow) [Max Flow (L/s)]\n FROM\n SimDb.simrescore.TimeStep ts\n INNER JOIN SimDb.stmswrres.BasicFlowResultRecord ltvrr ON ts.ECInstanceId = ltvrr.TimeStep.Id\n INNER JOIN swrhyd.Pipe p ON p.ECInstanceId = ltvrr.ElementId\n GROUP BY\n ts.ECInstanceId\n HAVING\n MAX(ltvrr.Flow) > 1`;\n\n const reader = master.createQueryReader(ecsql);\n const rows = [];\n while (await reader.step()) {\n rows.push(reader.current.toRow());\n }\n const expected = [\n {\n 'Time From Start (s)': 0,\n 'Pipe with Max Flow': 'CO-4',\n 'Max Flow (L/s)': 66.14359584163114\n },\n {\n 'Time From Start (s)': 3600,\n 'Pipe with Max Flow': 'CO-4',\n 'Max Flow (L/s)': 78.33925707748288\n },\n {\n 'Time From Start (s)': 7200,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 85.32875334207684\n },\n {\n 'Time From Start (s)': 10800,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 73.66891955141061\n },\n {\n 'Time From Start (s)': 14400,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 98.03457129303487\n },\n {\n 'Time From Start (s)': 18000,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 79.73721449443349\n },\n {\n 'Time From Start (s)': 21600,\n 'Pipe with Max Flow': 'CO-4',\n 'Max Flow (L/s)': 91.99697459812566\n },\n {\n 'Time From Start (s)': 25200,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 97.3640516154515\n },\n {\n 'Time From Start (s)': 28800,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 82.92153917380564\n },\n {\n 'Time From Start (s)': 32400,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 93.43596024800935\n },\n {\n 'Time From Start (s)': 36000,\n 'Pipe with Max Flow': 'CO-1',\n 'Max Flow (L/s)': 93.38944851040705\n },\n {\n 'Time From Start (s)': 39600,\n 'Pipe with Max Flow': 'CO-2',\n 'Max Flow (L/s)': 96.89678313985426\n },\n {\n 'Time From Start (s)': 43200,\n 'Pipe with Max Flow': 'CO-4',\n 'Max Flow (L/s)': 68.37554676909588\n },\n {\n 'Time From Start (s)': 46800,\n 'Pipe with Max Flow': 'CO-4',\n 'Max Flow (L/s)': 40.71067873689955\n },\n {\n 'Time From Start (s)': 50400,\n 'Pipe with Max Flow': 'CO-2',\n 'Max Flow (L/s)': 94.95603088826243\n },\n {\n 'Time From Start (s)': 54000,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 90.30742518949977\n },\n {\n 'Time From Start (s)': 57600,\n 'Pipe with Max Flow': 'CO-2',\n 'Max Flow (L/s)': 96.32532799368296\n },\n {\n 'Time From Start (s)': 61200,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 98.7241157161529\n },\n {\n 'Time From Start (s)': 64800,\n 'Pipe with Max Flow': 'CO-1',\n 'Max Flow (L/s)': 76.65530275985837\n },\n {\n 'Time From Start (s)': 68400,\n 'Pipe with Max Flow': 'CO-2',\n 'Max Flow (L/s)': 61.81109058119374\n },\n {\n 'Time From Start (s)': 72000,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 98.37332278792479\n },\n {\n 'Time From Start (s)': 75600,\n 'Pipe with Max Flow': 'CO-3',\n 'Max Flow (L/s)': 70.55434454594996\n },\n {\n 'Time From Start (s)': 79200,\n 'Pipe with Max Flow': 'CO-2',\n 'Max Flow (L/s)': 84.03731418990937\n },\n {\n 'Time From Start (s)': 82800,\n 'Pipe with Max Flow': 'CO-2',\n 'Max Flow (L/s)': 96.3267817742375\n }\n ];\n expect(rows).to.deep.equal(expected);\n master.close();\n });\n\n});\n"]}
1
+ {"version":3,"file":"AttachDb.test.js","sourceRoot":"","sources":["../../../src/test/AttachDb.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport { SnapshotDb } from \"../IModelDb\";\r\nimport { IModelTestUtils } from \"./IModelTestUtils\";\r\n\r\ndescribe(\"Attach/Detach Db\", () => {\r\n it(\"attach simulation db\", async () => {\r\n const masterFile = IModelTestUtils.resolveAssetFile(\"sim-master.bim\");\r\n const simulationFile = IModelTestUtils.resolveAssetFile(\"sim-attach.ecdb\");\r\n\r\n const master = SnapshotDb.openFile(masterFile);\r\n master.attachDb(simulationFile, \"SimDb\");\r\n\r\n const ecsql = `\r\n SELECT ts.TimeFromStart [Time From Start (s)],\r\n p.UserLabel [Pipe with Max Flow],\r\n MAX(ltvrr.Flow) [Max Flow (L/s)]\r\n FROM\r\n SimDb.simrescore.TimeStep ts\r\n INNER JOIN SimDb.stmswrres.BasicFlowResultRecord ltvrr ON ts.ECInstanceId = ltvrr.TimeStep.Id\r\n INNER JOIN swrhyd.Pipe p ON p.ECInstanceId = ltvrr.ElementId\r\n GROUP BY\r\n ts.ECInstanceId\r\n HAVING\r\n MAX(ltvrr.Flow) > 1`;\r\n\r\n const reader = master.createQueryReader(ecsql);\r\n const rows = [];\r\n while (await reader.step()) {\r\n rows.push(reader.current.toRow());\r\n }\r\n const expected = [\r\n {\r\n 'Time From Start (s)': 0,\r\n 'Pipe with Max Flow': 'CO-4',\r\n 'Max Flow (L/s)': 66.14359584163114\r\n },\r\n {\r\n 'Time From Start (s)': 3600,\r\n 'Pipe with Max Flow': 'CO-4',\r\n 'Max Flow (L/s)': 78.33925707748288\r\n },\r\n {\r\n 'Time From Start (s)': 7200,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 85.32875334207684\r\n },\r\n {\r\n 'Time From Start (s)': 10800,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 73.66891955141061\r\n },\r\n {\r\n 'Time From Start (s)': 14400,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 98.03457129303487\r\n },\r\n {\r\n 'Time From Start (s)': 18000,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 79.73721449443349\r\n },\r\n {\r\n 'Time From Start (s)': 21600,\r\n 'Pipe with Max Flow': 'CO-4',\r\n 'Max Flow (L/s)': 91.99697459812566\r\n },\r\n {\r\n 'Time From Start (s)': 25200,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 97.3640516154515\r\n },\r\n {\r\n 'Time From Start (s)': 28800,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 82.92153917380564\r\n },\r\n {\r\n 'Time From Start (s)': 32400,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 93.43596024800935\r\n },\r\n {\r\n 'Time From Start (s)': 36000,\r\n 'Pipe with Max Flow': 'CO-1',\r\n 'Max Flow (L/s)': 93.38944851040705\r\n },\r\n {\r\n 'Time From Start (s)': 39600,\r\n 'Pipe with Max Flow': 'CO-2',\r\n 'Max Flow (L/s)': 96.89678313985426\r\n },\r\n {\r\n 'Time From Start (s)': 43200,\r\n 'Pipe with Max Flow': 'CO-4',\r\n 'Max Flow (L/s)': 68.37554676909588\r\n },\r\n {\r\n 'Time From Start (s)': 46800,\r\n 'Pipe with Max Flow': 'CO-4',\r\n 'Max Flow (L/s)': 40.71067873689955\r\n },\r\n {\r\n 'Time From Start (s)': 50400,\r\n 'Pipe with Max Flow': 'CO-2',\r\n 'Max Flow (L/s)': 94.95603088826243\r\n },\r\n {\r\n 'Time From Start (s)': 54000,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 90.30742518949977\r\n },\r\n {\r\n 'Time From Start (s)': 57600,\r\n 'Pipe with Max Flow': 'CO-2',\r\n 'Max Flow (L/s)': 96.32532799368296\r\n },\r\n {\r\n 'Time From Start (s)': 61200,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 98.7241157161529\r\n },\r\n {\r\n 'Time From Start (s)': 64800,\r\n 'Pipe with Max Flow': 'CO-1',\r\n 'Max Flow (L/s)': 76.65530275985837\r\n },\r\n {\r\n 'Time From Start (s)': 68400,\r\n 'Pipe with Max Flow': 'CO-2',\r\n 'Max Flow (L/s)': 61.81109058119374\r\n },\r\n {\r\n 'Time From Start (s)': 72000,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 98.37332278792479\r\n },\r\n {\r\n 'Time From Start (s)': 75600,\r\n 'Pipe with Max Flow': 'CO-3',\r\n 'Max Flow (L/s)': 70.55434454594996\r\n },\r\n {\r\n 'Time From Start (s)': 79200,\r\n 'Pipe with Max Flow': 'CO-2',\r\n 'Max Flow (L/s)': 84.03731418990937\r\n },\r\n {\r\n 'Time From Start (s)': 82800,\r\n 'Pipe with Max Flow': 'CO-2',\r\n 'Max Flow (L/s)': 96.3267817742375\r\n }\r\n ];\r\n expect(rows).to.deep.equal(expected);\r\n master.close();\r\n });\r\n\r\n});\r\n"]}
@@ -317,24 +317,24 @@ export class NetworkSchema extends Schema {
317
317
  static async importSchema(iModel) {
318
318
  if (iModel.querySchemaVersion("Network"))
319
319
  return;
320
- const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
321
- <ECSchema schemaName="Network" alias="net" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
322
- <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
323
- <ECEntityClass typeName="Node">
324
- <BaseClass>bis:GraphicalElement3d</BaseClass>
325
- <ECProperty propertyName="op" typeName="string" />
326
- <ECProperty propertyName="val" typeName="double" />
327
- </ECEntityClass>
328
- <ECRelationshipClass typeName="InputDrivesOutput" modifier="None" strength="referencing">
329
- <BaseClass>bis:ElementDrivesElement</BaseClass>
330
- <Source multiplicity="(0..1)" roleLabel="drives" polymorphic="true">
331
- <Class class="Node"/>
332
- </Source>
333
- <Target multiplicity="(0..*)" roleLabel="is driven by" polymorphic="false">
334
- <Class class="Node"/>
335
- </Target>
336
- <ECProperty propertyName="prop" typeName="double" />
337
- </ECRelationshipClass>
320
+ const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
321
+ <ECSchema schemaName="Network" alias="net" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
322
+ <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
323
+ <ECEntityClass typeName="Node">
324
+ <BaseClass>bis:GraphicalElement3d</BaseClass>
325
+ <ECProperty propertyName="op" typeName="string" />
326
+ <ECProperty propertyName="val" typeName="double" />
327
+ </ECEntityClass>
328
+ <ECRelationshipClass typeName="InputDrivesOutput" modifier="None" strength="referencing">
329
+ <BaseClass>bis:ElementDrivesElement</BaseClass>
330
+ <Source multiplicity="(0..1)" roleLabel="drives" polymorphic="true">
331
+ <Class class="Node"/>
332
+ </Source>
333
+ <Target multiplicity="(0..*)" roleLabel="is driven by" polymorphic="false">
334
+ <Class class="Node"/>
335
+ </Target>
336
+ <ECProperty propertyName="prop" typeName="double" />
337
+ </ECRelationshipClass>
338
338
  </ECSchema>`;
339
339
  await iModel.importSchemaStrings([schema1]);
340
340
  }
@@ -484,11 +484,11 @@ export class Engine {
484
484
  }
485
485
  static async deleteEdge(iModelDb, from, to) {
486
486
  // eslint-disable-next-line @typescript-eslint/no-deprecated
487
- const edge = iModelDb.withPreparedStatement(`
488
- SELECT [IDo].[ECInstanceId], [IDo].[SourceECInstanceId], [IDo].[TargetECInstanceId]
489
- FROM [Network].[InputDrivesOutput] [IDo]
490
- JOIN [Network].[Node] [Src] ON [Src].[ECInstanceId] = [IDo].[SourceECInstanceId]
491
- JOIN [Network].[Node] [Tgt] ON [Tgt].[ECInstanceId] = [IDo].[TargetECInstanceId]
487
+ const edge = iModelDb.withPreparedStatement(`
488
+ SELECT [IDo].[ECInstanceId], [IDo].[SourceECInstanceId], [IDo].[TargetECInstanceId]
489
+ FROM [Network].[InputDrivesOutput] [IDo]
490
+ JOIN [Network].[Node] [Src] ON [Src].[ECInstanceId] = [IDo].[SourceECInstanceId]
491
+ JOIN [Network].[Node] [Tgt] ON [Tgt].[ECInstanceId] = [IDo].[TargetECInstanceId]
492
492
  WHERE [Src].[UserLabel] = ? AND [Tgt].[UserLabel] = ?`, (stmt) => {
493
493
  stmt.bindString(1, from);
494
494
  stmt.bindString(2, to);
@@ -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\";\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
+ {"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"]}