@itwin/core-backend 5.9.0-dev.3 → 5.9.0-dev.5

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 (426) hide show
  1. package/lib/cjs/BriefcaseManager.js +3 -3
  2. package/lib/cjs/BriefcaseManager.js.map +1 -1
  3. package/lib/cjs/Category.d.ts +37 -7
  4. package/lib/cjs/Category.d.ts.map +1 -1
  5. package/lib/cjs/Category.js +33 -42
  6. package/lib/cjs/Category.js.map +1 -1
  7. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  8. package/lib/cjs/ChangesetECAdaptor.js +5 -2
  9. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  10. package/lib/cjs/ChannelControl.d.ts +29 -0
  11. package/lib/cjs/ChannelControl.d.ts.map +1 -1
  12. package/lib/cjs/ChannelControl.js.map +1 -1
  13. package/lib/cjs/CheckpointManager.js +1 -1
  14. package/lib/cjs/CheckpointManager.js.map +1 -1
  15. package/lib/cjs/CodeSpecs.d.ts +32 -3
  16. package/lib/cjs/CodeSpecs.d.ts.map +1 -1
  17. package/lib/cjs/CodeSpecs.js +48 -20
  18. package/lib/cjs/CodeSpecs.js.map +1 -1
  19. package/lib/cjs/DisplayStyle.d.ts +18 -3
  20. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  21. package/lib/cjs/DisplayStyle.js +10 -21
  22. package/lib/cjs/DisplayStyle.js.map +1 -1
  23. package/lib/cjs/EditTxn.d.ts +262 -0
  24. package/lib/cjs/EditTxn.d.ts.map +1 -0
  25. package/lib/cjs/EditTxn.js +548 -0
  26. package/lib/cjs/EditTxn.js.map +1 -0
  27. package/lib/cjs/Element.d.ts +74 -5
  28. package/lib/cjs/Element.d.ts.map +1 -1
  29. package/lib/cjs/Element.js +63 -75
  30. package/lib/cjs/Element.js.map +1 -1
  31. package/lib/cjs/ElementAspect.d.ts +10 -0
  32. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  33. package/lib/cjs/ElementAspect.js +21 -12
  34. package/lib/cjs/ElementAspect.js.map +1 -1
  35. package/lib/cjs/ElementTreeWalker.d.ts +56 -3
  36. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  37. package/lib/cjs/ElementTreeWalker.js +53 -40
  38. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  39. package/lib/cjs/ExternalSource.d.ts +11 -2
  40. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  41. package/lib/cjs/ExternalSource.js +10 -8
  42. package/lib/cjs/ExternalSource.js.map +1 -1
  43. package/lib/cjs/IModelDb.d.ts +66 -22
  44. package/lib/cjs/IModelDb.d.ts.map +1 -1
  45. package/lib/cjs/IModelDb.js +174 -288
  46. package/lib/cjs/IModelDb.js.map +1 -1
  47. package/lib/cjs/IModelHost.d.ts +22 -0
  48. package/lib/cjs/IModelHost.d.ts.map +1 -1
  49. package/lib/cjs/IModelHost.js +9 -0
  50. package/lib/cjs/IModelHost.js.map +1 -1
  51. package/lib/cjs/IpcHost.js +2 -2
  52. package/lib/cjs/IpcHost.js.map +1 -1
  53. package/lib/cjs/LineStyle.d.ts +47 -7
  54. package/lib/cjs/LineStyle.d.ts.map +1 -1
  55. package/lib/cjs/LineStyle.js +38 -33
  56. package/lib/cjs/LineStyle.js.map +1 -1
  57. package/lib/cjs/Material.d.ts +8 -1
  58. package/lib/cjs/Material.d.ts.map +1 -1
  59. package/lib/cjs/Material.js +6 -12
  60. package/lib/cjs/Material.js.map +1 -1
  61. package/lib/cjs/Model.d.ts +59 -20
  62. package/lib/cjs/Model.d.ts.map +1 -1
  63. package/lib/cjs/Model.js +38 -80
  64. package/lib/cjs/Model.js.map +1 -1
  65. package/lib/cjs/Relationship.d.ts +72 -7
  66. package/lib/cjs/Relationship.d.ts.map +1 -1
  67. package/lib/cjs/Relationship.js +39 -21
  68. package/lib/cjs/Relationship.js.map +1 -1
  69. package/lib/cjs/SchemaSync.js +4 -4
  70. package/lib/cjs/SchemaSync.js.map +1 -1
  71. package/lib/cjs/SheetIndex.d.ts +9 -0
  72. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  73. package/lib/cjs/SheetIndex.js +38 -35
  74. package/lib/cjs/SheetIndex.js.map +1 -1
  75. package/lib/cjs/StashManager.js +1 -1
  76. package/lib/cjs/StashManager.js.map +1 -1
  77. package/lib/cjs/Texture.d.ts +6 -0
  78. package/lib/cjs/Texture.d.ts.map +1 -1
  79. package/lib/cjs/Texture.js +6 -14
  80. package/lib/cjs/Texture.js.map +1 -1
  81. package/lib/cjs/TxnManager.d.ts +5 -5
  82. package/lib/cjs/TxnManager.d.ts.map +1 -1
  83. package/lib/cjs/TxnManager.js +23 -7
  84. package/lib/cjs/TxnManager.js.map +1 -1
  85. package/lib/cjs/ViewDefinition.d.ts +21 -1
  86. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  87. package/lib/cjs/ViewDefinition.js +27 -66
  88. package/lib/cjs/ViewDefinition.js.map +1 -1
  89. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
  90. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  91. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +33 -27
  92. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  93. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  94. package/lib/cjs/annotations/TextAnnotationElement.js +6 -5
  95. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  96. package/lib/cjs/core-backend.d.ts +1 -0
  97. package/lib/cjs/core-backend.d.ts.map +1 -1
  98. package/lib/cjs/core-backend.js +1 -0
  99. package/lib/cjs/core-backend.js.map +1 -1
  100. package/lib/cjs/domains/FunctionalElements.d.ts +6 -2
  101. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  102. package/lib/cjs/domains/FunctionalElements.js +8 -13
  103. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  104. package/lib/cjs/domains/GenericElements.d.ts +11 -4
  105. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  106. package/lib/cjs/domains/GenericElements.js +13 -24
  107. package/lib/cjs/domains/GenericElements.js.map +1 -1
  108. package/lib/cjs/internal/ChannelAdmin.d.ts +15 -0
  109. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  110. package/lib/cjs/internal/ChannelAdmin.js +5 -3
  111. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  112. package/lib/cjs/internal/Symbols.d.ts +4 -0
  113. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  114. package/lib/cjs/internal/Symbols.js +5 -1
  115. package/lib/cjs/internal/Symbols.js.map +1 -1
  116. package/lib/cjs/internal/annotations/fields.d.ts +3 -2
  117. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  118. package/lib/cjs/internal/annotations/fields.js +7 -6
  119. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  120. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  121. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  122. package/lib/esm/BriefcaseManager.js +3 -3
  123. package/lib/esm/BriefcaseManager.js.map +1 -1
  124. package/lib/esm/Category.d.ts +37 -7
  125. package/lib/esm/Category.d.ts.map +1 -1
  126. package/lib/esm/Category.js +33 -42
  127. package/lib/esm/Category.js.map +1 -1
  128. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  129. package/lib/esm/ChangesetECAdaptor.js +5 -2
  130. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  131. package/lib/esm/ChannelControl.d.ts +29 -0
  132. package/lib/esm/ChannelControl.d.ts.map +1 -1
  133. package/lib/esm/ChannelControl.js.map +1 -1
  134. package/lib/esm/CheckpointManager.js +1 -1
  135. package/lib/esm/CheckpointManager.js.map +1 -1
  136. package/lib/esm/CodeSpecs.d.ts +32 -3
  137. package/lib/esm/CodeSpecs.d.ts.map +1 -1
  138. package/lib/esm/CodeSpecs.js +49 -21
  139. package/lib/esm/CodeSpecs.js.map +1 -1
  140. package/lib/esm/DisplayStyle.d.ts +18 -3
  141. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  142. package/lib/esm/DisplayStyle.js +10 -21
  143. package/lib/esm/DisplayStyle.js.map +1 -1
  144. package/lib/esm/EditTxn.d.ts +262 -0
  145. package/lib/esm/EditTxn.d.ts.map +1 -0
  146. package/lib/esm/EditTxn.js +543 -0
  147. package/lib/esm/EditTxn.js.map +1 -0
  148. package/lib/esm/Element.d.ts +74 -5
  149. package/lib/esm/Element.d.ts.map +1 -1
  150. package/lib/esm/Element.js +64 -76
  151. package/lib/esm/Element.js.map +1 -1
  152. package/lib/esm/ElementAspect.d.ts +10 -0
  153. package/lib/esm/ElementAspect.d.ts.map +1 -1
  154. package/lib/esm/ElementAspect.js +22 -13
  155. package/lib/esm/ElementAspect.js.map +1 -1
  156. package/lib/esm/ElementTreeWalker.d.ts +56 -3
  157. package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
  158. package/lib/esm/ElementTreeWalker.js +53 -40
  159. package/lib/esm/ElementTreeWalker.js.map +1 -1
  160. package/lib/esm/ExternalSource.d.ts +11 -2
  161. package/lib/esm/ExternalSource.d.ts.map +1 -1
  162. package/lib/esm/ExternalSource.js +10 -8
  163. package/lib/esm/ExternalSource.js.map +1 -1
  164. package/lib/esm/IModelDb.d.ts +66 -22
  165. package/lib/esm/IModelDb.d.ts.map +1 -1
  166. package/lib/esm/IModelDb.js +176 -290
  167. package/lib/esm/IModelDb.js.map +1 -1
  168. package/lib/esm/IModelHost.d.ts +22 -0
  169. package/lib/esm/IModelHost.d.ts.map +1 -1
  170. package/lib/esm/IModelHost.js +9 -0
  171. package/lib/esm/IModelHost.js.map +1 -1
  172. package/lib/esm/IpcHost.js +3 -3
  173. package/lib/esm/IpcHost.js.map +1 -1
  174. package/lib/esm/LineStyle.d.ts +47 -7
  175. package/lib/esm/LineStyle.d.ts.map +1 -1
  176. package/lib/esm/LineStyle.js +38 -33
  177. package/lib/esm/LineStyle.js.map +1 -1
  178. package/lib/esm/Material.d.ts +8 -1
  179. package/lib/esm/Material.d.ts.map +1 -1
  180. package/lib/esm/Material.js +6 -12
  181. package/lib/esm/Material.js.map +1 -1
  182. package/lib/esm/Model.d.ts +59 -20
  183. package/lib/esm/Model.d.ts.map +1 -1
  184. package/lib/esm/Model.js +39 -81
  185. package/lib/esm/Model.js.map +1 -1
  186. package/lib/esm/Relationship.d.ts +72 -7
  187. package/lib/esm/Relationship.d.ts.map +1 -1
  188. package/lib/esm/Relationship.js +40 -22
  189. package/lib/esm/Relationship.js.map +1 -1
  190. package/lib/esm/SchemaSync.js +5 -5
  191. package/lib/esm/SchemaSync.js.map +1 -1
  192. package/lib/esm/SheetIndex.d.ts +9 -0
  193. package/lib/esm/SheetIndex.d.ts.map +1 -1
  194. package/lib/esm/SheetIndex.js +38 -35
  195. package/lib/esm/SheetIndex.js.map +1 -1
  196. package/lib/esm/StashManager.js +1 -1
  197. package/lib/esm/StashManager.js.map +1 -1
  198. package/lib/esm/Texture.d.ts +6 -0
  199. package/lib/esm/Texture.d.ts.map +1 -1
  200. package/lib/esm/Texture.js +6 -14
  201. package/lib/esm/Texture.js.map +1 -1
  202. package/lib/esm/TxnManager.d.ts +5 -5
  203. package/lib/esm/TxnManager.d.ts.map +1 -1
  204. package/lib/esm/TxnManager.js +23 -7
  205. package/lib/esm/TxnManager.js.map +1 -1
  206. package/lib/esm/ViewDefinition.d.ts +21 -1
  207. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  208. package/lib/esm/ViewDefinition.js +27 -66
  209. package/lib/esm/ViewDefinition.js.map +1 -1
  210. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
  211. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  212. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +33 -27
  213. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  214. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  215. package/lib/esm/annotations/TextAnnotationElement.js +6 -5
  216. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  217. package/lib/esm/core-backend.d.ts +1 -0
  218. package/lib/esm/core-backend.d.ts.map +1 -1
  219. package/lib/esm/core-backend.js +1 -0
  220. package/lib/esm/core-backend.js.map +1 -1
  221. package/lib/esm/domains/FunctionalElements.d.ts +6 -2
  222. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  223. package/lib/esm/domains/FunctionalElements.js +8 -13
  224. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  225. package/lib/esm/domains/GenericElements.d.ts +11 -4
  226. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  227. package/lib/esm/domains/GenericElements.js +13 -24
  228. package/lib/esm/domains/GenericElements.js.map +1 -1
  229. package/lib/esm/internal/ChannelAdmin.d.ts +15 -0
  230. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  231. package/lib/esm/internal/ChannelAdmin.js +6 -4
  232. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  233. package/lib/esm/internal/Symbols.d.ts +4 -0
  234. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  235. package/lib/esm/internal/Symbols.js +4 -0
  236. package/lib/esm/internal/Symbols.js.map +1 -1
  237. package/lib/esm/internal/annotations/fields.d.ts +3 -2
  238. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  239. package/lib/esm/internal/annotations/fields.js +7 -6
  240. package/lib/esm/internal/annotations/fields.js.map +1 -1
  241. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  242. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  243. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  244. package/lib/esm/test/ElementDrivesElement.test.d.ts +20 -19
  245. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  246. package/lib/esm/test/ElementDrivesElement.test.js +111 -96
  247. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  248. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  249. package/lib/esm/test/IModelHost.test.js +56 -2
  250. package/lib/esm/test/IModelHost.test.js.map +1 -1
  251. package/lib/esm/test/IModelTestUtils.d.ts +23 -23
  252. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  253. package/lib/esm/test/IModelTestUtils.js +466 -449
  254. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  255. package/lib/esm/test/PropertyDb.test.js +2 -2
  256. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  257. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +27 -18
  258. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  259. package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -1
  260. package/lib/esm/test/TestChangeSetUtility.js +11 -7
  261. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  262. package/lib/esm/test/TestEditTxn.d.ts +8 -0
  263. package/lib/esm/test/TestEditTxn.d.ts.map +1 -0
  264. package/lib/esm/test/TestEditTxn.js +34 -0
  265. package/lib/esm/test/TestEditTxn.js.map +1 -0
  266. package/lib/esm/test/TestUtils.d.ts +1 -0
  267. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  268. package/lib/esm/test/TestUtils.js +8 -1
  269. package/lib/esm/test/TestUtils.js.map +1 -1
  270. package/lib/esm/test/annotations/Fields.test.js +82 -90
  271. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  272. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  273. package/lib/esm/test/annotations/TextAnnotation.test.js +156 -99
  274. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  275. package/lib/esm/test/annotations/TextBlock.test.js +5 -3
  276. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  277. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  278. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  279. package/lib/esm/test/categories/Category.test.js +63 -3
  280. package/lib/esm/test/categories/Category.test.js.map +1 -1
  281. package/lib/esm/test/codespec/CodeSpec.test.js +88 -5
  282. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  283. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  284. package/lib/esm/test/ecdb/ECSqlAst.test.js +3 -2
  285. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  286. package/lib/esm/test/ecdb/ECSqlQuery.test.js +2 -2
  287. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  288. package/lib/esm/test/ecdb/ECSqlStatement.test.js +0 -1
  289. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  290. package/lib/esm/test/ecdb/QueryReaders.test.js +17 -14
  291. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  292. package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -2
  293. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  294. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  295. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +30 -28
  296. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  297. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  298. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  299. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  300. package/lib/esm/test/element/DeleteDefinitionElements.test.js +159 -143
  301. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  302. package/lib/esm/test/element/ElementAspect.test.js +68 -60
  303. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  304. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -1
  305. package/lib/esm/test/element/ElementDependencyGraph.test.js +51 -43
  306. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  307. package/lib/esm/test/element/ElementRoundTrip.test.js +37 -38
  308. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  309. package/lib/esm/test/element/ExcludedElements.test.js +2 -2
  310. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  311. package/lib/esm/test/element/ExternalSource.test.js +40 -38
  312. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  313. package/lib/esm/test/element/NullStructArray.test.js +10 -9
  314. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  315. package/lib/esm/test/element/ProjectInformationRecord.test.js +5 -2
  316. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  317. package/lib/esm/test/element/SheetInformationAspect.test.js +43 -11
  318. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  319. package/lib/esm/test/element/UrlLink.test.js +2 -2
  320. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  321. package/lib/esm/test/font/IModelDbFonts.test.js +87 -73
  322. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  323. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +164 -125
  324. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  325. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +2 -4
  326. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  327. package/lib/esm/test/hubaccess/Rebase.test.js +313 -247
  328. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  329. package/lib/esm/test/hubaccess/SemanticRebase.test.js +322 -247
  330. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  331. package/lib/esm/test/imodel/Code.test.js +31 -31
  332. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  333. package/lib/esm/test/imodel/ElementTreeWalker.test.js +57 -48
  334. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  335. package/lib/esm/test/imodel/IModel.test.js +419 -344
  336. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  337. package/lib/esm/test/imodel/ProjectExtents.test.js +2 -2
  338. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  339. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  340. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -1
  341. package/lib/esm/test/incrementalSchemaLocater/TestContext.js +2 -2
  342. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  343. package/lib/esm/test/index.d.ts +1 -0
  344. package/lib/esm/test/index.d.ts.map +1 -1
  345. package/lib/esm/test/index.js +1 -0
  346. package/lib/esm/test/index.js.map +1 -1
  347. package/lib/esm/test/schema/ClassRegistry.test.js +23 -22
  348. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  349. package/lib/esm/test/schema/FunctionalDomain.test.js +36 -34
  350. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  351. package/lib/esm/test/schema/GenericDomain.test.js +114 -94
  352. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  353. package/lib/esm/test/schema/IModelSchemaContext.test.js +2 -1
  354. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  355. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +207 -192
  356. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  357. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +1 -3
  358. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -1
  359. package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -247
  360. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  361. package/lib/esm/test/standalone/ChangeMerge.test.js +101 -82
  362. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  363. package/lib/esm/test/standalone/ChangesetReader.test.js +114 -85
  364. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  365. package/lib/esm/test/standalone/DisplayStyle.test.js +43 -40
  366. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  367. package/lib/esm/test/standalone/Drawing.test.js +4 -3
  368. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  369. package/lib/esm/test/standalone/EditTxn.test.d.ts +2 -0
  370. package/lib/esm/test/standalone/EditTxn.test.d.ts.map +1 -0
  371. package/lib/esm/test/standalone/EditTxn.test.js +219 -0
  372. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -0
  373. package/lib/esm/test/standalone/ElementMesh.test.js +16 -13
  374. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  375. package/lib/esm/test/standalone/ExportGraphics.test.js +26 -20
  376. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  377. package/lib/esm/test/standalone/GeometryChangeEvents.test.js +11 -15
  378. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  379. package/lib/esm/test/standalone/GeometryStream.test.js +212 -165
  380. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  381. package/lib/esm/test/standalone/HubMock.test.js +31 -25
  382. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  383. package/lib/esm/test/standalone/IModelLimits.test.js +11 -8
  384. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  385. package/lib/esm/test/standalone/IModelWrite.test.d.ts +2 -2
  386. package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
  387. package/lib/esm/test/standalone/IModelWrite.test.js +184 -142
  388. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  389. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +25 -22
  390. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  391. package/lib/esm/test/standalone/IntegrityCheck.test.js +20 -18
  392. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  393. package/lib/esm/test/standalone/MergeConflict.test.d.ts +2 -2
  394. package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -1
  395. package/lib/esm/test/standalone/MergeConflict.test.js +49 -33
  396. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  397. package/lib/esm/test/standalone/RenderMaterialElement.test.js +5 -5
  398. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  399. package/lib/esm/test/standalone/RenderTimeline.test.js +3 -2
  400. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  401. package/lib/esm/test/standalone/SectionDrawing.test.js +7 -7
  402. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  403. package/lib/esm/test/standalone/ServerBasedLocks.test.js +21 -19
  404. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  405. package/lib/esm/test/standalone/Settings.test.js +7 -4
  406. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  407. package/lib/esm/test/standalone/SettingsSchemas.test.js +2 -1
  408. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  409. package/lib/esm/test/standalone/SnapshotDb.test.js +3 -1
  410. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  411. package/lib/esm/test/standalone/StandaloneDb.test.js +7 -6
  412. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  413. package/lib/esm/test/standalone/Texture.test.js +5 -4
  414. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  415. package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -1
  416. package/lib/esm/test/standalone/TileCache.test.js +5 -3
  417. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  418. package/lib/esm/test/standalone/TileTree.test.js +35 -31
  419. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  420. package/lib/esm/test/standalone/TxnManager.test.js +700 -653
  421. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  422. package/lib/esm/test/standalone/ViewDefinition.test.js +295 -229
  423. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  424. package/lib/esm/test/standalone/Workspace.test.js +25 -23
  425. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  426. package/package.json +12 -12
@@ -7,11 +7,15 @@ import { assert } from "chai";
7
7
  import * as fs from "fs";
8
8
  import * as path from "path";
9
9
  import { Guid, Logger, OpenMode } from "@itwin/core-bentley";
10
+ import { EditTxn, withEditTxn } from "../../EditTxn";
10
11
  import { CodeScopeSpec, CodeSpec, ColorByName, DomainOptions, GeometryStreamBuilder, IModel, SubCategoryAppearance, } from "@itwin/core-common";
11
12
  import { LineSegment3d, Point3d, YawPitchRollAngles } from "@itwin/core-geometry";
12
13
  import { _nativeDb, ChannelControl, IModelJsFs, PhysicalModel, SpatialCategory, StandaloneDb } from "../../core-backend";
13
14
  import { IModelTestUtils, TestElementDrivesElement, TestPhysicalObject } from "../IModelTestUtils";
14
15
  import { IModelNative } from "../../internal/NativePlatform";
16
+ function saveTestChanges(txn, args) {
17
+ txn.saveChanges(args);
18
+ }
15
19
  export function copyFile(newName, pathToCopy) {
16
20
  const newPath = path.join(path.dirname(pathToCopy), newName);
17
21
  try {
@@ -36,6 +40,7 @@ class DependencyCallbackResults {
36
40
  }
37
41
  class TestHelper {
38
42
  db;
43
+ txn;
39
44
  dres = new DependencyCallbackResults();
40
45
  removals = [];
41
46
  codeSpecId = "";
@@ -49,11 +54,15 @@ class TestHelper {
49
54
  this.db = StandaloneDb.openFile(writeDbFileName, OpenMode.ReadWrite);
50
55
  assert.isTrue(this.db !== undefined);
51
56
  this.db.channels.addAllowedChannel(ChannelControl.sharedChannelName);
57
+ this.txn = new EditTxn(this.db, `${testName} element dependency graph`);
58
+ this.txn.start();
52
59
  this.db[_nativeDb].enableTxnTesting();
53
60
  assert.equal(this.db[_nativeDb].addChildPropagatesChangesToParentRelationship("TestBim", "ChildPropagatesChangesToParent"), 0);
54
61
  this.setElementDependencyGraphCallbacks();
55
62
  }
56
63
  terminate() {
64
+ if (this.txn.isActive)
65
+ this.txn.end("abandon");
57
66
  this.db.close();
58
67
  assert.isFalse(this.db.isOpen);
59
68
  this.removeElementDependencyGraphCallbacks();
@@ -76,12 +85,12 @@ class TestHelper {
76
85
  };
77
86
  }
78
87
  insertElement(codeValue, parent) {
79
- return this.db.elements.insertElement(this.makeElement(codeValue, parent));
88
+ return this.txn.insertElement(this.makeElement(codeValue, parent));
80
89
  }
81
90
  updateElement(elid, newLabel) {
82
91
  const ed2 = this.db.elements.getElement({ id: elid });
83
92
  ed2.userLabel = newLabel;
84
- this.db.elements.updateElement(ed2.toJSON());
93
+ this.txn.updateElement(ed2.toJSON());
85
94
  }
86
95
  fmtElem(elId) { return this.db.elements.getElement(elId).code.value; }
87
96
  fmtRel(props) { return `${props.classFullName} ${this.fmtElem(props.sourceId)} --> ${this.fmtElem(props.targetId)}`; }
@@ -89,21 +98,21 @@ class TestHelper {
89
98
  this.dres = new DependencyCallbackResults();
90
99
  }
91
100
  setElementDependencyGraphCallbacks() {
92
- this.removals.push(TestElementDrivesElement.deletedDependency.addListener((evProps) => {
93
- Logger.logTrace("EDGTest", `_onDeletedDependency ${this.fmtRel(evProps)}`);
94
- this.dres.deletedDependency.push(evProps);
101
+ this.removals.push(TestElementDrivesElement.deletedDependency.addListener((arg) => {
102
+ Logger.logTrace("EDGTest", `_onDeletedDependency ${this.fmtRel(arg.props)}`);
103
+ this.dres.deletedDependency.push(arg.props);
95
104
  }));
96
- this.removals.push(TestElementDrivesElement.rootChanged.addListener((evProps, _im) => {
97
- Logger.logTrace("EDGTest", `_onRootChanged ${this.fmtRel(evProps)}`);
98
- this.dres.rootChanged.push(evProps);
105
+ this.removals.push(TestElementDrivesElement.rootChanged.addListener((arg) => {
106
+ Logger.logTrace("EDGTest", `_onRootChanged ${this.fmtRel(arg.props)}`);
107
+ this.dres.rootChanged.push(arg.props);
99
108
  }));
100
- this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((elId) => {
101
- Logger.logTrace("EDGTest", `_onBeforeOutputsHandled ${this.fmtElem(elId)}`);
102
- this.dres.beforeOutputs.push(elId);
109
+ this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((arg) => {
110
+ Logger.logTrace("EDGTest", `_onBeforeOutputsHandled ${this.fmtElem(arg.elId)}`);
111
+ this.dres.beforeOutputs.push(arg.elId);
103
112
  }));
104
- this.removals.push(TestPhysicalObject.allInputsHandled.addListener((elId) => {
105
- Logger.logTrace("EDGTest", `_onAllInputsHandled ${this.fmtElem(elId)}`);
106
- this.dres.allInputsHandled.push(elId);
113
+ this.removals.push(TestPhysicalObject.allInputsHandled.addListener((arg) => {
114
+ Logger.logTrace("EDGTest", `_onAllInputsHandled ${this.fmtElem(arg.elId)}`);
115
+ this.dres.allInputsHandled.push(arg.elId);
107
116
  }));
108
117
  }
109
118
  removeElementDependencyGraphCallbacks() {
@@ -134,11 +143,10 @@ describe("ElementDependencyGraph", () => {
134
143
  const imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);
135
144
  await imodel.importSchemas([schemaFileName]); // will throw an exception if import fails
136
145
  imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
137
- const physicalModelId = PhysicalModel.insert(imodel, IModel.rootSubjectId, "EDGTestModel");
138
- const codeSpecId = imodel.codeSpecs.insert(CodeSpec.create(imodel, "EDGTestCodeSpec", CodeScopeSpec.Type.Model));
139
- const spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, "EDGTestSpatialCategory", new SubCategoryAppearance({ color: ColorByName.darkRed }));
146
+ const physicalModelId = withEditTxn(imodel, (txn) => PhysicalModel.insert(txn, IModel.rootSubjectId, "EDGTestModel"));
147
+ const codeSpecId = withEditTxn(imodel, (txn) => imodel.codeSpecs.insert(txn, CodeSpec.create(imodel, "EDGTestCodeSpec", CodeScopeSpec.Type.Model)));
148
+ const spatialCategoryId = withEditTxn(imodel, (txn) => SpatialCategory.insert(txn, IModel.dictionaryId, "EDGTestSpatialCategory", new SubCategoryAppearance({ color: ColorByName.darkRed })));
140
149
  dbInfo = { physicalModelId, codeSpecId, spatialCategoryId, seedFileName: testFileName };
141
- imodel.saveChanges("");
142
150
  imodel[_nativeDb].deleteAllTxns();
143
151
  imodel.close();
144
152
  });
@@ -150,22 +158,22 @@ describe("ElementDependencyGraph", () => {
150
158
  const e1id = helper.insertElement("e1");
151
159
  const e2id = helper.insertElement("e2");
152
160
  const e3id = helper.insertElement("e3");
153
- helper.db.saveChanges(); // get the elements into the iModel
161
+ saveTestChanges(helper.txn); // get the elements into the iModel
154
162
  const ede_1_2 = TestElementDrivesElement.create(helper.db, e1id, e2id);
155
163
  const ede_2_3 = TestElementDrivesElement.create(helper.db, e2id, e3id);
156
164
  for (const ede of [ede_1_2, ede_2_3]) {
157
- ede.insert();
165
+ ede.id = helper.txn.insertRelationship(ede.toJSON());
158
166
  }
159
167
  // The full graph:
160
168
  // e1 --> e2 --> e3
161
169
  helper.resetDependencyResults();
162
- helper.db.saveChanges(); // this will react to EDE inserts only.
170
+ saveTestChanges(helper.txn); // this will react to EDE inserts only.
163
171
  assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
164
172
  assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
165
173
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.
166
174
  helper.updateElement(e1id, "change e1");
167
175
  helper.resetDependencyResults();
168
- helper.db.saveChanges();
176
+ saveTestChanges(helper.txn);
169
177
  assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
170
178
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id]);
171
179
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]);
@@ -175,26 +183,26 @@ describe("ElementDependencyGraph", () => {
175
183
  const helper = new TestHelper("Parents", dbInfo);
176
184
  const p2id = helper.insertElement("p2");
177
185
  const e1id = helper.insertElement("e1", { id: p2id, relClassName: "TestBim.ChildPropagatesChangesToParent" });
178
- helper.db.saveChanges(); // get the elements into the iModel
186
+ saveTestChanges(helper.txn); // get the elements into the iModel
179
187
  // The full graph:
180
188
  // .-parent-> p2
181
189
  // /
182
190
  // e1
183
191
  //
184
192
  helper.resetDependencyResults();
185
- helper.db.saveChanges();
193
+ saveTestChanges(helper.txn);
186
194
  assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
187
195
  assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
188
196
  assertRels(helper.dres.rootChanged, []); // we send out this callback even if only the relationship itself is new or changed.
189
197
  helper.updateElement(e1id, "change e1");
190
198
  helper.resetDependencyResults();
191
- helper.db.saveChanges();
199
+ saveTestChanges(helper.txn);
192
200
  assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
193
201
  assert.deepEqual(helper.dres.allInputsHandled, [p2id]);
194
202
  assertRels(helper.dres.rootChanged, []);
195
203
  helper.updateElement(p2id, "change p2");
196
204
  helper.resetDependencyResults();
197
- helper.db.saveChanges();
205
+ saveTestChanges(helper.txn);
198
206
  assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements
199
207
  assert.deepEqual(helper.dres.allInputsHandled, []);
200
208
  assertRels(helper.dres.rootChanged, []);
@@ -207,12 +215,12 @@ describe("ElementDependencyGraph", () => {
207
215
  const e1id = helper.insertElement("e1", { id: p2id, relClassName: "TestBim.ChildPropagatesChangesToParent" });
208
216
  const e2id = helper.insertElement("e2");
209
217
  const e3id = helper.insertElement("e3");
210
- helper.db.saveChanges(); // get the elements into the iModel
218
+ saveTestChanges(helper.txn); // get the elements into the iModel
211
219
  const ede_1_2 = TestElementDrivesElement.create(helper.db, e1id, e2id);
212
220
  const ede_2_3 = TestElementDrivesElement.create(helper.db, e2id, e3id);
213
221
  const ede_p2_p3 = TestElementDrivesElement.create(helper.db, p2id, p3id);
214
222
  for (const ede of [ede_1_2, ede_2_3, ede_p2_p3]) {
215
- ede.insert();
223
+ ede.id = helper.txn.insertRelationship(ede.toJSON());
216
224
  }
217
225
  // db[_nativeDb].writeFullElementDependencyGraphToFile(`${writeDbFileName}.dot`);
218
226
  // The full graph:
@@ -221,25 +229,25 @@ describe("ElementDependencyGraph", () => {
221
229
  // e1 -EDE-> e2 -EDE-> e3
222
230
  //
223
231
  helper.resetDependencyResults();
224
- helper.db.saveChanges(); // this will react to EDE inserts only.
232
+ saveTestChanges(helper.txn); // this will react to EDE inserts only.
225
233
  assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
226
234
  assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
227
235
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.
228
236
  helper.updateElement(e1id, "change e1");
229
237
  helper.resetDependencyResults();
230
- helper.db.saveChanges();
238
+ saveTestChanges(helper.txn);
231
239
  assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
232
240
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, p2id, e3id, p3id]);
233
241
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]);
234
242
  helper.updateElement(p2id, "change p2");
235
243
  helper.resetDependencyResults();
236
- helper.db.saveChanges();
244
+ saveTestChanges(helper.txn);
237
245
  assert.deepEqual(helper.dres.beforeOutputs, [p2id]); // only called on directly changed root elements.
238
246
  assert.deepEqual(helper.dres.allInputsHandled, [p3id]);
239
247
  assertRels(helper.dres.rootChanged, [ede_p2_p3.toJSON()]);
240
248
  helper.updateElement(e2id, "change e2");
241
249
  helper.resetDependencyResults();
242
- helper.db.saveChanges();
250
+ saveTestChanges(helper.txn);
243
251
  assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements.
244
252
  assert.deepEqual(helper.dres.allInputsHandled, [e3id]);
245
253
  assertRels(helper.dres.rootChanged, [ede_2_3.toJSON()]);
@@ -258,17 +266,17 @@ describe("ElementDependencyGraph", () => {
258
266
  const materialDepthRange = helper.insertElement("MaterialDepthRange", { id: borehole, relClassName: "TestBim.ChildPropagatesChangesToParent" });
259
267
  const material = helper.insertElement("Material");
260
268
  const groundGeneration = helper.insertElement("GroundGeneration");
261
- helper.db.saveChanges(); // get the elements into the iModel
269
+ saveTestChanges(helper.txn); // get the elements into the iModel
262
270
  const ede_material_materialDepthRange = TestElementDrivesElement.create(helper.db, material, materialDepthRange);
263
271
  const ede_boreholeSource_groundGeneration = TestElementDrivesElement.create(helper.db, boreholeSource, groundGeneration);
264
272
  for (const ede of [ede_material_materialDepthRange, ede_boreholeSource_groundGeneration]) {
265
- ede.insert();
273
+ ede.id = helper.txn.insertRelationship(ede.toJSON());
266
274
  }
267
275
  helper.resetDependencyResults();
268
- helper.db.saveChanges();
276
+ saveTestChanges(helper.txn);
269
277
  helper.updateElement(material, "change material");
270
278
  helper.resetDependencyResults();
271
- helper.db.saveChanges();
279
+ saveTestChanges(helper.txn);
272
280
  assert.deepEqual(helper.dres.beforeOutputs, [material]); // only called on directly changed root elements.
273
281
  assert.deepEqual(helper.dres.allInputsHandled, [materialDepthRange, borehole, boreholeSource, groundGeneration]);
274
282
  assertRels(helper.dres.rootChanged, [ede_material_materialDepthRange.toJSON(), ede_boreholeSource_groundGeneration.toJSON()]);
@@ -288,7 +296,7 @@ describe("ElementDependencyGraph", () => {
288
296
  const ede_21_3 = TestElementDrivesElement.create(helper.db, e21id, e3id);
289
297
  const ede_3_4 = TestElementDrivesElement.create(helper.db, e3id, e4id);
290
298
  for (const ede of [ede_1_2, ede_11_2, ede_2_3, ede_21_3, ede_3_4]) {
291
- ede.insert();
299
+ ede.id = helper.txn.insertRelationship(ede.toJSON());
292
300
  }
293
301
  // The full graph:
294
302
  // e21
@@ -304,7 +312,7 @@ describe("ElementDependencyGraph", () => {
304
312
  // /
305
313
  // e11
306
314
  helper.resetDependencyResults();
307
- helper.db.saveChanges();
315
+ saveTestChanges(helper.txn);
308
316
  assert.deepEqual(helper.dres.beforeOutputs, [e1id, e11id, e21id]); // only called on directly changed root elements.
309
317
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);
310
318
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_11_2.toJSON(), ede_2_3.toJSON(), ede_21_3.toJSON(), ede_3_4.toJSON()]);
@@ -316,7 +324,7 @@ describe("ElementDependencyGraph", () => {
316
324
  //
317
325
  helper.updateElement(e4id, "change e4");
318
326
  helper.resetDependencyResults();
319
- helper.db.saveChanges();
327
+ saveTestChanges(helper.txn);
320
328
  assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements.
321
329
  assert.deepEqual(helper.dres.allInputsHandled, []);
322
330
  assertRels(helper.dres.rootChanged, []);
@@ -330,7 +338,7 @@ describe("ElementDependencyGraph", () => {
330
338
  //
331
339
  helper.updateElement(e3id, "change e3");
332
340
  helper.resetDependencyResults();
333
- helper.db.saveChanges();
341
+ saveTestChanges(helper.txn);
334
342
  assert.deepEqual(helper.dres.beforeOutputs, [e3id]); // only called on directly changed root elements.
335
343
  assert.deepEqual(helper.dres.allInputsHandled, [e4id]);
336
344
  assertRels(helper.dres.rootChanged, [ede_3_4.toJSON()]);
@@ -344,7 +352,7 @@ describe("ElementDependencyGraph", () => {
344
352
  //
345
353
  helper.updateElement(e2id, "change e2");
346
354
  helper.resetDependencyResults();
347
- helper.db.saveChanges();
355
+ saveTestChanges(helper.txn);
348
356
  assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements
349
357
  assert.deepEqual(helper.dres.allInputsHandled, [e3id, e4id]);
350
358
  assertRels(helper.dres.rootChanged, [ede_2_3.toJSON(), ede_3_4.toJSON()]);
@@ -356,7 +364,7 @@ describe("ElementDependencyGraph", () => {
356
364
  //
357
365
  helper.updateElement(e1id, "change e1");
358
366
  helper.resetDependencyResults();
359
- helper.db.saveChanges();
367
+ saveTestChanges(helper.txn);
360
368
  assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements
361
369
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);
362
370
  assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);
@@ -371,7 +379,7 @@ describe("ElementDependencyGraph", () => {
371
379
  // Note that the e1 -> e2 and e21 -> e3 edges are NOT in the sub-graph. These edges should be validated, nevertheless -- TBD
372
380
  helper.updateElement(e11id, "change e11");
373
381
  helper.resetDependencyResults();
374
- helper.db.saveChanges();
382
+ saveTestChanges(helper.txn);
375
383
  // assert.deepEqual(helper.dres.directChange, []); // only called on directly changed non-root elements that have no directly changed inputs
376
384
  assert.deepEqual(helper.dres.beforeOutputs, [e11id]); // only called on directly changed root elements
377
385
  assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);
@@ -1 +1 @@
1
- {"version":3,"file":"ElementDependencyGraph.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementDependencyGraph.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,yDAAyD;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAyB,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACL,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,EAA0C,qBAAqB,GAElJ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,cAAc,EAA6B,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpJ,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,kBAAkB,EAA2B,MAAM,oBAAoB,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,UAAkB;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;IACT,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,IAAyB,EAAE,IAAiC;IAC9E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,yBAAyB;IACtB,aAAa,GAAc,EAAE,CAAC;IAC9B,gBAAgB,GAAc,EAAE,CAAC;IACjC,WAAW,GAAwB,EAAE,CAAC;IACtC,iBAAiB,GAAwB,EAAE,CAAC;CACpD;AASD,MAAM,UAAU;IACP,EAAE,CAAe;IACjB,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;IACtC,QAAQ,GAAmB,EAAE,CAAC;IAC9B,UAAU,GAAe,EAAE,CAAC;IAC5B,eAAe,GAAe,EAAE,CAAC;IACjC,iBAAiB,GAAe,EAAE,CAAC;IAE3C,YAAY,QAAgB,EAAE,MAAc;QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAElD,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,QAAQ,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAErE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,6CAA6C,CAAC,SAAS,EAAE,gCAAgC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/H,IAAI,CAAC,kCAAkC,EAAE,CAAC;IAC5C,CAAC;IAEM,SAAS;QACd,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,qCAAqC,EAAE,CAAC;IAC/C,CAAC;IAEM,WAAW,CAAC,SAAiB,EAAE,MAA4B;QAChE,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5F,OAAO;YACL,aAAa,EAAE,4BAA4B;YAC3C,KAAK,EAAE,IAAI,CAAC,eAAe;YAC3B,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE;YAC9E,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE;gBACT,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5B,MAAM,EAAE,IAAI,kBAAkB,EAAE;aACjC;YACD,IAAI,EAAE,OAAO,CAAC,cAAc;YAC5B,MAAM;SACP,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,SAAiB,EAAE,MAA4B;QAClE,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEM,aAAa,CAAC,IAAgB,EAAE,QAAgB;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEM,OAAO,CAAC,IAAgB,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,KAAwB,IAAI,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3I,sBAAsB;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAC9C,CAAC;IAEM,kCAAkC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE;YACpF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,wBAAwB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACnF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9E,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,2BAA2B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1E,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAEM,qCAAqC;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,YAAoB,CAAC;IACzB,IAAI,MAAc,CAAC;IAEnB,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnD,MAAM,cAAc,GAAmB;YACrC,MAAM,EAAE,aAAa,CAAC,OAAO;YAC7B,cAAc,EAAE,IAAI;SACrB,CAAC;QACF,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAClE,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzB,QAAQ,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,eAAe,CAAC,qBAAqB,EAAE,CAAC;QACxC,6EAA6E;QAC7E,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACxG,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,eAAe,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAChF,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAChD,cAAc,CAAC,YAAY,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACvE,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,0CAA0C;QACxF,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACpE,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACjH,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,wBAAwB,EAAE,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnK,MAAM,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;QACxF,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,mCAAmC;QAE5D,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;QAED,kBAAkB;QAClB,oBAAoB;QAEpB,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,uCAAuC;QAChE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,6EAA6E;QAC9H,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,iCAAiC;QACrF,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,oFAAoF;QAE/J,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAC9G,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,mCAAmC;QAE5D,kBAAkB;QAClB,oBAAoB;QACpB,OAAO;QACP,MAAM;QACN,EAAE;QACF,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,6EAA6E;QAC9H,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,iCAAiC;QACrF,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,oFAAoF;QAE7H,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAExC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,gDAAgD;QACjG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACnD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAExC,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAExD,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAC9G,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,mCAAmC;QAE5D,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACnG,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;QAED,iFAAiF;QAEjF,kBAAkB;QAClB,8BAA8B;QAC9B,OAAO;QACP,0BAA0B;QAC1B,EAAE;QACF,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,uCAAuC;QAChE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,6EAA6E;QAC9H,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,iCAAiC;QACrF,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,oFAAoF;QAEnL,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACzE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE9F,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAExD,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAEpD,kBAAkB;QAClB,gFAAgF;QAChF,kDAAkD;QAClD,4CAA4C;QAC5C,4CAA4C;QAC5C,qCAAqC;QAErC,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAClI,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAChJ,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAClE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,mCAAmC;QAE5D,MAAM,+BAA+B,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC3I,MAAM,mCAAmC,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACnJ,KAAK,MAAM,GAAG,IAAI,CAAC,+BAA+B,EAAE,mCAAmC,CAAC,EAAE,CAAC;YACzF,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;QAED,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAElD,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iDAAiD;QAC1G,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACjH,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,+BAA+B,CAAC,MAAM,EAAE,EAAE,mCAAmC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE9H,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAA2B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjG,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;QAED,kBAAkB;QAClB,aAAa;QACb,eAAe;QACf,2BAA2B;QAC3B,SAAS;QACT,OAAO;QAEP,qFAAqF;QACrF,mBAAmB;QACnB,aAAa;QACb,eAAe;QACf,2BAA2B;QAC3B,SAAS;QACT,OAAO;QACP,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACpH,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAElI,sEAAsE;QACtE,sBAAsB;QACtB,yBAAyB;QACzB,0BAA0B;QAC1B,EAAE;QACF,EAAE;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,iDAAiD;QAClG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACnD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAExC,sBAAsB;QACtB,sBAAsB;QACtB,EAAE;QACF,EAAE;QACF,kBAAkB;QAClB,0BAA0B;QAC1B,EAAE;QACF,EAAE;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iDAAiD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAExD,6FAA6F;QAC7F,sBAAsB;QACtB,EAAE;QACF,YAAY;QACZ,2BAA2B;QAC3B,EAAE;QACF,EAAE;QACF,EAAE;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gDAAgD;QACrG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1E,sHAAsH;QACtH,mBAAmB;QACnB,EAAE;QACF,OAAO;QACP,6BAA6B;QAC7B,EAAE;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gDAAgD;QACrG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE5F,uHAAuH;QACvH,mBAAmB;QACnB,EAAE;QACF,2BAA2B;QAC3B,SAAS;QACT,OAAO;QACP,KAAK;QACL,EAAE;QACF,4HAA4H;QAC5H,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAE1C,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAExB,4IAA4I;QAC5I,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gDAAgD;QACtG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7F,4MAA4M;QAE5M,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,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/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { assert } from \"chai\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { Guid, Id64Array, Id64String, Logger, OpenMode } from \"@itwin/core-bentley\";\nimport {\n CodeScopeSpec, CodeSpec, ColorByName, DomainOptions, GeometryStreamBuilder, IModel, RelatedElementProps, RelationshipProps, SubCategoryAppearance,\n UpgradeOptions,\n} from \"@itwin/core-common\";\nimport { LineSegment3d, Point3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { _nativeDb, ChannelControl, ElementDrivesElementProps, IModelJsFs, PhysicalModel, SpatialCategory, StandaloneDb } from \"../../core-backend\";\nimport { IModelTestUtils, TestElementDrivesElement, TestPhysicalObject, TestPhysicalObjectProps } from \"../IModelTestUtils\";\nimport { IModelNative } from \"../../internal/NativePlatform\";\n\nexport function copyFile(newName: string, pathToCopy: string): string {\n const newPath = path.join(path.dirname(pathToCopy), newName);\n try {\n fs.unlinkSync(newPath);\n } catch {\n }\n fs.copyFileSync(pathToCopy, newPath);\n return newPath;\n}\n\nfunction assertRels(list: RelationshipProps[], rels: ElementDrivesElementProps[]) {\n assert.equal(list.length, rels.length);\n for (let i = 0; i < rels.length; ++i) {\n assert.equal(list[i].id, rels[i].id);\n }\n}\n\nclass DependencyCallbackResults {\n public beforeOutputs: Id64Array = [];\n public allInputsHandled: Id64Array = [];\n public rootChanged: RelationshipProps[] = [];\n public deletedDependency: RelationshipProps[] = [];\n}\n\ninterface DbInfo {\n seedFileName: string;\n codeSpecId: Id64String;\n physicalModelId: Id64String;\n spatialCategoryId: Id64String;\n}\n\nclass TestHelper {\n public db: StandaloneDb;\n public dres = new DependencyCallbackResults();\n private removals: VoidFunction[] = [];\n private codeSpecId: Id64String = \"\";\n private physicalModelId: Id64String = \"\";\n private spatialCategoryid: Id64String = \"\";\n\n constructor(testName: string, dbInfo: DbInfo) {\n this.codeSpecId = dbInfo.codeSpecId;\n this.physicalModelId = dbInfo.physicalModelId;\n this.spatialCategoryid = dbInfo.spatialCategoryId;\n\n const writeDbFileName = copyFile(`${testName}.bim`, dbInfo.seedFileName);\n this.db = StandaloneDb.openFile(writeDbFileName, OpenMode.ReadWrite);\n assert.isTrue(this.db !== undefined);\n this.db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n this.db[_nativeDb].enableTxnTesting();\n assert.equal(this.db[_nativeDb].addChildPropagatesChangesToParentRelationship(\"TestBim\", \"ChildPropagatesChangesToParent\"), 0);\n this.setElementDependencyGraphCallbacks();\n }\n\n public terminate() {\n this.db.close();\n assert.isFalse(this.db.isOpen);\n this.removeElementDependencyGraphCallbacks();\n }\n\n public makeElement(codeValue: string, parent?: RelatedElementProps): TestPhysicalObjectProps {\n const builder = new GeometryStreamBuilder();\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(5, 0, 0)));\n\n return {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: this.physicalModelId,\n category: this.spatialCategoryid,\n code: { spec: this.codeSpecId, scope: this.physicalModelId, value: codeValue },\n intProperty: 100,\n placement: {\n origin: new Point3d(0, 0, 0),\n angles: new YawPitchRollAngles(),\n },\n geom: builder.geometryStream,\n parent,\n };\n }\n\n public insertElement(codeValue: string, parent?: RelatedElementProps): Id64String {\n return this.db.elements.insertElement(this.makeElement(codeValue, parent));\n }\n\n public updateElement(elid: Id64String, newLabel: string) {\n const ed2 = this.db.elements.getElement({ id: elid });\n ed2.userLabel = newLabel;\n this.db.elements.updateElement(ed2.toJSON());\n }\n\n public fmtElem(elId: Id64String) { return this.db.elements.getElement(elId).code.value; }\n public fmtRel(props: RelationshipProps) { return `${props.classFullName} ${this.fmtElem(props.sourceId)} --> ${this.fmtElem(props.targetId)}`; }\n\n public resetDependencyResults() {\n this.dres = new DependencyCallbackResults();\n }\n\n public setElementDependencyGraphCallbacks() {\n this.removals.push(TestElementDrivesElement.deletedDependency.addListener((evProps) => {\n Logger.logTrace(\"EDGTest\", `_onDeletedDependency ${this.fmtRel(evProps)}`);\n this.dres.deletedDependency.push(evProps);\n }));\n this.removals.push(TestElementDrivesElement.rootChanged.addListener((evProps, _im) => {\n Logger.logTrace(\"EDGTest\", `_onRootChanged ${this.fmtRel(evProps)}`);\n this.dres.rootChanged.push(evProps);\n }));\n this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((elId) => {\n Logger.logTrace(\"EDGTest\", `_onBeforeOutputsHandled ${this.fmtElem(elId)}`);\n this.dres.beforeOutputs.push(elId);\n }));\n this.removals.push(TestPhysicalObject.allInputsHandled.addListener((elId) => {\n Logger.logTrace(\"EDGTest\", `_onAllInputsHandled ${this.fmtElem(elId)}`);\n this.dres.allInputsHandled.push(elId);\n }));\n }\n\n public removeElementDependencyGraphCallbacks() {\n this.removals.forEach((drop) => drop());\n }\n}\n\ndescribe(\"ElementDependencyGraph\", () => {\n let testFileName: string;\n let dbInfo: DbInfo;\n\n const performUpgrade = (pathname: string) => {\n const nativeDb = new IModelNative.platform.DgnDb();\n const upgradeOptions: UpgradeOptions = {\n domain: DomainOptions.Upgrade,\n schemaLockHeld: true,\n };\n nativeDb.openIModel(pathname, OpenMode.ReadWrite, upgradeOptions);\n nativeDb.deleteAllTxns();\n nativeDb.closeFile();\n };\n\n before(async () => {\n IModelTestUtils.registerTestBimSchema();\n // make a unique name for the output file so this test can be run in parallel\n testFileName = IModelTestUtils.prepareOutputFile(\"ElementDependencyGraph\", `${Guid.createValue()}.bim`);\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const schemaFileName = IModelTestUtils.resolveAssetFile(\"TestBim.ecschema.xml\");\n IModelJsFs.copySync(seedFileName, testFileName);\n performUpgrade(testFileName);\n const imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n await imodel.importSchemas([schemaFileName]); // will throw an exception if import fails\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const physicalModelId = PhysicalModel.insert(imodel, IModel.rootSubjectId, \"EDGTestModel\");\n const codeSpecId = imodel.codeSpecs.insert(CodeSpec.create(imodel, \"EDGTestCodeSpec\", CodeScopeSpec.Type.Model));\n const spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, \"EDGTestSpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\n dbInfo = { physicalModelId, codeSpecId, spatialCategoryId, seedFileName: testFileName };\n imodel.saveChanges(\"\");\n imodel[_nativeDb].deleteAllTxns();\n imodel.close();\n });\n\n after(() => {\n IModelJsFs.removeSync(testFileName);\n });\n\n it(\"should invokeCallbacks EDE only\", () => {\n const helper = new TestHelper(\"EDE\", dbInfo);\n\n const e1id = helper.insertElement(\"e1\");\n const e2id = helper.insertElement(\"e2\");\n const e3id = helper.insertElement(\"e3\");\n helper.db.saveChanges(); // get the elements into the iModel\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n for (const ede of [ede_1_2, ede_2_3]) {\n ede.insert();\n }\n\n // The full graph:\n // e1 --> e2 --> e3\n\n helper.resetDependencyResults();\n helper.db.saveChanges(); // this will react to EDE inserts only.\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through parents only\", () => {\n const helper = new TestHelper(\"Parents\", dbInfo);\n\n const p2id = helper.insertElement(\"p2\");\n const e1id = helper.insertElement(\"e1\", { id: p2id, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n helper.db.saveChanges(); // get the elements into the iModel\n\n // The full graph:\n // .-parent-> p2\n // /\n // e1\n //\n helper.resetDependencyResults();\n helper.db.saveChanges();\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, []); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [p2id]);\n assertRels(helper.dres.rootChanged, []);\n\n helper.updateElement(p2id, \"change p2\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, []);\n assertRels(helper.dres.rootChanged, []);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through EDEs and parents\", () => {\n const helper = new TestHelper(\"EDEsAndParents\", dbInfo);\n\n const p2id = helper.insertElement(\"p2\");\n const p3id = helper.insertElement(\"p3\");\n const e1id = helper.insertElement(\"e1\", { id: p2id, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const e2id = helper.insertElement(\"e2\");\n const e3id = helper.insertElement(\"e3\");\n helper.db.saveChanges(); // get the elements into the iModel\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n const ede_p2_p3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, p2id, p3id);\n for (const ede of [ede_1_2, ede_2_3, ede_p2_p3]) {\n ede.insert();\n }\n\n // db[_nativeDb].writeFullElementDependencyGraphToFile(`${writeDbFileName}.dot`);\n\n // The full graph:\n // .-parent-> p2 -EDE-> p3\n // /\n // e1 -EDE-> e2 -EDE-> e3\n //\n helper.resetDependencyResults();\n helper.db.saveChanges(); // this will react to EDE inserts only.\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, p2id, e3id, p3id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]);\n\n helper.updateElement(p2id, \"change p2\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [p2id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [p3id]);\n assertRels(helper.dres.rootChanged, [ede_p2_p3.toJSON()]);\n\n helper.updateElement(e2id, \"change e2\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e3id]);\n assertRels(helper.dres.rootChanged, [ede_2_3.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through parents - geomodeler schema\", () => {\n const helper = new TestHelper(\"GeoModeler\", dbInfo);\n\n // The full graph:\n // BoreholeSource -EDE-> GroundGeneration\n // / parent\n // Borehole\n // / parent\n // Material -EDE-> MaterialDepthRange\n\n const boreholeSource = helper.insertElement(\"BoreholeSource\");\n const borehole = helper.insertElement(\"Borehole\", { id: boreholeSource, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const materialDepthRange = helper.insertElement(\"MaterialDepthRange\", { id: borehole, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const material = helper.insertElement(\"Material\");\n const groundGeneration = helper.insertElement(\"GroundGeneration\");\n helper.db.saveChanges(); // get the elements into the iModel\n\n const ede_material_materialDepthRange = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, material, materialDepthRange);\n const ede_boreholeSource_groundGeneration = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, boreholeSource, groundGeneration);\n for (const ede of [ede_material_materialDepthRange, ede_boreholeSource_groundGeneration]) {\n ede.insert();\n }\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n helper.updateElement(material, \"change material\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [material]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [materialDepthRange, borehole, boreholeSource, groundGeneration]);\n assertRels(helper.dres.rootChanged, [ede_material_materialDepthRange.toJSON(), ede_boreholeSource_groundGeneration.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks many:1\", () => {\n const helper = new TestHelper(\"ManyToOne\", dbInfo);\n\n const e1id = helper.insertElement(\"e1\");\n const e11id = helper.insertElement(\"e11\");\n const e2id = helper.insertElement(\"e2\");\n const e21id = helper.insertElement(\"e21\");\n const e3id = helper.insertElement(\"e3\");\n const e4id = helper.insertElement(\"e4\");\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_11_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e11id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n const ede_21_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e21id, e3id);\n const ede_3_4 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e3id, e4id);\n for (const ede of [ede_1_2, ede_11_2, ede_2_3, ede_21_3, ede_3_4]) {\n ede.insert();\n }\n\n // The full graph:\n // e21\n // \\\n // e1 --> e2 --> e3 --> e4\n // /\n // e11\n\n // On the very first validation, everything is new and is considered directly changed\n // resulting graph:\n // e21\n // \\\n // e1 --> e2 --> e3 --> e4\n // /\n // e11\n helper.resetDependencyResults();\n helper.db.saveChanges();\n assert.deepEqual(helper.dres.beforeOutputs, [e1id, e11id, e21id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_11_2.toJSON(), ede_2_3.toJSON(), ede_21_3.toJSON(), ede_3_4.toJSON()]);\n\n // modify e4 directly. That is a leaf. None of its inputs are changed.\n // resulting subgraph:\n // *\n // e4\n //\n //\n helper.updateElement(e4id, \"change e4\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, []);\n assertRels(helper.dres.rootChanged, []);\n\n // modify e3 directly.\n // resulting subgraph:\n //\n //\n // *\n // e3 --> e4\n //\n //\n helper.updateElement(e3id, \"change e3\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e3id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e4id]);\n assertRels(helper.dres.rootChanged, [ede_3_4.toJSON()]);\n\n // modify e2 directly. That is a node in middle of the graph. None of its inputs is modified.\n // resulting subgraph:\n //\n // *\n // e2 --> e3 --> e4\n //\n //\n //\n helper.updateElement(e2id, \"change e2\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_2_3.toJSON(), ede_3_4.toJSON()]);\n\n // Modify e1 directly. That should propagate to the rest of the nodes. Each should get an _onAllInputsHandled callback\n // resulting graph:\n //\n // *\n // e1 --> e2 --> e3 --> e4\n //\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);\n\n // Modify e11 directly. That should propagate to the rest of the nodes. Each should get an _onAllInputsHandled callback\n // resulting graph:\n //\n // > e2 --> e3 --> e4\n // /\n // e11\n // *\n //\n // Note that the e1 -> e2 and e21 -> e3 edges are NOT in the sub-graph. These edges should be validated, nevertheless -- TBD\n helper.updateElement(e11id, \"change e11\");\n\n helper.resetDependencyResults();\n helper.db.saveChanges();\n\n // assert.deepEqual(helper.dres.directChange, []); // only called on directly changed non-root elements that have no directly changed inputs\n assert.deepEqual(helper.dres.beforeOutputs, [e11id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_11_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);\n // assertRels(helper.dres.validateOutput, [ede_1_2, ede_21_3]); // this callback is made only on rels that not in the graph but share an output with another rel or have an output that was directly changed\n\n helper.terminate();\n });\n\n});\n"]}
1
+ {"version":3,"file":"ElementDependencyGraph.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementDependencyGraph.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/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { assert } from \"chai\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { Guid, Id64Array, Id64String, Logger, OpenMode } from \"@itwin/core-bentley\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport {\n CodeScopeSpec, CodeSpec, ColorByName, DomainOptions, GeometryStreamBuilder, IModel, RelatedElementProps, RelationshipProps, SubCategoryAppearance,\n UpgradeOptions,\n} from \"@itwin/core-common\";\nimport { LineSegment3d, Point3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { _nativeDb, ChannelControl, ElementDrivesElementProps, IModelJsFs, PhysicalModel, SpatialCategory, StandaloneDb } from \"../../core-backend\";\nimport { IModelTestUtils, TestElementDrivesElement, TestPhysicalObject, TestPhysicalObjectProps } from \"../IModelTestUtils\";\nimport { IModelNative } from \"../../internal/NativePlatform\";\n\nfunction saveTestChanges(txn: EditTxn, args?: string): void {\n txn.saveChanges(args);\n}\n\nexport function copyFile(newName: string, pathToCopy: string): string {\n const newPath = path.join(path.dirname(pathToCopy), newName);\n try {\n fs.unlinkSync(newPath);\n } catch {\n }\n fs.copyFileSync(pathToCopy, newPath);\n return newPath;\n}\n\nfunction assertRels(list: RelationshipProps[], rels: ElementDrivesElementProps[]) {\n assert.equal(list.length, rels.length);\n for (let i = 0; i < rels.length; ++i) {\n assert.equal(list[i].id, rels[i].id);\n }\n}\n\nclass DependencyCallbackResults {\n public beforeOutputs: Id64Array = [];\n public allInputsHandled: Id64Array = [];\n public rootChanged: RelationshipProps[] = [];\n public deletedDependency: RelationshipProps[] = [];\n}\n\ninterface DbInfo {\n seedFileName: string;\n codeSpecId: Id64String;\n physicalModelId: Id64String;\n spatialCategoryId: Id64String;\n}\n\nclass TestHelper {\n public db: StandaloneDb;\n public readonly txn: EditTxn;\n public dres = new DependencyCallbackResults();\n private removals: VoidFunction[] = [];\n private codeSpecId: Id64String = \"\";\n private physicalModelId: Id64String = \"\";\n private spatialCategoryid: Id64String = \"\";\n\n constructor(testName: string, dbInfo: DbInfo) {\n this.codeSpecId = dbInfo.codeSpecId;\n this.physicalModelId = dbInfo.physicalModelId;\n this.spatialCategoryid = dbInfo.spatialCategoryId;\n\n const writeDbFileName = copyFile(`${testName}.bim`, dbInfo.seedFileName);\n this.db = StandaloneDb.openFile(writeDbFileName, OpenMode.ReadWrite);\n assert.isTrue(this.db !== undefined);\n this.db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n this.txn = new EditTxn(this.db, `${testName} element dependency graph`);\n this.txn.start();\n\n this.db[_nativeDb].enableTxnTesting();\n assert.equal(this.db[_nativeDb].addChildPropagatesChangesToParentRelationship(\"TestBim\", \"ChildPropagatesChangesToParent\"), 0);\n this.setElementDependencyGraphCallbacks();\n }\n\n public terminate() {\n if (this.txn.isActive)\n this.txn.end(\"abandon\");\n\n this.db.close();\n assert.isFalse(this.db.isOpen);\n this.removeElementDependencyGraphCallbacks();\n }\n\n public makeElement(codeValue: string, parent?: RelatedElementProps): TestPhysicalObjectProps {\n const builder = new GeometryStreamBuilder();\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(5, 0, 0)));\n\n return {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: this.physicalModelId,\n category: this.spatialCategoryid,\n code: { spec: this.codeSpecId, scope: this.physicalModelId, value: codeValue },\n intProperty: 100,\n placement: {\n origin: new Point3d(0, 0, 0),\n angles: new YawPitchRollAngles(),\n },\n geom: builder.geometryStream,\n parent,\n };\n }\n\n public insertElement(codeValue: string, parent?: RelatedElementProps): Id64String {\n return this.txn.insertElement(this.makeElement(codeValue, parent));\n }\n\n public updateElement(elid: Id64String, newLabel: string) {\n const ed2 = this.db.elements.getElement({ id: elid });\n ed2.userLabel = newLabel;\n this.txn.updateElement(ed2.toJSON());\n }\n\n public fmtElem(elId: Id64String) { return this.db.elements.getElement(elId).code.value; }\n public fmtRel(props: RelationshipProps) { return `${props.classFullName} ${this.fmtElem(props.sourceId)} --> ${this.fmtElem(props.targetId)}`; }\n\n public resetDependencyResults() {\n this.dres = new DependencyCallbackResults();\n }\n\n public setElementDependencyGraphCallbacks() {\n this.removals.push(TestElementDrivesElement.deletedDependency.addListener((arg) => {\n Logger.logTrace(\"EDGTest\", `_onDeletedDependency ${this.fmtRel(arg.props)}`);\n this.dres.deletedDependency.push(arg.props);\n }));\n this.removals.push(TestElementDrivesElement.rootChanged.addListener((arg) => {\n Logger.logTrace(\"EDGTest\", `_onRootChanged ${this.fmtRel(arg.props)}`);\n this.dres.rootChanged.push(arg.props);\n }));\n this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((arg) => {\n Logger.logTrace(\"EDGTest\", `_onBeforeOutputsHandled ${this.fmtElem(arg.elId)}`);\n this.dres.beforeOutputs.push(arg.elId);\n }));\n this.removals.push(TestPhysicalObject.allInputsHandled.addListener((arg) => {\n Logger.logTrace(\"EDGTest\", `_onAllInputsHandled ${this.fmtElem(arg.elId)}`);\n this.dres.allInputsHandled.push(arg.elId);\n }));\n }\n\n public removeElementDependencyGraphCallbacks() {\n this.removals.forEach((drop) => drop());\n }\n}\n\ndescribe(\"ElementDependencyGraph\", () => {\n let testFileName: string;\n let dbInfo: DbInfo;\n\n const performUpgrade = (pathname: string) => {\n const nativeDb = new IModelNative.platform.DgnDb();\n const upgradeOptions: UpgradeOptions = {\n domain: DomainOptions.Upgrade,\n schemaLockHeld: true,\n };\n nativeDb.openIModel(pathname, OpenMode.ReadWrite, upgradeOptions);\n nativeDb.deleteAllTxns();\n nativeDb.closeFile();\n };\n\n before(async () => {\n IModelTestUtils.registerTestBimSchema();\n // make a unique name for the output file so this test can be run in parallel\n testFileName = IModelTestUtils.prepareOutputFile(\"ElementDependencyGraph\", `${Guid.createValue()}.bim`);\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const schemaFileName = IModelTestUtils.resolveAssetFile(\"TestBim.ecschema.xml\");\n IModelJsFs.copySync(seedFileName, testFileName);\n performUpgrade(testFileName);\n const imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n await imodel.importSchemas([schemaFileName]); // will throw an exception if import fails\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const physicalModelId = withEditTxn(imodel, (txn) => PhysicalModel.insert(txn, IModel.rootSubjectId, \"EDGTestModel\"));\n const codeSpecId = withEditTxn(imodel, (txn) => imodel.codeSpecs.insert(txn, CodeSpec.create(imodel, \"EDGTestCodeSpec\", CodeScopeSpec.Type.Model)));\n const spatialCategoryId = withEditTxn(imodel, (txn) => SpatialCategory.insert(txn, IModel.dictionaryId, \"EDGTestSpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed })));\n dbInfo = { physicalModelId, codeSpecId, spatialCategoryId, seedFileName: testFileName };\n imodel[_nativeDb].deleteAllTxns();\n imodel.close();\n });\n\n after(() => {\n IModelJsFs.removeSync(testFileName);\n });\n\n it(\"should invokeCallbacks EDE only\", () => {\n const helper = new TestHelper(\"EDE\", dbInfo);\n\n const e1id = helper.insertElement(\"e1\");\n const e2id = helper.insertElement(\"e2\");\n const e3id = helper.insertElement(\"e3\");\n saveTestChanges(helper.txn); // get the elements into the iModel\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n for (const ede of [ede_1_2, ede_2_3]) {\n ede.id = helper.txn.insertRelationship(ede.toJSON());\n }\n\n // The full graph:\n // e1 --> e2 --> e3\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn); // this will react to EDE inserts only.\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through parents only\", () => {\n const helper = new TestHelper(\"Parents\", dbInfo);\n\n const p2id = helper.insertElement(\"p2\");\n const e1id = helper.insertElement(\"e1\", { id: p2id, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n saveTestChanges(helper.txn); // get the elements into the iModel\n\n // The full graph:\n // .-parent-> p2\n // /\n // e1\n //\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, []); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [p2id]);\n assertRels(helper.dres.rootChanged, []);\n\n helper.updateElement(p2id, \"change p2\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, []);\n assertRels(helper.dres.rootChanged, []);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through EDEs and parents\", () => {\n const helper = new TestHelper(\"EDEsAndParents\", dbInfo);\n\n const p2id = helper.insertElement(\"p2\");\n const p3id = helper.insertElement(\"p3\");\n const e1id = helper.insertElement(\"e1\", { id: p2id, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const e2id = helper.insertElement(\"e2\");\n const e3id = helper.insertElement(\"e3\");\n saveTestChanges(helper.txn); // get the elements into the iModel\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n const ede_p2_p3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, p2id, p3id);\n for (const ede of [ede_1_2, ede_2_3, ede_p2_p3]) {\n ede.id = helper.txn.insertRelationship(ede.toJSON());\n }\n\n // db[_nativeDb].writeFullElementDependencyGraphToFile(`${writeDbFileName}.dot`);\n\n // The full graph:\n // .-parent-> p2 -EDE-> p3\n // /\n // e1 -EDE-> e2 -EDE-> e3\n //\n helper.resetDependencyResults();\n saveTestChanges(helper.txn); // this will react to EDE inserts only.\n assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.\n assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.\n\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, p2id, e3id, p3id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]);\n\n helper.updateElement(p2id, \"change p2\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [p2id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [p3id]);\n assertRels(helper.dres.rootChanged, [ede_p2_p3.toJSON()]);\n\n helper.updateElement(e2id, \"change e2\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e3id]);\n assertRels(helper.dres.rootChanged, [ede_2_3.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks through parents - geomodeler schema\", () => {\n const helper = new TestHelper(\"GeoModeler\", dbInfo);\n\n // The full graph:\n // BoreholeSource -EDE-> GroundGeneration\n // / parent\n // Borehole\n // / parent\n // Material -EDE-> MaterialDepthRange\n\n const boreholeSource = helper.insertElement(\"BoreholeSource\");\n const borehole = helper.insertElement(\"Borehole\", { id: boreholeSource, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const materialDepthRange = helper.insertElement(\"MaterialDepthRange\", { id: borehole, relClassName: \"TestBim.ChildPropagatesChangesToParent\" });\n const material = helper.insertElement(\"Material\");\n const groundGeneration = helper.insertElement(\"GroundGeneration\");\n saveTestChanges(helper.txn); // get the elements into the iModel\n\n const ede_material_materialDepthRange = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, material, materialDepthRange);\n const ede_boreholeSource_groundGeneration = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, boreholeSource, groundGeneration);\n for (const ede of [ede_material_materialDepthRange, ede_boreholeSource_groundGeneration]) {\n ede.id = helper.txn.insertRelationship(ede.toJSON());\n }\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n helper.updateElement(material, \"change material\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [material]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [materialDepthRange, borehole, boreholeSource, groundGeneration]);\n assertRels(helper.dres.rootChanged, [ede_material_materialDepthRange.toJSON(), ede_boreholeSource_groundGeneration.toJSON()]);\n\n helper.terminate();\n });\n\n it(\"should invokeCallbacks many:1\", () => {\n const helper = new TestHelper(\"ManyToOne\", dbInfo);\n\n const e1id = helper.insertElement(\"e1\");\n const e11id = helper.insertElement(\"e11\");\n const e2id = helper.insertElement(\"e2\");\n const e21id = helper.insertElement(\"e21\");\n const e3id = helper.insertElement(\"e3\");\n const e4id = helper.insertElement(\"e4\");\n\n const ede_1_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e1id, e2id);\n const ede_11_2 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e11id, e2id);\n const ede_2_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e2id, e3id);\n const ede_21_3 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e21id, e3id);\n const ede_3_4 = TestElementDrivesElement.create<TestElementDrivesElement>(helper.db, e3id, e4id);\n for (const ede of [ede_1_2, ede_11_2, ede_2_3, ede_21_3, ede_3_4]) {\n ede.id = helper.txn.insertRelationship(ede.toJSON());\n }\n\n // The full graph:\n // e21\n // \\\n // e1 --> e2 --> e3 --> e4\n // /\n // e11\n\n // On the very first validation, everything is new and is considered directly changed\n // resulting graph:\n // e21\n // \\\n // e1 --> e2 --> e3 --> e4\n // /\n // e11\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n assert.deepEqual(helper.dres.beforeOutputs, [e1id, e11id, e21id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_11_2.toJSON(), ede_2_3.toJSON(), ede_21_3.toJSON(), ede_3_4.toJSON()]);\n\n // modify e4 directly. That is a leaf. None of its inputs are changed.\n // resulting subgraph:\n // *\n // e4\n //\n //\n helper.updateElement(e4id, \"change e4\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, []);\n assertRels(helper.dres.rootChanged, []);\n\n // modify e3 directly.\n // resulting subgraph:\n //\n //\n // *\n // e3 --> e4\n //\n //\n helper.updateElement(e3id, \"change e3\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [e3id]); // only called on directly changed root elements.\n assert.deepEqual(helper.dres.allInputsHandled, [e4id]);\n assertRels(helper.dres.rootChanged, [ede_3_4.toJSON()]);\n\n // modify e2 directly. That is a node in middle of the graph. None of its inputs is modified.\n // resulting subgraph:\n //\n // *\n // e2 --> e3 --> e4\n //\n //\n //\n helper.updateElement(e2id, \"change e2\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_2_3.toJSON(), ede_3_4.toJSON()]);\n\n // Modify e1 directly. That should propagate to the rest of the nodes. Each should get an _onAllInputsHandled callback\n // resulting graph:\n //\n // *\n // e1 --> e2 --> e3 --> e4\n //\n helper.updateElement(e1id, \"change e1\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);\n\n // Modify e11 directly. That should propagate to the rest of the nodes. Each should get an _onAllInputsHandled callback\n // resulting graph:\n //\n // > e2 --> e3 --> e4\n // /\n // e11\n // *\n //\n // Note that the e1 -> e2 and e21 -> e3 edges are NOT in the sub-graph. These edges should be validated, nevertheless -- TBD\n helper.updateElement(e11id, \"change e11\");\n\n helper.resetDependencyResults();\n saveTestChanges(helper.txn);\n\n // assert.deepEqual(helper.dres.directChange, []); // only called on directly changed non-root elements that have no directly changed inputs\n assert.deepEqual(helper.dres.beforeOutputs, [e11id]); // only called on directly changed root elements\n assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);\n assertRels(helper.dres.rootChanged, [ede_11_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);\n // assertRels(helper.dres.validateOutput, [ede_1_2, ede_21_3]); // this callback is made only on rels that not in the graph but share an output with another rel or have an output that was directly changed\n\n helper.terminate();\n });\n\n});\n\n"]}