@itwin/core-backend 5.9.0-dev.9 → 5.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/lib/cjs/BriefcaseManager.d.ts +14 -62
  3. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseManager.js +29 -159
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/Category.d.ts +4 -4
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  9. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  10. package/lib/cjs/ChangesetECAdaptor.js +7 -1
  11. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  12. package/lib/cjs/ChangesetReader.d.ts +186 -0
  13. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  14. package/lib/cjs/ChangesetReader.js +372 -0
  15. package/lib/cjs/ChangesetReader.js.map +1 -0
  16. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  17. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  18. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  19. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  20. package/lib/cjs/CloudSqlite.d.ts +1 -1
  21. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  22. package/lib/cjs/CloudSqlite.js +68 -13
  23. package/lib/cjs/CloudSqlite.js.map +1 -1
  24. package/lib/cjs/CodeSpecs.d.ts +3 -3
  25. package/lib/cjs/CodeSpecs.js.map +1 -1
  26. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  27. package/lib/cjs/DevTools.js.map +1 -1
  28. package/lib/cjs/DisplayStyle.d.ts +2 -2
  29. package/lib/cjs/DisplayStyle.js.map +1 -1
  30. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  31. package/lib/cjs/ECSqlStatement.js.map +1 -1
  32. package/lib/cjs/EditTxn.d.ts +55 -1
  33. package/lib/cjs/EditTxn.d.ts.map +1 -1
  34. package/lib/cjs/EditTxn.js +43 -1
  35. package/lib/cjs/EditTxn.js.map +1 -1
  36. package/lib/cjs/Element.d.ts +79 -10
  37. package/lib/cjs/Element.d.ts.map +1 -1
  38. package/lib/cjs/Element.js +38 -2
  39. package/lib/cjs/Element.js.map +1 -1
  40. package/lib/cjs/ElementAspect.d.ts +1 -1
  41. package/lib/cjs/ElementAspect.js.map +1 -1
  42. package/lib/cjs/ElementGraphics.js.map +1 -1
  43. package/lib/cjs/ElementTreeWalker.d.ts +5 -5
  44. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  45. package/lib/cjs/ExternalSource.d.ts +2 -2
  46. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  47. package/lib/cjs/ExternalSource.js.map +1 -1
  48. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  49. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  50. package/lib/cjs/GeographicCRSServices.js +13 -4
  51. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  52. package/lib/cjs/IModelDb.d.ts +31 -23
  53. package/lib/cjs/IModelDb.d.ts.map +1 -1
  54. package/lib/cjs/IModelDb.js +44 -25
  55. package/lib/cjs/IModelDb.js.map +1 -1
  56. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  57. package/lib/cjs/IModelJsFs.d.ts +2 -0
  58. package/lib/cjs/IModelJsFs.d.ts.map +1 -1
  59. package/lib/cjs/IModelJsFs.js +14 -0
  60. package/lib/cjs/IModelJsFs.js.map +1 -1
  61. package/lib/cjs/IpcHost.d.ts.map +1 -1
  62. package/lib/cjs/IpcHost.js +20 -9
  63. package/lib/cjs/IpcHost.js.map +1 -1
  64. package/lib/cjs/LineStyle.d.ts +6 -6
  65. package/lib/cjs/LineStyle.js.map +1 -1
  66. package/lib/cjs/Material.d.ts +1 -1
  67. package/lib/cjs/Material.js.map +1 -1
  68. package/lib/cjs/Model.d.ts +40 -6
  69. package/lib/cjs/Model.d.ts.map +1 -1
  70. package/lib/cjs/Model.js +24 -0
  71. package/lib/cjs/Model.js.map +1 -1
  72. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  73. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  74. package/lib/cjs/PartialChangeUnifier.js +234 -0
  75. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  76. package/lib/cjs/Relationship.d.ts +10 -10
  77. package/lib/cjs/Relationship.js +6 -6
  78. package/lib/cjs/Relationship.js.map +1 -1
  79. package/lib/cjs/SheetIndex.d.ts +4 -4
  80. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  81. package/lib/cjs/SheetIndex.js.map +1 -1
  82. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  83. package/lib/cjs/SqliteChangesetReader.js +1 -1
  84. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  85. package/lib/cjs/Texture.d.ts +1 -1
  86. package/lib/cjs/Texture.js.map +1 -1
  87. package/lib/cjs/TxnManager.d.ts +17 -0
  88. package/lib/cjs/TxnManager.d.ts.map +1 -1
  89. package/lib/cjs/TxnManager.js +120 -13
  90. package/lib/cjs/TxnManager.js.map +1 -1
  91. package/lib/cjs/ViewDefinition.d.ts +25 -13
  92. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  93. package/lib/cjs/ViewDefinition.js +77 -25
  94. package/lib/cjs/ViewDefinition.js.map +1 -1
  95. package/lib/cjs/ViewStore.d.ts.map +1 -1
  96. package/lib/cjs/ViewStore.js +63 -21
  97. package/lib/cjs/ViewStore.js.map +1 -1
  98. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  99. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  100. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  101. package/lib/cjs/core-backend.d.ts +3 -0
  102. package/lib/cjs/core-backend.d.ts.map +1 -1
  103. package/lib/cjs/core-backend.js +3 -0
  104. package/lib/cjs/core-backend.js.map +1 -1
  105. package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
  106. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  107. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  108. package/lib/cjs/domains/GenericElements.d.ts +2 -2
  109. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  110. package/lib/cjs/domains/GenericElements.js.map +1 -1
  111. package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
  112. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  113. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  114. package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
  115. package/lib/cjs/internal/IntegrityCheck.js +22 -22
  116. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  117. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  118. package/lib/cjs/workspace/Settings.d.ts +6 -4
  119. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  120. package/lib/cjs/workspace/Settings.js.map +1 -1
  121. package/lib/esm/BriefcaseManager.d.ts +14 -62
  122. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  123. package/lib/esm/BriefcaseManager.js +30 -160
  124. package/lib/esm/BriefcaseManager.js.map +1 -1
  125. package/lib/esm/Category.d.ts +4 -4
  126. package/lib/esm/Category.js.map +1 -1
  127. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  128. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  129. package/lib/esm/ChangesetECAdaptor.js +7 -1
  130. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  131. package/lib/esm/ChangesetReader.d.ts +186 -0
  132. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  133. package/lib/esm/ChangesetReader.js +368 -0
  134. package/lib/esm/ChangesetReader.js.map +1 -0
  135. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  136. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  137. package/lib/esm/ChangesetReaderTypes.js +20 -0
  138. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  139. package/lib/esm/CloudSqlite.d.ts +1 -1
  140. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  141. package/lib/esm/CloudSqlite.js +69 -14
  142. package/lib/esm/CloudSqlite.js.map +1 -1
  143. package/lib/esm/CodeSpecs.d.ts +3 -3
  144. package/lib/esm/CodeSpecs.js.map +1 -1
  145. package/lib/esm/ConcurrentQuery.js.map +1 -1
  146. package/lib/esm/DevTools.js.map +1 -1
  147. package/lib/esm/DisplayStyle.d.ts +2 -2
  148. package/lib/esm/DisplayStyle.js.map +1 -1
  149. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  150. package/lib/esm/ECSqlStatement.js.map +1 -1
  151. package/lib/esm/EditTxn.d.ts +55 -1
  152. package/lib/esm/EditTxn.d.ts.map +1 -1
  153. package/lib/esm/EditTxn.js +43 -1
  154. package/lib/esm/EditTxn.js.map +1 -1
  155. package/lib/esm/Element.d.ts +79 -10
  156. package/lib/esm/Element.d.ts.map +1 -1
  157. package/lib/esm/Element.js +38 -2
  158. package/lib/esm/Element.js.map +1 -1
  159. package/lib/esm/ElementAspect.d.ts +1 -1
  160. package/lib/esm/ElementAspect.js.map +1 -1
  161. package/lib/esm/ElementGraphics.js.map +1 -1
  162. package/lib/esm/ElementTreeWalker.d.ts +5 -5
  163. package/lib/esm/ElementTreeWalker.js.map +1 -1
  164. package/lib/esm/ExternalSource.d.ts +2 -2
  165. package/lib/esm/ExternalSource.d.ts.map +1 -1
  166. package/lib/esm/ExternalSource.js.map +1 -1
  167. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  168. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  169. package/lib/esm/GeographicCRSServices.js +12 -4
  170. package/lib/esm/GeographicCRSServices.js.map +1 -1
  171. package/lib/esm/IModelDb.d.ts +31 -23
  172. package/lib/esm/IModelDb.d.ts.map +1 -1
  173. package/lib/esm/IModelDb.js +45 -26
  174. package/lib/esm/IModelDb.js.map +1 -1
  175. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  176. package/lib/esm/IModelJsFs.d.ts +2 -0
  177. package/lib/esm/IModelJsFs.d.ts.map +1 -1
  178. package/lib/esm/IModelJsFs.js +14 -0
  179. package/lib/esm/IModelJsFs.js.map +1 -1
  180. package/lib/esm/IpcHost.d.ts.map +1 -1
  181. package/lib/esm/IpcHost.js +20 -9
  182. package/lib/esm/IpcHost.js.map +1 -1
  183. package/lib/esm/LineStyle.d.ts +6 -6
  184. package/lib/esm/LineStyle.js.map +1 -1
  185. package/lib/esm/Material.d.ts +1 -1
  186. package/lib/esm/Material.js.map +1 -1
  187. package/lib/esm/Model.d.ts +40 -6
  188. package/lib/esm/Model.d.ts.map +1 -1
  189. package/lib/esm/Model.js +24 -0
  190. package/lib/esm/Model.js.map +1 -1
  191. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  192. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  193. package/lib/esm/PartialChangeUnifier.js +230 -0
  194. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  195. package/lib/esm/Relationship.d.ts +10 -10
  196. package/lib/esm/Relationship.js +6 -6
  197. package/lib/esm/Relationship.js.map +1 -1
  198. package/lib/esm/SheetIndex.d.ts +4 -4
  199. package/lib/esm/SheetIndex.d.ts.map +1 -1
  200. package/lib/esm/SheetIndex.js.map +1 -1
  201. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  202. package/lib/esm/SqliteChangesetReader.js +1 -1
  203. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  204. package/lib/esm/Texture.d.ts +1 -1
  205. package/lib/esm/Texture.js.map +1 -1
  206. package/lib/esm/TxnManager.d.ts +17 -0
  207. package/lib/esm/TxnManager.d.ts.map +1 -1
  208. package/lib/esm/TxnManager.js +121 -14
  209. package/lib/esm/TxnManager.js.map +1 -1
  210. package/lib/esm/ViewDefinition.d.ts +25 -13
  211. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  212. package/lib/esm/ViewDefinition.js +78 -26
  213. package/lib/esm/ViewDefinition.js.map +1 -1
  214. package/lib/esm/ViewStore.d.ts.map +1 -1
  215. package/lib/esm/ViewStore.js +64 -22
  216. package/lib/esm/ViewStore.js.map +1 -1
  217. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  218. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  219. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  220. package/lib/esm/core-backend.d.ts +3 -0
  221. package/lib/esm/core-backend.d.ts.map +1 -1
  222. package/lib/esm/core-backend.js +3 -0
  223. package/lib/esm/core-backend.js.map +1 -1
  224. package/lib/esm/domains/FunctionalElements.d.ts +1 -1
  225. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  226. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  227. package/lib/esm/domains/GenericElements.d.ts +2 -2
  228. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  229. package/lib/esm/domains/GenericElements.js.map +1 -1
  230. package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
  231. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  232. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  233. package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
  234. package/lib/esm/internal/IntegrityCheck.js +22 -22
  235. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  236. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  237. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  238. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  239. package/lib/esm/test/IModelTestUtils.d.ts +1 -0
  240. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  241. package/lib/esm/test/IModelTestUtils.js +5 -0
  242. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  243. package/lib/esm/test/IpcHost.test.js +112 -0
  244. package/lib/esm/test/IpcHost.test.js.map +1 -1
  245. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  246. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  247. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  248. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  249. package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
  250. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  251. package/lib/esm/test/element/ElementRoundTrip.test.js +144 -3
  252. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  253. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  254. package/lib/esm/test/hubaccess/Rebase.test.js +1 -1
  255. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  256. package/lib/esm/test/hubaccess/SemanticRebase.test.js +2242 -68
  257. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  258. package/lib/esm/test/imodel/IModel.test.js +1 -1
  259. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  260. package/lib/esm/test/imodel/SchemaXmlImport.test.js +64 -0
  261. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  262. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  263. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  264. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  265. package/lib/esm/test/standalone/ChangesetReader.test.js +4184 -1654
  266. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  267. package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
  268. package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
  269. package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
  270. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
  271. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  272. package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
  273. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  274. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  275. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  276. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  277. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  278. package/lib/esm/test/standalone/TxnManager.test.js +90 -0
  279. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  280. package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
  281. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  282. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  283. package/lib/esm/workspace/Settings.d.ts +6 -4
  284. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  285. package/lib/esm/workspace/Settings.js.map +1 -1
  286. package/package.json +15 -15
@@ -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, Guid, 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 { ClassRegistry } from \"../ClassRegistry\";\nimport { GeometricElement3d, OnElementDependencyArg, PhysicalPartition } from \"../Element\";\nimport { IModelDb, StandaloneDb } from \"../IModelDb\";\nimport { PhysicalModel } from \"../Model\";\nimport { SubjectOwnsPartitionElements } from \"../NavigationRelationship\";\nimport { ElementDrivesElement, ElementDrivesElementProps, OnDependencyArg } from \"../Relationship\";\nimport { Schema, Schemas } from \"../Schema\";\nimport { EditTxn } from \"../EditTxn\";\nimport { IModelTestUtils } from \"./IModelTestUtils\";\nchai.use(chaiAsPromised);\n\nfunction startTestTxn(iModelDb: IModelDb): EditTxn {\n const txn = new EditTxn(iModelDb, \"element drives element test\");\n txn.start();\n return txn;\n}\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((arg: OnDependencyArg) => this.onDeletedDependency.push([this.iModelDb.elements.tryGetElement<NodeElement>(arg.props.sourceId)?.userLabel as string, this.iModelDb.elements.tryGetElement<NodeElement>(arg.props.targetId)?.userLabel as string]));\n InputDrivesOutput.events.onRootChanged.addListener((arg: OnDependencyArg) => this.onRootChanged.push([this.iModelDb.elements.tryGetElement<NodeElement>(arg.props.sourceId)?.userLabel as string, this.iModelDb.elements.tryGetElement<NodeElement>(arg.props.targetId)?.userLabel as string]));\n NodeElement.events.onAllInputsHandled.addListener((arg: OnElementDependencyArg) => this.onAllInputsHandled.push(this.iModelDb.elements.tryGetElement<NodeElement>(arg.elId)?.userLabel as string));\n NodeElement.events.onBeforeOutputsHandled.addListener((arg: OnElementDependencyArg) => this.onBeforeOutputsHandled.push(this.iModelDb.elements.tryGetElement<NodeElement>(arg.elId)?.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<(arg: OnDependencyArg) => void>(),\n onDeletedDependency: new BeEvent<(arg: OnDependencyArg) => 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 onRootChangedArg(arg: OnDependencyArg): void {\n this.events.onRootChanged.raiseEvent(arg);\n }\n public static override onDeletedDependencyArg(arg: OnDependencyArg): void {\n this.events.onDeletedDependency.raiseEvent(arg);\n }\n}\nexport class NodeElement extends GeometricElement3d {\n public op: string;\n public val: number;\n public static readonly events = {\n onAllInputsHandled: new BeEvent<(arg: OnElementDependencyArg) => void>(),\n onBeforeOutputsHandled: new BeEvent<(arg: OnElementDependencyArg) => 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 onAllInputsHandledArg(arg: OnElementDependencyArg): void {\n this.events.onAllInputsHandled.raiseEvent(arg);\n }\n protected static override onBeforeOutputsHandledArg(arg: OnElementDependencyArg): void {\n this.events.onBeforeOutputsHandled.raiseEvent(arg);\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(txn: EditTxn, 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(txn, 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(txn, 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(txn: EditTxn): Promise<Id64String> {\n const iModelDb = txn.iModel;\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 txn.insertElement(modeledElement.toJSON());\n }\n private static async createModel(txn: EditTxn): Promise<Id64String> {\n const iModelDb = txn.iModel;\n const partitionId = await this.createPartition(txn);\n const modeledElementRef = new RelatedElement({ id: partitionId });\n const newModel = iModelDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName });\n const newModelId = txn.insertModel(newModel.toJSON());\n return newModelId;\n }\n private static async createNodeCategory(txn: EditTxn) {\n const iModelDb = txn.iModel;\n const category = SpatialCategory.create(iModelDb, IModelDb.dictionaryId, NodeElement.classFullName);\n return txn.insertElement(category.toJSON());\n }\n public static async initialize(txn: EditTxn) {\n await NetworkSchema.importSchema(txn.iModel);\n NetworkSchema.registerSchema();\n const modelId = await this.createModel(txn);\n const categoryId = await this.createNodeCategory(txn);\n return {\n modelId,\n categoryId,\n };\n }\n public static async insertNode(txn: EditTxn, modelId: Id64String, name: string, op: string, val: number, location: Point3d, radius: number = 0.1) {\n const iModelDb = txn.iModel;\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 txn.insertElement(props);\n }\n public static async deleteNode(txn: EditTxn, nodeId: Id64String) {\n const iModelDb = txn.iModel;\n await iModelDb.locks.acquireLocks({ exclusive: nodeId });\n return txn.deleteElement(nodeId);\n }\n public static async updateNodeProps(txn: EditTxn, props: Partial<NodeElementProps>) {\n const iModelDb = txn.iModel;\n await iModelDb.locks.acquireLocks({ exclusive: props.id });\n return txn.updateElement(props);\n }\n public static async updateNode(txn: EditTxn, userLabel: string) {\n const iModelDb = txn.iModel;\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(txn, { id });\n }\n public static async deleteEdge(txn: EditTxn, from: string, to: string) {\n const iModelDb = txn.iModel;\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 txn.deleteRelationship(edge);\n }\n public static async insertEdge(txn: EditTxn, 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 txn.insertRelationship(props);\n }\n}\n\ndescribe(\"ElementDrivesElement Tests\", () => {\n const iModels: StandaloneDb[] = [];\n let testTxn: EditTxn | undefined;\n async function openIModel(): Promise<StandaloneDb> {\n const iModelDb = StandaloneDb.createEmpty(\n IModelTestUtils.prepareOutputFile(\"ElementDrivesElement\", `${Guid.createValue()}.bim`),\n { rootSubject: { name: \"ElementDrivesElementTest\" }, enableTransactions: true }\n );\n const txn = new EditTxn(iModelDb, \"open iModel initialization\");\n txn.start();\n txn.end();\n iModels.push(iModelDb);\n return iModelDb;\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 if (testTxn?.isActive)\n testTxn.end(\"abandon\");\n\n testTxn = undefined;\n for (const iModel of iModels)\n iModel.close();\n\n iModels.length = 0;\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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\n const monitor = new ElementDrivesElementEventMonitor(b1);\n await Engine.createGraph(txn, modelId, graph);\n txn.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(txn, \"main.c\");\n txn.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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\n const monitor = new ElementDrivesElementEventMonitor(b1);\n await Engine.createGraph(txn, modelId, graph);\n txn.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(txn, \"Socks\");\n txn.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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\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(txn, modelId, graph);\n txn.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(txn, \"B\");\n txn.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(txn, \"B\", \"E\");\n txn.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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\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(txn, modelId, graph);\n chai.expect(() => txn.saveChanges()).to.throw(\"Could not save changes due to propagation failure.\");\n txn.end(\"abandon\");\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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\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(txn, modelId, graph);\n chai.expect(() => txn.saveChanges()).to.throw(\"Could not save changes due to propagation failure.\");\n txn.end(\"abandon\");\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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\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(txn, 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(() => { onAllInputsHandledCount++; });\n NodeElement.events.onBeforeOutputsHandled.addListener(() => { onBeforeOutputsHandledCount++; });\n\n const stopWatch1 = new StopWatch(\"save changes\", true);\n txn.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, Guid, Id64String, IModelStatus, StopWatch } from \"@itwin/core-bentley\";\nimport { Code, ElementProps, GeometricElement3dProps, GeometryStreamBuilder, GeometryStreamProps, IModel, IModelError, RelatedElement } 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 { ClassRegistry } from \"../ClassRegistry\";\nimport { GeometricElement3d, OnElementDependencyArg, PhysicalPartition } from \"../Element\";\nimport { IModelDb, StandaloneDb } from \"../IModelDb\";\nimport { PhysicalModel } from \"../Model\";\nimport { SubjectOwnsPartitionElements } from \"../NavigationRelationship\";\nimport { ElementDrivesElement, ElementDrivesElementProps, OnDependencyArg } from \"../Relationship\";\nimport { Schema, Schemas } from \"../Schema\";\nimport { EditTxn } from \"../EditTxn\";\nimport { IModelTestUtils } from \"./IModelTestUtils\";\nchai.use(chaiAsPromised);\n\nfunction startTestTxn(iModelDb: IModelDb): EditTxn {\n const txn = new EditTxn(iModelDb, \"element drives element test\");\n txn.start();\n return txn;\n}\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((arg: OnDependencyArg) => this.onDeletedDependency.push([this.iModelDb.elements.tryGetElement<NodeElement>(arg.props.sourceId)?.userLabel as string, this.iModelDb.elements.tryGetElement<NodeElement>(arg.props.targetId)?.userLabel as string]));\n InputDrivesOutput.events.onRootChanged.addListener((arg: OnDependencyArg) => this.onRootChanged.push([this.iModelDb.elements.tryGetElement<NodeElement>(arg.props.sourceId)?.userLabel as string, this.iModelDb.elements.tryGetElement<NodeElement>(arg.props.targetId)?.userLabel as string]));\n NodeElement.events.onAllInputsHandled.addListener((arg: OnElementDependencyArg) => this.onAllInputsHandled.push(this.iModelDb.elements.tryGetElement<NodeElement>(arg.elId)?.userLabel as string));\n NodeElement.events.onBeforeOutputsHandled.addListener((arg: OnElementDependencyArg) => this.onBeforeOutputsHandled.push(this.iModelDb.elements.tryGetElement<NodeElement>(arg.elId)?.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<(arg: OnDependencyArg) => void>(),\n onDeletedDependency: new BeEvent<(arg: OnDependencyArg) => 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 onRootChangedArg(arg: OnDependencyArg): void {\n this.events.onRootChanged.raiseEvent(arg);\n }\n public static override onDeletedDependencyArg(arg: OnDependencyArg): void {\n this.events.onDeletedDependency.raiseEvent(arg);\n }\n}\nexport class NodeElement extends GeometricElement3d {\n public op: string;\n public val: number;\n public static readonly events = {\n onAllInputsHandled: new BeEvent<(arg: OnElementDependencyArg) => void>(),\n onBeforeOutputsHandled: new BeEvent<(arg: OnElementDependencyArg) => 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 onAllInputsHandledArg(arg: OnElementDependencyArg): void {\n this.events.onAllInputsHandled.raiseEvent(arg);\n }\n protected static override onBeforeOutputsHandledArg(arg: OnElementDependencyArg): void {\n this.events.onBeforeOutputsHandled.raiseEvent(arg);\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(txn: EditTxn, 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(txn, 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(txn, 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(txn: EditTxn): Promise<Id64String> {\n const iModelDb = txn.iModel;\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 txn.insertElement(modeledElement.toJSON());\n }\n private static async createModel(txn: EditTxn): Promise<Id64String> {\n const iModelDb = txn.iModel;\n const partitionId = await this.createPartition(txn);\n const modeledElementRef = new RelatedElement({ id: partitionId });\n const newModel = iModelDb.models.createModel({ modeledElement: modeledElementRef, classFullName: PhysicalModel.classFullName });\n const newModelId = txn.insertModel(newModel.toJSON());\n return newModelId;\n }\n private static async createNodeCategory(txn: EditTxn) {\n const iModelDb = txn.iModel;\n const category = SpatialCategory.create(iModelDb, IModelDb.dictionaryId, NodeElement.classFullName);\n return txn.insertElement(category.toJSON());\n }\n public static async initialize(txn: EditTxn) {\n await NetworkSchema.importSchema(txn.iModel);\n NetworkSchema.registerSchema();\n const modelId = await this.createModel(txn);\n const categoryId = await this.createNodeCategory(txn);\n return {\n modelId,\n categoryId,\n };\n }\n public static async insertNode(txn: EditTxn, modelId: Id64String, name: string, op: string, val: number, location: Point3d, radius: number = 0.1) {\n const iModelDb = txn.iModel;\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 txn.insertElement(props);\n }\n public static async deleteNode(txn: EditTxn, nodeId: Id64String) {\n const iModelDb = txn.iModel;\n await iModelDb.locks.acquireLocks({ exclusive: nodeId });\n return txn.deleteElement(nodeId);\n }\n public static async updateNodeProps(txn: EditTxn, props: Partial<NodeElementProps>) {\n const iModelDb = txn.iModel;\n await iModelDb.locks.acquireLocks({ exclusive: props.id });\n return txn.updateElement(props);\n }\n public static async updateNode(txn: EditTxn, userLabel: string) {\n const iModelDb = txn.iModel;\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(txn, { id });\n }\n public static async deleteEdge(txn: EditTxn, from: string, to: string) {\n const iModelDb = txn.iModel;\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 };\n return undefined;\n });\n if (!edge) {\n throw new Error(`Edge from ${from} to ${to} not found`);\n }\n txn.deleteRelationship(edge);\n }\n public static async insertEdge(txn: EditTxn, 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 txn.insertRelationship(props);\n }\n}\n\ndescribe(\"ElementDrivesElement Tests\", () => {\n const iModels: StandaloneDb[] = [];\n let testTxn: EditTxn | undefined;\n async function openIModel(): Promise<StandaloneDb> {\n const iModelDb = StandaloneDb.createEmpty(\n IModelTestUtils.prepareOutputFile(\"ElementDrivesElement\", `${Guid.createValue()}.bim`),\n { rootSubject: { name: \"ElementDrivesElementTest\" }, enableTransactions: true }\n );\n const txn = new EditTxn(iModelDb, \"open iModel initialization\");\n txn.start();\n txn.end();\n iModels.push(iModelDb);\n return iModelDb;\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 if (testTxn?.isActive)\n testTxn.end(\"abandon\");\n\n testTxn = undefined;\n for (const iModel of iModels)\n iModel.close();\n\n iModels.length = 0;\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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\n const monitor = new ElementDrivesElementEventMonitor(b1);\n await Engine.createGraph(txn, modelId, graph);\n txn.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(txn, \"main.c\");\n txn.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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\n const monitor = new ElementDrivesElementEventMonitor(b1);\n await Engine.createGraph(txn, modelId, graph);\n txn.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(txn, \"Socks\");\n txn.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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\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(txn, modelId, graph);\n txn.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(txn, \"B\");\n txn.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(txn, \"B\", \"E\");\n txn.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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\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(txn, modelId, graph);\n chai.expect(() => txn.saveChanges()).to.throw(\"Could not save changes due to propagation failure.\");\n txn.end(\"abandon\");\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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\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(txn, modelId, graph);\n chai.expect(() => txn.saveChanges()).to.throw(\"Could not save changes due to propagation failure.\");\n txn.end(\"abandon\");\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 openIModel();\n const txn = testTxn = startTestTxn(b1);\n const { modelId, } = await Engine.initialize(txn);\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(txn, 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(() => { onAllInputsHandledCount++; });\n NodeElement.events.onBeforeOutputsHandled.addListener(() => { onBeforeOutputsHandledCount++; });\n\n const stopWatch1 = new StopWatch(\"save changes\", true);\n txn.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"]}
@@ -158,6 +158,7 @@ export declare class IModelTestUtils {
158
158
  static insertSpatialCategory(iModelDb: IModelDb, modelId: Id64String, categoryName: string, color: ColorDef): Id64String;
159
159
  static createBoxes(subCategoryIds: Id64String[]): GeometryStreamProps;
160
160
  static createBox(size: Point3d, categoryId?: Id64String, subCategoryId?: Id64String, renderMaterialId?: Id64String, geometryPartId?: Id64String): GeometryStreamProps;
161
+ static insertTextureElement(txn: EditTxn, modelId: Id64String, textureName: string): Id64String;
161
162
  static createCylinder(radius: number): GeometryStreamProps;
162
163
  static createRectangle(size: Point2d): GeometryStreamProps;
163
164
  static queryByUserLabel(iModelDb: IModelDb, userLabel: string): Id64String;
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTestUtils.d.ts","sourceRoot":"","sources":["../../../src/test/IModelTestUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IModelTestUtils.d.ts","sourceRoot":"","sources":["../../../src/test/IModelTestUtils.ts"],"names":[],"mappings":"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"}
@@ -523,6 +523,11 @@ export class IModelTestUtils {
523
523
  }
524
524
  return geometryStreamBuilder.geometryStream;
525
525
  }
526
+ static insertTextureElement(txn, modelId, textureName) {
527
+ // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in bottom right pixel. The rest of the square is red.
528
+ const pngData = [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217, 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65, 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];
529
+ return Texture.insertTexture(txn, modelId, textureName, ImageSourceFormat.Png, Buffer.from(pngData).toString("base64"), `Description for ${textureName}`);
530
+ }
526
531
  static createCylinder(radius) {
527
532
  const pointA = Point3d.create(0, 0, 0);
528
533
  const pointB = Point3d.create(0, 0, 2 * radius);