@itwin/core-backend 5.9.0-dev.4 → 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
@@ -3,6 +3,7 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { assert } from "chai";
6
+ import { withEditTxn } from "../../EditTxn";
6
7
  import { Code, IModel, } from "@itwin/core-common";
7
8
  import { ExternalSource, ExternalSourceAttachment, ExternalSourceAttachmentAttachesSource, ExternalSourceGroup, ExternalSourceGroupGroupsSources, ExternalSourceIsInRepository, ExternalSourceOwnsAttachments, FolderContainsRepositories, FolderLink, LinkElement, RepositoryLink, SnapshotDb, SynchronizationConfigLink, SynchronizationConfigProcessesSources, SynchronizationConfigSpecifiesRootSources, } from "../../core-backend";
8
9
  import { IModelTestUtils } from "../IModelTestUtils";
@@ -15,60 +16,61 @@ describe("ExternalSource", () => {
15
16
  assert.isTrue(iModelDb.containsClass(ExternalSourceIsInRepository.classFullName));
16
17
  assert.isTrue(iModelDb.containsClass(ExternalSourceAttachment.classFullName));
17
18
  assert.isTrue(iModelDb.containsClass(ExternalSourceGroup.classFullName));
18
- const syncJob = insertSynchronizationConfigLink(iModelDb, "Synchronization Job");
19
- const folder = insertFolderLink(iModelDb, "Folder", "https://test.bentley.com/folder");
20
- const repositoryM = insertRepositoryLink(iModelDb, folder, "master.dgn", "https://test.bentley.com/folder/master.dgn", "DGN");
21
- const repositoryA = insertRepositoryLink(iModelDb, folder, "a.dgn", "https://test.bentley.com/folder/a.dgn", "DGN");
22
- const repositoryB = insertRepositoryLink(iModelDb, folder, "b.dgn", "https://test.bentley.com/folder/b.dgn", "DGN");
23
- const repositoryC = insertRepositoryLink(iModelDb, folder, "c.dgn", "https://test.bentley.com/folder/c.dgn", "DGN");
24
- const modelM = insertExternalSource(iModelDb, repositoryM, "M");
25
- const modelA = insertExternalSource(iModelDb, repositoryA, "A");
26
- const modelB = insertExternalSource(iModelDb, repositoryB, "B");
27
- const modelC = insertExternalSource(iModelDb, repositoryC, "C");
28
- iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigSpecifiesRootSources.classFullName, sourceId: syncJob, targetId: modelM });
29
- iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelA });
30
- iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelB });
31
- iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelC });
32
- const group1 = insertExternalSourceGroup(iModelDb, "Group1");
33
- iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelA });
34
- iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelB });
35
- iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelC });
36
- const _attachmentMA = insertExternalSourceAttachment(iModelDb, modelM, modelA, "A");
37
- const _attachmentMB = insertExternalSourceAttachment(iModelDb, modelM, modelB, "B");
38
- const _attachmentAC = insertExternalSourceAttachment(iModelDb, modelA, modelC, "C");
39
- const _attachmentBC = insertExternalSourceAttachment(iModelDb, modelB, modelC, "C");
40
- iModelDb.saveChanges();
19
+ withEditTxn(iModelDb, (txn) => {
20
+ const syncJob = insertSynchronizationConfigLink(txn, "Synchronization Job");
21
+ const folder = insertFolderLink(txn, "Folder", "https://test.bentley.com/folder");
22
+ const repositoryM = insertRepositoryLink(txn, folder, "master.dgn", "https://test.bentley.com/folder/master.dgn", "DGN");
23
+ const repositoryA = insertRepositoryLink(txn, folder, "a.dgn", "https://test.bentley.com/folder/a.dgn", "DGN");
24
+ const repositoryB = insertRepositoryLink(txn, folder, "b.dgn", "https://test.bentley.com/folder/b.dgn", "DGN");
25
+ const repositoryC = insertRepositoryLink(txn, folder, "c.dgn", "https://test.bentley.com/folder/c.dgn", "DGN");
26
+ const modelM = insertExternalSource(txn, repositoryM, "M");
27
+ const modelA = insertExternalSource(txn, repositoryA, "A");
28
+ const modelB = insertExternalSource(txn, repositoryB, "B");
29
+ const modelC = insertExternalSource(txn, repositoryC, "C");
30
+ txn.insertRelationship({ classFullName: SynchronizationConfigSpecifiesRootSources.classFullName, sourceId: syncJob, targetId: modelM });
31
+ txn.insertRelationship({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelA });
32
+ txn.insertRelationship({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelB });
33
+ txn.insertRelationship({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelC });
34
+ const group1 = insertExternalSourceGroup(txn, "Group1");
35
+ txn.insertRelationship({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelA });
36
+ txn.insertRelationship({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelB });
37
+ txn.insertRelationship({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelC });
38
+ insertExternalSourceAttachment(txn, modelM, modelA, "A");
39
+ insertExternalSourceAttachment(txn, modelM, modelB, "B");
40
+ insertExternalSourceAttachment(txn, modelA, modelC, "C");
41
+ insertExternalSourceAttachment(txn, modelB, modelC, "C");
42
+ });
41
43
  iModelDb.close();
42
44
  });
43
- function insertSynchronizationConfigLink(iModelDb, name) {
45
+ function insertSynchronizationConfigLink(txn, name) {
44
46
  const configProps = {
45
47
  classFullName: SynchronizationConfigLink.classFullName,
46
48
  model: IModel.repositoryModelId,
47
- code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, name),
49
+ code: LinkElement.createCode(txn.iModel, IModel.repositoryModelId, name),
48
50
  };
49
- return iModelDb.elements.insertElement(configProps);
51
+ return txn.insertElement(configProps);
50
52
  }
51
- function insertFolderLink(iModelDb, codeValue, url) {
53
+ function insertFolderLink(txn, codeValue, url) {
52
54
  const folderLinkProps = {
53
55
  classFullName: FolderLink.classFullName,
54
56
  model: IModel.repositoryModelId,
55
- code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),
57
+ code: LinkElement.createCode(txn.iModel, IModel.repositoryModelId, codeValue),
56
58
  url,
57
59
  };
58
- return iModelDb.elements.insertElement(folderLinkProps);
60
+ return txn.insertElement(folderLinkProps);
59
61
  }
60
- function insertRepositoryLink(iModelDb, folderId, codeValue, url, format) {
62
+ function insertRepositoryLink(txn, folderId, codeValue, url, format) {
61
63
  const repositoryLinkProps = {
62
64
  classFullName: RepositoryLink.classFullName,
63
65
  model: IModel.repositoryModelId,
64
66
  parent: new FolderContainsRepositories(folderId),
65
- code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),
67
+ code: LinkElement.createCode(txn.iModel, IModel.repositoryModelId, codeValue),
66
68
  url,
67
69
  format,
68
70
  };
69
- return iModelDb.elements.insertElement(repositoryLinkProps);
71
+ return txn.insertElement(repositoryLinkProps);
70
72
  }
71
- function insertExternalSource(iModelDb, repository, userLabel) {
73
+ function insertExternalSource(txn, repository, userLabel) {
72
74
  const externalSourceProps = {
73
75
  classFullName: ExternalSource.classFullName,
74
76
  model: IModel.repositoryModelId,
@@ -78,9 +80,9 @@ describe("ExternalSource", () => {
78
80
  connectorName: "Connector",
79
81
  connectorVersion: "0.0.1",
80
82
  };
81
- return iModelDb.elements.insertElement(externalSourceProps);
83
+ return txn.insertElement(externalSourceProps);
82
84
  }
83
- function insertExternalSourceAttachment(iModelDb, masterModel, attachedModel, label) {
85
+ function insertExternalSourceAttachment(txn, masterModel, attachedModel, label) {
84
86
  const attachmentProps = {
85
87
  classFullName: ExternalSource.classFullName,
86
88
  model: IModel.repositoryModelId,
@@ -89,9 +91,9 @@ describe("ExternalSource", () => {
89
91
  userLabel: label,
90
92
  attaches: new ExternalSourceAttachmentAttachesSource(attachedModel),
91
93
  };
92
- return iModelDb.elements.insertElement(attachmentProps);
94
+ return txn.insertElement(attachmentProps);
93
95
  }
94
- function insertExternalSourceGroup(iModelDb, userLabel) {
96
+ function insertExternalSourceGroup(txn, userLabel) {
95
97
  const groupProps = {
96
98
  classFullName: ExternalSourceGroup.classFullName,
97
99
  model: IModel.repositoryModelId,
@@ -101,7 +103,7 @@ describe("ExternalSource", () => {
101
103
  connectorName: "Connector",
102
104
  connectorVersion: "0.0.1",
103
105
  };
104
- return iModelDb.elements.insertElement(groupProps);
106
+ return txn.insertElement(groupProps);
105
107
  }
106
108
  });
107
109
  //# sourceMappingURL=ExternalSource.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalSource.test.js","sourceRoot":"","sources":["../../../../src/test/element/ExternalSource.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport {\n Code, ExternalSourceAttachmentProps, ExternalSourceProps, IModel, RepositoryLinkProps, SynchronizationConfigLinkProps,\n} from \"@itwin/core-common\";\nimport {\n ExternalSource, ExternalSourceAttachment, ExternalSourceAttachmentAttachesSource, ExternalSourceGroup, ExternalSourceGroupGroupsSources,\n ExternalSourceIsInRepository, ExternalSourceOwnsAttachments, FolderContainsRepositories, FolderLink, IModelDb, LinkElement, RepositoryLink,\n SnapshotDb, SynchronizationConfigLink, SynchronizationConfigProcessesSources, SynchronizationConfigSpecifiesRootSources,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"ExternalSource\", () => {\n\n it(\"should create elements and relationships like an iModel Connector would\", () => {\n const iModelFileName = IModelTestUtils.prepareOutputFile(\"ExternalSource\", \"ExternalSource.bim\");\n const iModelDb = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"ExternalSource Test\" } });\n\n assert.isTrue(iModelDb.containsClass(SynchronizationConfigLink.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSource.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceIsInRepository.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceAttachment.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceGroup.classFullName));\n\n const syncJob = insertSynchronizationConfigLink(iModelDb, \"Synchronization Job\");\n\n const folder = insertFolderLink(iModelDb, \"Folder\", \"https://test.bentley.com/folder\");\n\n const repositoryM = insertRepositoryLink(iModelDb, folder, \"master.dgn\", \"https://test.bentley.com/folder/master.dgn\", \"DGN\");\n const repositoryA = insertRepositoryLink(iModelDb, folder, \"a.dgn\", \"https://test.bentley.com/folder/a.dgn\", \"DGN\");\n const repositoryB = insertRepositoryLink(iModelDb, folder, \"b.dgn\", \"https://test.bentley.com/folder/b.dgn\", \"DGN\");\n const repositoryC = insertRepositoryLink(iModelDb, folder, \"c.dgn\", \"https://test.bentley.com/folder/c.dgn\", \"DGN\");\n\n const modelM = insertExternalSource(iModelDb, repositoryM, \"M\");\n const modelA = insertExternalSource(iModelDb, repositoryA, \"A\");\n const modelB = insertExternalSource(iModelDb, repositoryB, \"B\");\n const modelC = insertExternalSource(iModelDb, repositoryC, \"C\");\n\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigSpecifiesRootSources.classFullName, sourceId: syncJob, targetId: modelM });\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelA });\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelB });\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelC });\n\n const group1 = insertExternalSourceGroup(iModelDb, \"Group1\");\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelA });\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelB });\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelC });\n\n const _attachmentMA = insertExternalSourceAttachment(iModelDb, modelM, modelA, \"A\");\n const _attachmentMB = insertExternalSourceAttachment(iModelDb, modelM, modelB, \"B\");\n const _attachmentAC = insertExternalSourceAttachment(iModelDb, modelA, modelC, \"C\");\n const _attachmentBC = insertExternalSourceAttachment(iModelDb, modelB, modelC, \"C\");\n\n iModelDb.saveChanges();\n iModelDb.close();\n });\n\n function insertSynchronizationConfigLink(iModelDb: IModelDb, name: string): Id64String {\n const configProps: SynchronizationConfigLinkProps = {\n classFullName: SynchronizationConfigLink.classFullName,\n model: IModel.repositoryModelId,\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, name),\n };\n return iModelDb.elements.insertElement(configProps);\n }\n\n function insertFolderLink(iModelDb: IModelDb, codeValue: string, url: string): Id64String {\n const folderLinkProps: RepositoryLinkProps = {\n classFullName: FolderLink.classFullName,\n model: IModel.repositoryModelId,\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),\n url,\n };\n return iModelDb.elements.insertElement(folderLinkProps);\n }\n\n function insertRepositoryLink(iModelDb: IModelDb, folderId: Id64String, codeValue: string, url: string, format: string): Id64String {\n const repositoryLinkProps: RepositoryLinkProps = {\n classFullName: RepositoryLink.classFullName,\n model: IModel.repositoryModelId,\n parent: new FolderContainsRepositories(folderId),\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),\n url,\n format,\n };\n return iModelDb.elements.insertElement(repositoryLinkProps);\n }\n\n function insertExternalSource(iModelDb: IModelDb, repository: Id64String, userLabel: string): Id64String {\n const externalSourceProps: ExternalSourceProps = {\n classFullName: ExternalSource.classFullName,\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n userLabel,\n repository: new ExternalSourceIsInRepository(repository),\n connectorName: \"Connector\",\n connectorVersion: \"0.0.1\",\n };\n return iModelDb.elements.insertElement(externalSourceProps);\n }\n\n function insertExternalSourceAttachment(iModelDb: IModelDb, masterModel: Id64String, attachedModel: Id64String, label: string): Id64String {\n const attachmentProps: ExternalSourceAttachmentProps = {\n classFullName: ExternalSource.classFullName,\n model: IModel.repositoryModelId,\n parent: new ExternalSourceOwnsAttachments(masterModel),\n code: Code.createEmpty(),\n userLabel: label,\n attaches: new ExternalSourceAttachmentAttachesSource(attachedModel),\n };\n return iModelDb.elements.insertElement(attachmentProps);\n }\n\n function insertExternalSourceGroup(iModelDb: IModelDb, userLabel: string): Id64String {\n const groupProps: ExternalSourceProps = {\n classFullName: ExternalSourceGroup.classFullName,\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n userLabel,\n repository: undefined,\n connectorName: \"Connector\",\n connectorVersion: \"0.0.1\",\n };\n return iModelDb.elements.insertElement(groupProps);\n }\n});\n"]}
1
+ {"version":3,"file":"ExternalSource.test.js","sourceRoot":"","sources":["../../../../src/test/element/ExternalSource.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport {\n Code, ExternalSourceAttachmentProps, ExternalSourceProps, IModel, RepositoryLinkProps, SynchronizationConfigLinkProps,\n} from \"@itwin/core-common\";\nimport {\n ExternalSource, ExternalSourceAttachment, ExternalSourceAttachmentAttachesSource, ExternalSourceGroup, ExternalSourceGroupGroupsSources,\n ExternalSourceIsInRepository, ExternalSourceOwnsAttachments, FolderContainsRepositories, FolderLink, LinkElement, RepositoryLink,\n SnapshotDb, SynchronizationConfigLink, SynchronizationConfigProcessesSources, SynchronizationConfigSpecifiesRootSources,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"ExternalSource\", () => {\n\n it(\"should create elements and relationships like an iModel Connector would\", () => {\n const iModelFileName = IModelTestUtils.prepareOutputFile(\"ExternalSource\", \"ExternalSource.bim\");\n const iModelDb = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"ExternalSource Test\" } });\n\n assert.isTrue(iModelDb.containsClass(SynchronizationConfigLink.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSource.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceIsInRepository.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceAttachment.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceGroup.classFullName));\n\n withEditTxn(iModelDb, (txn) => {\n const syncJob = insertSynchronizationConfigLink(txn, \"Synchronization Job\");\n\n const folder = insertFolderLink(txn, \"Folder\", \"https://test.bentley.com/folder\");\n\n const repositoryM = insertRepositoryLink(txn, folder, \"master.dgn\", \"https://test.bentley.com/folder/master.dgn\", \"DGN\");\n const repositoryA = insertRepositoryLink(txn, folder, \"a.dgn\", \"https://test.bentley.com/folder/a.dgn\", \"DGN\");\n const repositoryB = insertRepositoryLink(txn, folder, \"b.dgn\", \"https://test.bentley.com/folder/b.dgn\", \"DGN\");\n const repositoryC = insertRepositoryLink(txn, folder, \"c.dgn\", \"https://test.bentley.com/folder/c.dgn\", \"DGN\");\n\n const modelM = insertExternalSource(txn, repositoryM, \"M\");\n const modelA = insertExternalSource(txn, repositoryA, \"A\");\n const modelB = insertExternalSource(txn, repositoryB, \"B\");\n const modelC = insertExternalSource(txn, repositoryC, \"C\");\n\n txn.insertRelationship({ classFullName: SynchronizationConfigSpecifiesRootSources.classFullName, sourceId: syncJob, targetId: modelM });\n txn.insertRelationship({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelA });\n txn.insertRelationship({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelB });\n txn.insertRelationship({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelC });\n\n const group1 = insertExternalSourceGroup(txn, \"Group1\");\n txn.insertRelationship({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelA });\n txn.insertRelationship({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelB });\n txn.insertRelationship({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelC });\n\n insertExternalSourceAttachment(txn, modelM, modelA, \"A\");\n insertExternalSourceAttachment(txn, modelM, modelB, \"B\");\n insertExternalSourceAttachment(txn, modelA, modelC, \"C\");\n insertExternalSourceAttachment(txn, modelB, modelC, \"C\");\n });\n iModelDb.close();\n });\n\n function insertSynchronizationConfigLink(txn: EditTxn, name: string): Id64String {\n const configProps: SynchronizationConfigLinkProps = {\n classFullName: SynchronizationConfigLink.classFullName,\n model: IModel.repositoryModelId,\n code: LinkElement.createCode(txn.iModel, IModel.repositoryModelId, name),\n };\n return txn.insertElement(configProps);\n }\n\n function insertFolderLink(txn: EditTxn, codeValue: string, url: string): Id64String {\n const folderLinkProps: RepositoryLinkProps = {\n classFullName: FolderLink.classFullName,\n model: IModel.repositoryModelId,\n code: LinkElement.createCode(txn.iModel, IModel.repositoryModelId, codeValue),\n url,\n };\n return txn.insertElement(folderLinkProps);\n }\n\n function insertRepositoryLink(txn: EditTxn, folderId: Id64String, codeValue: string, url: string, format: string): Id64String {\n const repositoryLinkProps: RepositoryLinkProps = {\n classFullName: RepositoryLink.classFullName,\n model: IModel.repositoryModelId,\n parent: new FolderContainsRepositories(folderId),\n code: LinkElement.createCode(txn.iModel, IModel.repositoryModelId, codeValue),\n url,\n format,\n };\n return txn.insertElement(repositoryLinkProps);\n }\n\n function insertExternalSource(txn: EditTxn, repository: Id64String, userLabel: string): Id64String {\n const externalSourceProps: ExternalSourceProps = {\n classFullName: ExternalSource.classFullName,\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n userLabel,\n repository: new ExternalSourceIsInRepository(repository),\n connectorName: \"Connector\",\n connectorVersion: \"0.0.1\",\n };\n return txn.insertElement(externalSourceProps);\n }\n\n function insertExternalSourceAttachment(txn: EditTxn, masterModel: Id64String, attachedModel: Id64String, label: string): Id64String {\n const attachmentProps: ExternalSourceAttachmentProps = {\n classFullName: ExternalSource.classFullName,\n model: IModel.repositoryModelId,\n parent: new ExternalSourceOwnsAttachments(masterModel),\n code: Code.createEmpty(),\n userLabel: label,\n attaches: new ExternalSourceAttachmentAttachesSource(attachedModel),\n };\n return txn.insertElement(attachmentProps);\n }\n\n function insertExternalSourceGroup(txn: EditTxn, userLabel: string): Id64String {\n const groupProps: ExternalSourceProps = {\n classFullName: ExternalSourceGroup.classFullName,\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n userLabel,\n repository: undefined,\n connectorName: \"Connector\",\n connectorVersion: \"0.0.1\",\n };\n return txn.insertElement(groupProps);\n }\n});\n"]}
@@ -4,6 +4,7 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { assert, expect } from "chai";
6
6
  import { Id64 } from "@itwin/core-bentley";
7
+ import { withEditTxn } from "../../EditTxn";
7
8
  import { BriefcaseIdValue, Code, ColorDef, IModel, SubCategoryAppearance, } from "@itwin/core-common";
8
9
  import { _nativeDb, IModelJsFs, SnapshotDb, SpatialCategory } from "../../core-backend";
9
10
  import { IModelTestUtils } from "../IModelTestUtils";
@@ -45,28 +46,28 @@ describe("Insert Null elements in Struct Array, and ensure they are returned whi
45
46
  IModelJsFs.writeFileSync(testSchemaPath, testSchema);
46
47
  const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: "InsertNullStructArrayTest" } });
47
48
  await imodel.importSchemas([testSchemaPath]);
48
- imodel[_nativeDb].resetBriefcaseId(BriefcaseIdValue.Unassigned);
49
- IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);
50
- let spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);
51
- if (undefined === spatialCategoryId)
52
- spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, categoryName, new SubCategoryAppearance({ color: ColorDef.create("rgb(255,0,0)").toJSON() }));
53
- imodel.saveChanges();
49
+ await withEditTxn(imodel, async (txn) => {
50
+ imodel[_nativeDb].resetBriefcaseId(BriefcaseIdValue.Unassigned);
51
+ IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);
52
+ const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);
53
+ if (undefined === spatialCategoryId)
54
+ SpatialCategory.insert(txn, IModel.dictionaryId, categoryName, new SubCategoryAppearance({ color: ColorDef.create("rgb(255,0,0)").toJSON() }));
55
+ });
54
56
  imodel.close();
55
57
  });
56
58
  it("Test for struct array to contain null structs", async () => {
57
59
  const testFileName = IModelTestUtils.prepareOutputFile(subDirName, "roundtrip_correct_data.bim");
58
60
  const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);
59
61
  const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);
60
- const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);
62
+ const [, newModelId] = withEditTxn(imodel, (txn) => IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true));
61
63
  // create element with auto handled properties
62
64
  const expectedValue = initElemProps(imodel, newModelId, spatialCategoryId, {
63
65
  addresses: [null, { city: "Pune", zip: 28 }],
64
66
  });
65
67
  // insert a element
66
68
  const geomElement = imodel.elements.createElement(expectedValue);
67
- const id = imodel.elements.insertElement(geomElement.toJSON());
69
+ const id = withEditTxn(imodel, (txn) => txn.insertElement(geomElement.toJSON()));
68
70
  assert.isTrue(Id64.isValidId64(id), "insert worked");
69
- imodel.saveChanges();
70
71
  // verify inserted element properties
71
72
  const actualValue = imodel.elements.getElementProps(id);
72
73
  expect(actualValue.addresses.length).to.equal(2);
@@ -1 +1 @@
1
- {"version":3,"file":"NullStructArray.test.js","sourceRoot":"","sources":["../../../../src/test/element/NullStructArray.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n BriefcaseIdValue, Code, ColorDef, GeometricElementProps, IModel,\n SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport { _nativeDb, IModelDb, IModelJsFs, SnapshotDb, SpatialCategory } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ninterface TestElement extends GeometricElementProps {\n addresses: [null, {city: \"Pune\", zip: 28}];\n}\n\nfunction initElemProps( _iModelName: IModelDb, modId: Id64String, catId: Id64String, autoHandledProp: any): GeometricElementProps {\n // Create props\n const elementProps: GeometricElementProps = {\n classFullName: \"Test:Foo\",\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n };\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n return elementProps;\n}\n\ndescribe(\"Insert Null elements in Struct Array, and ensure they are returned while querying rows\", () => {\n const testSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.04\" alias=\"bis\"/>\n <ECStructClass typeName=\"Location\" modifier=\"Sealed\">\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECArrayProperty propertyName=\"I_Array\" typeName=\"int\"/>\n <ECArrayProperty propertyName=\"Dt_Array\" typeName=\"dateTime\"/>\n <ECStructArrayProperty propertyName=\"Addresses\" typeName=\"Location\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n const schemaFileName = \"NullStructElementTest.01.00.00.xml\";\n const iModelFileName = \"NullStructElementTest.bim\";\n const categoryName = \"NullStructElement\";\n const subDirName = \"NullStructElement\";\n const iModelPath = IModelTestUtils.prepareOutputFile(subDirName, iModelFileName);\n\n before(async () => {\n // write schema to disk as we do not have api to import xml directly\n const testSchemaPath = IModelTestUtils.prepareOutputFile(subDirName, schemaFileName);\n IModelJsFs.writeFileSync(testSchemaPath, testSchema);\n\n const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"InsertNullStructArrayTest\" } });\n await imodel.importSchemas([testSchemaPath]);\n imodel[_nativeDb].resetBriefcaseId(BriefcaseIdValue.Unassigned);\n IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, categoryName,\n new SubCategoryAppearance({ color: ColorDef.create(\"rgb(255,0,0)\").toJSON() }));\n\n imodel.saveChanges();\n imodel.close();\n });\n\n it(\"Test for struct array to contain null structs\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_correct_data.bim\");\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n\n // create element with auto handled properties\n const expectedValue = initElemProps( imodel, newModelId, spatialCategoryId!, {\n addresses: [null, {city: \"Pune\", zip: 28}],\n }) as TestElement;\n\n // insert a element\n const geomElement = imodel.elements.createElement(expectedValue);\n const id = imodel.elements.insertElement(geomElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n imodel.saveChanges();\n\n // verify inserted element properties\n const actualValue = imodel.elements.getElementProps<TestElement>(id);\n expect(actualValue.addresses.length).to.equal(2);\n expect(actualValue.addresses[0]).to.be.empty;\n\n imodel.close();\n });\n\n});\n"]}
1
+ {"version":3,"file":"NullStructArray.test.js","sourceRoot":"","sources":["../../../../src/test/element/NullStructArray.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { withEditTxn } from \"../../EditTxn\";\nimport {\n BriefcaseIdValue, Code, ColorDef, GeometricElementProps, IModel,\n SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport { _nativeDb, IModelDb, IModelJsFs, SnapshotDb, SpatialCategory } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ninterface TestElement extends GeometricElementProps {\n addresses: [null, { city: \"Pune\", zip: 28 }];\n}\n\nfunction initElemProps(_iModelName: IModelDb, modId: Id64String, catId: Id64String, autoHandledProp: any): GeometricElementProps {\n // Create props\n const elementProps: GeometricElementProps = {\n classFullName: \"Test:Foo\",\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n };\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n return elementProps;\n}\n\ndescribe(\"Insert Null elements in Struct Array, and ensure they are returned while querying rows\", () => {\n const testSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.04\" alias=\"bis\"/>\n <ECStructClass typeName=\"Location\" modifier=\"Sealed\">\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECArrayProperty propertyName=\"I_Array\" typeName=\"int\"/>\n <ECArrayProperty propertyName=\"Dt_Array\" typeName=\"dateTime\"/>\n <ECStructArrayProperty propertyName=\"Addresses\" typeName=\"Location\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n const schemaFileName = \"NullStructElementTest.01.00.00.xml\";\n const iModelFileName = \"NullStructElementTest.bim\";\n const categoryName = \"NullStructElement\";\n const subDirName = \"NullStructElement\";\n const iModelPath = IModelTestUtils.prepareOutputFile(subDirName, iModelFileName);\n\n before(async () => {\n // write schema to disk as we do not have api to import xml directly\n const testSchemaPath = IModelTestUtils.prepareOutputFile(subDirName, schemaFileName);\n IModelJsFs.writeFileSync(testSchemaPath, testSchema);\n\n const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"InsertNullStructArrayTest\" } });\n await imodel.importSchemas([testSchemaPath]);\n await withEditTxn(imodel, async (txn) => {\n imodel[_nativeDb].resetBriefcaseId(BriefcaseIdValue.Unassigned);\n IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);\n if (undefined === spatialCategoryId)\n SpatialCategory.insert(txn, IModel.dictionaryId, categoryName,\n new SubCategoryAppearance({ color: ColorDef.create(\"rgb(255,0,0)\").toJSON() }));\n });\n imodel.close();\n });\n\n it(\"Test for struct array to contain null structs\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_correct_data.bim\");\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);\n const [, newModelId] = withEditTxn(imodel, (txn) => IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true));\n\n // create element with auto handled properties\n const expectedValue = initElemProps(imodel, newModelId, spatialCategoryId!, {\n addresses: [null, { city: \"Pune\", zip: 28 }],\n }) as TestElement;\n\n // insert a element\n const geomElement = imodel.elements.createElement(expectedValue);\n const id = withEditTxn(imodel, (txn) => txn.insertElement(geomElement.toJSON()));\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n\n // verify inserted element properties\n const actualValue = imodel.elements.getElementProps<TestElement>(id);\n expect(actualValue.addresses.length).to.equal(2);\n expect(actualValue.addresses[0]).to.be.empty;\n\n imodel.close();\n });\n\n});\n"]}
@@ -9,6 +9,7 @@ import { IModel } from "@itwin/core-common";
9
9
  import { ProjectInformationRecord } from "../../Element";
10
10
  import { SubjectOwnsProjectInformationRecord } from "../../NavigationRelationship";
11
11
  import { DbResult } from "@itwin/core-bentley";
12
+ import { withEditTxn } from "../../EditTxn";
12
13
  describe("ProjectInformationRecord", () => {
13
14
  describe("with BisCore < 00.01.25", () => {
14
15
  let db;
@@ -56,7 +57,7 @@ describe("ProjectInformationRecord", () => {
56
57
  parentSubjectId: IModel.rootSubjectId,
57
58
  ...projectProps,
58
59
  });
59
- const recordId = record.insert();
60
+ const recordId = withEditTxn(db, (txn) => record.insert(txn));
60
61
  record = db.elements.getElement(recordId);
61
62
  expect(record).instanceof(ProjectInformationRecord);
62
63
  expect(record.projectInformation).to.deep.equal(projectProps);
@@ -73,7 +74,9 @@ describe("ProjectInformationRecord", () => {
73
74
  parentSubjectId: IModel.dictionaryId,
74
75
  ...projectProps,
75
76
  });
76
- expect(() => record.insert()).to.throw("ProjectInformationRecord must be a child of a Subject");
77
+ withEditTxn(db, (txn) => {
78
+ expect(() => record.insert(txn)).to.throw("ProjectInformationRecord must be a child of a Subject");
79
+ });
77
80
  });
78
81
  });
79
82
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectInformationRecord.test.js","sourceRoot":"","sources":["../../../../src/test/element/ProjectInformationRecord.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModel, ProjectInformation } from \"@itwin/core-common\";\nimport { ProjectInformationRecord } from \"../../Element\";\nimport { SubjectOwnsProjectInformationRecord } from \"../../NavigationRelationship\";\nimport { DbResult } from \"@itwin/core-bentley\";\n\ndescribe(\"ProjectInformationRecord\", () => {\n describe(\"with BisCore < 00.01.25\", () => {\n let db: SnapshotDb;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ProjectInformationRecord\", \"OldBisCore.bim\");\n db = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n });\n\n after(() => db.close());\n\n it(\"throws\", () => {\n const projectProps: ProjectInformation = {\n projectNumber: \"num\",\n projectName: \"name\",\n location: \"place\",\n };\n\n expect(() => ProjectInformationRecord.create({\n iModel: db,\n parentSubjectId: IModel.rootSubjectId,\n ...projectProps,\n })).to.throw(\"ProjectInformationRecord requires BisCore v01.00.25 or newer\");\n });\n });\n\n describe(\"with BisCore >= 00.01.25\", () => {\n let db: SnapshotDb;\n\n before(async () => {\n db = SnapshotDb.createEmpty(\n IModelTestUtils.prepareOutputFile(\"ProjectInformationRecord\", \"NewBisCore.bim\"),\n { rootSubject: { name: \"ProjectInformationRecord\" } }\n );\n });\n\n after(() => db.close());\n\n it(\"inserts element and creates relationship\", () => {\n function countRelationships(): number {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return db.withPreparedStatement(`SELECT COUNT(*) FROM ${SubjectOwnsProjectInformationRecord.classFullName}`, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n return stmt.getValue(0).getInteger();\n });\n }\n\n expect(countRelationships()).to.equal(0);\n\n const projectProps: ProjectInformation = {\n projectNumber: \"num\",\n projectName: \"name\",\n location: \"place\",\n };\n\n let record = ProjectInformationRecord.create({\n iModel: db,\n parentSubjectId: IModel.rootSubjectId,\n ...projectProps,\n });\n\n const recordId = record.insert();\n\n record = db.elements.getElement<ProjectInformationRecord>(recordId);\n expect(record).instanceof(ProjectInformationRecord);\n expect(record.projectInformation).to.deep.equal(projectProps);\n\n expect(countRelationships()).to.equal(1);\n })\n\n it(\"throws if parent is not a Subject\", () => {\n const projectProps: ProjectInformation = {\n projectNumber: \"num\",\n projectName: \"name\",\n location: \"place\",\n };\n\n const record = ProjectInformationRecord.create({\n iModel: db,\n parentSubjectId: IModel.dictionaryId,\n ...projectProps,\n });\n\n expect(() => record.insert()).to.throw(\"ProjectInformationRecord must be a child of a Subject\");\n });\n });\n});\n"]}
1
+ {"version":3,"file":"ProjectInformationRecord.test.js","sourceRoot":"","sources":["../../../../src/test/element/ProjectInformationRecord.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModel, ProjectInformation } from \"@itwin/core-common\";\nimport { ProjectInformationRecord } from \"../../Element\";\nimport { SubjectOwnsProjectInformationRecord } from \"../../NavigationRelationship\";\nimport { DbResult } from \"@itwin/core-bentley\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"ProjectInformationRecord\", () => {\n describe(\"with BisCore < 00.01.25\", () => {\n let db: SnapshotDb;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ProjectInformationRecord\", \"OldBisCore.bim\");\n db = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n });\n\n after(() => db.close());\n\n it(\"throws\", () => {\n const projectProps: ProjectInformation = {\n projectNumber: \"num\",\n projectName: \"name\",\n location: \"place\",\n };\n\n expect(() => ProjectInformationRecord.create({\n iModel: db,\n parentSubjectId: IModel.rootSubjectId,\n ...projectProps,\n })).to.throw(\"ProjectInformationRecord requires BisCore v01.00.25 or newer\");\n });\n });\n\n describe(\"with BisCore >= 00.01.25\", () => {\n let db: SnapshotDb;\n\n before(async () => {\n db = SnapshotDb.createEmpty(\n IModelTestUtils.prepareOutputFile(\"ProjectInformationRecord\", \"NewBisCore.bim\"),\n { rootSubject: { name: \"ProjectInformationRecord\" } }\n );\n });\n\n after(() => db.close());\n\n it(\"inserts element and creates relationship\", () => {\n function countRelationships(): number {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return db.withPreparedStatement(`SELECT COUNT(*) FROM ${SubjectOwnsProjectInformationRecord.classFullName}`, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n return stmt.getValue(0).getInteger();\n });\n }\n\n expect(countRelationships()).to.equal(0);\n\n const projectProps: ProjectInformation = {\n projectNumber: \"num\",\n projectName: \"name\",\n location: \"place\",\n };\n\n let record = ProjectInformationRecord.create({\n iModel: db,\n parentSubjectId: IModel.rootSubjectId,\n ...projectProps,\n });\n\n const recordId = withEditTxn(db, (txn) => record.insert(txn));\n\n record = db.elements.getElement<ProjectInformationRecord>(recordId);\n expect(record).instanceof(ProjectInformationRecord);\n expect(record.projectInformation).to.deep.equal(projectProps);\n\n expect(countRelationships()).to.equal(1);\n })\n\n it(\"throws if parent is not a Subject\", () => {\n const projectProps: ProjectInformation = {\n projectNumber: \"num\",\n projectName: \"name\",\n location: \"place\",\n };\n\n const record = ProjectInformationRecord.create({\n iModel: db,\n parentSubjectId: IModel.dictionaryId,\n ...projectProps,\n });\n\n withEditTxn(db, (txn) => {\n expect(() => record.insert(txn)).to.throw(\"ProjectInformationRecord must be a child of a Subject\");\n });\n });\n });\n});\n\n\n"]}
@@ -8,9 +8,10 @@ import { IModelTestUtils } from "../IModelTestUtils";
8
8
  import { DbResult, Guid } from "@itwin/core-bentley";
9
9
  import { DocumentPartition, Sheet } from "../../Element";
10
10
  import { DocumentListModel, SheetModel } from "../../Model";
11
- import { IModel } from "@itwin/core-common";
11
+ import { EditTxnError, IModel } from "@itwin/core-common";
12
12
  import { SheetInformationAspect } from "../../ElementAspect";
13
13
  import { SheetOwnsSheetInformationAspect } from "../../NavigationRelationship";
14
+ import { EditTxn, withEditTxn } from "../../EditTxn";
14
15
  async function getOrCreateDocumentList(iModel) {
15
16
  const documentListName = "SheetList";
16
17
  let documentListModelId;
@@ -25,7 +26,7 @@ async function getOrCreateDocumentList(iModel) {
25
26
  await iModel.locks.acquireLocks({
26
27
  shared: subjectId,
27
28
  });
28
- documentListModelId = DocumentListModel.insert(iModel, subjectId, documentListName);
29
+ documentListModelId = withEditTxn(iModel, (txn) => DocumentListModel.insert(txn, subjectId, documentListName));
29
30
  }
30
31
  return documentListModelId;
31
32
  }
@@ -47,13 +48,14 @@ async function insertSheet(iModel) {
47
48
  code: Sheet.createCode(iModel, modelId, sheetName),
48
49
  model: modelId,
49
50
  };
50
- const sheetElementId = iModel.elements.insertElement(sheetElementProps);
51
- const sheetModelProps = {
52
- classFullName: SheetModel.classFullName,
53
- modeledElement: { id: sheetElementId, relClassName: "BisCore:ModelModelsElement" },
54
- };
55
- const sheetModelId = iModel.models.insertModel(sheetModelProps);
56
- return sheetModelId;
51
+ return withEditTxn(iModel, (txn) => {
52
+ const sheetElementId = txn.insertElement(sheetElementProps);
53
+ const sheetModelProps = {
54
+ classFullName: SheetModel.classFullName,
55
+ modeledElement: { id: sheetElementId, relClassName: "BisCore:ModelModelsElement" },
56
+ };
57
+ return txn.insertModel(sheetModelProps);
58
+ });
57
59
  }
58
60
  ;
59
61
  describe("SheetInformationAspect", () => {
@@ -74,7 +76,7 @@ describe("SheetInformationAspect", () => {
74
76
  });
75
77
  describe("setSheetInformation", () => {
76
78
  it("throws", () => {
77
- expect(() => SheetInformationAspect.setSheetInformation({ designedBy: "me" }, sheetId, db)).to.throw("SheetInformationAspect requires BisCore v01.00.25 or newer");
79
+ expect(() => withEditTxn(db, (txn) => SheetInformationAspect.setSheetInformation(txn, { designedBy: "me" }, sheetId))).to.throw("SheetInformationAspect requires BisCore v01.00.25 or newer");
78
80
  });
79
81
  });
80
82
  });
@@ -90,7 +92,7 @@ describe("SheetInformationAspect", () => {
90
92
  return SheetInformationAspect.getSheetInformation(elemId, db);
91
93
  }
92
94
  function setSheetInfo(elemId, info) {
93
- SheetInformationAspect.setSheetInformation(info, elemId, db);
95
+ withEditTxn(db, (txn) => SheetInformationAspect.setSheetInformation(txn, info, elemId));
94
96
  }
95
97
  describe("getSheetInformation", () => {
96
98
  it("returns undefined if no aspect exists", async () => {
@@ -163,6 +165,36 @@ describe("SheetInformationAspect", () => {
163
165
  const info = { designedBy: "me", checkedBy: "you", designedDate, drawnBy: "Bob Ross" };
164
166
  expect(() => setSheetInfo(IModel.rootSubjectId, info)).to.throw("SheetInformationAspect can only be applied to a Sheet element");
165
167
  });
168
+ it("supports deprecated setSheetInformation overload when implicit writes are allowed", async () => {
169
+ const previousEnforcement = EditTxn.implicitWriteEnforcement;
170
+ EditTxn.implicitWriteEnforcement = "allow";
171
+ try {
172
+ const sheetId = await insertSheet(db);
173
+ const info = { designedBy: "legacy", checkedBy: "legacy-check", designedDate, drawnBy: "legacy-draw" };
174
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
175
+ SheetInformationAspect.setSheetInformation(info, sheetId, db);
176
+ expect(getSheetInfo(sheetId)).to.deep.equal(info);
177
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
178
+ SheetInformationAspect.setSheetInformation(undefined, sheetId, db);
179
+ expect(getSheetInfo(sheetId)).to.be.undefined;
180
+ }
181
+ finally {
182
+ EditTxn.implicitWriteEnforcement = previousEnforcement;
183
+ }
184
+ });
185
+ it("rejects deprecated setSheetInformation overload when implicit writes are disallowed", async () => {
186
+ const previousEnforcement = EditTxn.implicitWriteEnforcement;
187
+ EditTxn.implicitWriteEnforcement = "throw";
188
+ try {
189
+ const sheetId = await insertSheet(db);
190
+ const info = { designedBy: "legacy", checkedBy: "legacy-check", designedDate, drawnBy: "legacy-draw" };
191
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
192
+ expect(() => SheetInformationAspect.setSheetInformation(info, sheetId, db)).to.throw().that.satisfies((error) => EditTxnError.isError(error, "implicit-txn-write-disallowed"));
193
+ }
194
+ finally {
195
+ EditTxn.implicitWriteEnforcement = previousEnforcement;
196
+ }
197
+ });
166
198
  it("creates SheetOwnsSheetInformationAspect relationships", async () => {
167
199
  const sheetId = await insertSheet(db);
168
200
  function countRelationships() {
@@ -1 +1 @@
1
- {"version":3,"file":"SheetInformationAspect.test.js","sourceRoot":"","sources":["../../../../src/test/element/SheetInformationAspect.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { DbResult, Guid, Id64String } from \"@itwin/core-bentley\";\nimport { DocumentPartition, Sheet } from \"../../Element\";\nimport { DocumentListModel, SheetModel } from \"../../Model\";\nimport { GeometricModel2dProps, IModel, RelatedElement, SheetInformation, SheetProps } from \"@itwin/core-common\";\nimport { SheetInformationAspect } from \"../../ElementAspect\";\nimport { SheetOwnsSheetInformationAspect } from \"../../NavigationRelationship\";\n\nasync function getOrCreateDocumentList(iModel: IModelDb): Promise<Id64String> {\n const documentListName = \"SheetList\";\n let documentListModelId: string | undefined;\n\n // Attempt to find an existing document partition and document list model\n const ids = iModel.queryEntityIds({ from: DocumentPartition.classFullName, where: `CodeValue = '${documentListName}'`});\n if (ids.size === 1) {\n documentListModelId = ids.values().next().value;\n }\n\n // If they do not exist, create the document partition and document list model\n if (documentListModelId === undefined) {\n const subjectId = iModel.elements.getRootSubject().id;\n await iModel.locks.acquireLocks({\n shared: subjectId,\n });\n documentListModelId = DocumentListModel.insert(iModel, subjectId, documentListName);\n }\n\n return documentListModelId;\n};\n\nasync function insertSheet(iModel: IModelDb): Promise<Id64String> {\n const sheetName = Guid.createValue();\n\n const createSheetProps = {\n height: 42,\n width: 42,\n scale: 42,\n };\n // Get or make documentListModelId\n const modelId = await getOrCreateDocumentList(iModel);\n\n // Acquire locks and create sheet\n await iModel.locks.acquireLocks({ shared: modelId });\n const sheetElementProps: SheetProps = {\n ...createSheetProps,\n classFullName: Sheet.classFullName,\n code: Sheet.createCode(iModel, modelId, sheetName),\n model: modelId,\n };\n const sheetElementId = iModel.elements.insertElement(sheetElementProps);\n\n const sheetModelProps: GeometricModel2dProps = {\n classFullName: SheetModel.classFullName,\n modeledElement: { id: sheetElementId, relClassName: \"BisCore:ModelModelsElement\" } as RelatedElement,\n };\n const sheetModelId = iModel.models.insertModel(sheetModelProps);\n\n return sheetModelId;\n};\n\ndescribe(\"SheetInformationAspect\", () => {\n describe(\"with BisCore < 00.01.25\", () => {\n let db: SnapshotDb;\n let sheetId: Id64String;\n\n before(async () => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"SheetInformationAspect\", \"OldBisCore.bim\");\n db = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n sheetId = await insertSheet(db);\n });\n\n after(() => db.close());\n\n describe(\"getSheetInformation\", () => {\n it(\"returns undefined\", () => {\n expect(SheetInformationAspect.getSheetInformation(sheetId, db)).to.be.undefined;\n });\n });\n\n describe(\"setSheetInformation\", () => {\n it(\"throws\", () => {\n expect(\n () => SheetInformationAspect.setSheetInformation({ designedBy: \"me\" }, sheetId, db)\n ).to.throw(\"SheetInformationAspect requires BisCore v01.00.25 or newer\");\n });\n });\n });\n\n describe(\"with BisCore >= 00.01.25\", () => {\n let db: SnapshotDb;\n const designedDate = new Date(\"2011-10-05T14:48:00.000Z\");\n expect(designedDate.toISOString()).to.equal(\"2011-10-05T14:48:00.000Z\");\n\n before(async () => {\n db = SnapshotDb.createEmpty(\n IModelTestUtils.prepareOutputFile(\"SheetInformationAspect\", \"NewBisCore.bim\"),\n { rootSubject: { name: \"SheetInformationAspect\" } }\n );\n });\n\n after(() => db.close());\n\n function getSheetInfo(elemId: string): SheetInformation | undefined {\n return SheetInformationAspect.getSheetInformation(elemId, db);\n }\n\n function setSheetInfo(elemId: string, info: SheetInformation | undefined): void {\n SheetInformationAspect.setSheetInformation(info, elemId, db);\n }\n\n describe(\"getSheetInformation\", () => {\n it(\"returns undefined if no aspect exists\", async () => {\n const sheetId = await insertSheet(db);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n });\n\n it(\"returns undefined if element is not a valid Sheet\", () => {\n expect(getSheetInfo(IModel.rootSubjectId)).to.be.undefined;\n });\n\n it(\"returns information if aspect exists\", async () => {\n const sheetId = await insertSheet(db);\n const info = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n });\n });\n\n describe(\"setSheetInformation\", () => {\n it(\"inserts aspect if it doesn't already exist\", async () => {\n const sheetId = await insertSheet(db);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n\n const info = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n });\n\n it(\"omits undefined fields\", async () => {\n const info = { designedBy: \"me\" };\n const sheetId = await insertSheet(db);\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal({ designedBy: \"me\", checkedBy: undefined, designedDate: undefined, drawnBy: undefined });\n });\n\n it(\"includes fields set to empty strings\", async () => {\n const info = { designedBy: \"\", checkedBy: \"\", designedDate, drawnBy: \"\" };\n const sheetId = await insertSheet(db);\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n });\n\n it(\"updates existing aspect\", async () => {\n const sheetId = await insertSheet(db);\n const initialInfo = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, initialInfo);\n expect(getSheetInfo(sheetId)).to.deep.equal(initialInfo);\n\n const updatedInfo = { designedBy: \"you\", checkedBy: \"me\", designedDate, drawnBy: \"Pablo Picasso\" };\n setSheetInfo(sheetId, updatedInfo);\n expect(getSheetInfo(sheetId)).to.deep.equal(updatedInfo);\n });\n\n it(\"selectively updates existing aspect\", async () => {\n const sheetId = await insertSheet(db);\n const initialInfo = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, initialInfo);\n expect(getSheetInfo(sheetId)).to.deep.equal(initialInfo);\n\n const updatedInfo = { designedBy: \"my buddy Gary\" };\n setSheetInfo(sheetId, updatedInfo);\n expect(getSheetInfo(sheetId)).to.deep.equal({ designedDate, designedBy: \"my buddy Gary\", checkedBy: \"you\", drawnBy: \"Bob Ross\" });\n });\n\n it(\"deletes existing aspect if information is undefined\", async () => {\n const sheetId = await insertSheet(db);\n const info = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n setSheetInfo(sheetId, undefined);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n });\n\n it(\"is a no-op if information is undefined and no aspect exists\", async () => {\n const sheetId = await insertSheet(db);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n setSheetInfo(sheetId, undefined);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n });\n\n it(\"throws if element is not a Sheet\", () => {\n const info = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n expect(() => setSheetInfo(IModel.rootSubjectId, info)).to.throw(\"SheetInformationAspect can only be applied to a Sheet element\");\n });\n\n it(\"creates SheetOwnsSheetInformationAspect relationships\", async () => {\n const sheetId = await insertSheet(db);\n\n function countRelationships(): number {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return db.withPreparedStatement(`SELECT COUNT(*) FROM ${SheetOwnsSheetInformationAspect.classFullName} WHERE SourceECInstanceId=${sheetId}`, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n return stmt.getValue(0).getInteger();\n });\n }\n\n expect(countRelationships()).to.equal(0);\n setSheetInfo(sheetId, { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" });\n expect(countRelationships()).to.equal(1);\n });\n })\n });\n});\n"]}
1
+ {"version":3,"file":"SheetInformationAspect.test.js","sourceRoot":"","sources":["../../../../src/test/element/SheetInformationAspect.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAY,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAyB,MAAM,EAAgD,MAAM,oBAAoB,CAAC;AAC/H,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAErD,KAAK,UAAU,uBAAuB,CAAC,MAAgB;IACrD,MAAM,gBAAgB,GAAG,WAAW,CAAC;IACrC,IAAI,mBAAuC,CAAC;IAE5C,yEAAyE;IACzE,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,aAAa,EAAE,KAAK,EAAE,gBAAgB,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACzH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IAClD,CAAC;IAED,8EAA8E;IAC9E,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QACtD,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;YAC9B,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACjH,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAAA,CAAC;AAEF,KAAK,UAAU,WAAW,CAAC,MAAgB;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,gBAAgB,GAAG;QACvB,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV,CAAC;IACF,kCAAkC;IAClC,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEtD,iCAAiC;IACjC,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAe;QACpC,GAAG,gBAAgB;QACnB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;QAClD,KAAK,EAAE,OAAO;KACf,CAAC;IACF,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;QACjC,MAAM,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAC5D,MAAM,eAAe,GAA0B;YAC7C,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,cAAc,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,4BAA4B,EAAoB;SACrG,CAAC;QACF,OAAO,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAAA,CAAC;AAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,IAAI,EAAc,CAAC;QACnB,IAAI,OAAmB,CAAC;QAExB,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;YACvE,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;YACnG,EAAE,GAAG,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACxE,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAExB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;gBAC3B,MAAM,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAClF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAChB,MAAM,CACJ,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAC/G,CAAC,EAAE,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,IAAI,EAAc,CAAC;QACnB,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAExE,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,EAAE,GAAG,UAAU,CAAC,WAAW,CACzB,eAAe,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,EAC7E,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,CACpD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAExB,SAAS,YAAY,CAAC,MAAc;YAClC,OAAO,sBAAsB,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,SAAS,YAAY,CAAC,MAAc,EAAE,IAAkC;YACtE,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBACrD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;gBAC3D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC7D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;gBACvF,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAE9C,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;gBACvF,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;gBACtC,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACvI,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBAC1E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;gBACvC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,WAAW,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;gBAC9F,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACnC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAEzD,MAAM,WAAW,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;gBACnG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACnC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;gBACnD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,WAAW,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;gBAC9F,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACnC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAEzD,MAAM,WAAW,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;gBACpD,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACnC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACpI,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;gBACvF,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClD,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACjC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBAC3E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC9C,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACjC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;gBAC1C,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;gBACvF,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YACnI,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;gBACjG,MAAM,mBAAmB,GAAG,OAAO,CAAC,wBAAwB,CAAC;gBAC7D,OAAO,CAAC,wBAAwB,GAAG,OAAO,CAAC;gBAE3C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;oBACtC,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;oBAEvG,4DAA4D;oBAC5D,sBAAsB,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC9D,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAElD,4DAA4D;oBAC5D,sBAAsB,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;oBACnE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAChD,CAAC;wBAAS,CAAC;oBACT,OAAO,CAAC,wBAAwB,GAAG,mBAAmB,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;gBACnG,MAAM,mBAAmB,GAAG,OAAO,CAAC,wBAAwB,CAAC;gBAC7D,OAAO,CAAC,wBAAwB,GAAG,OAAO,CAAC;gBAE3C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;oBACtC,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;oBAEvG,4DAA4D;oBAC5D,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAc,EAAE,EAAE,CACvH,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC,CAAC;gBAClE,CAAC;wBAAS,CAAC;oBACT,OAAO,CAAC,wBAAwB,GAAG,mBAAmB,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACrE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBAEtC,SAAS,kBAAkB;oBACzB,4DAA4D;oBAC5D,OAAO,EAAE,CAAC,qBAAqB,CAAC,wBAAwB,+BAA+B,CAAC,aAAa,6BAA6B,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;wBACpJ,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;wBACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;oBACvC,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzC,YAAY,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBACjG,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAC;AACL,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\nimport { expect } from \"chai\";\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { DbResult, Guid, Id64String } from \"@itwin/core-bentley\";\nimport { DocumentPartition, Sheet } from \"../../Element\";\nimport { DocumentListModel, SheetModel } from \"../../Model\";\nimport { EditTxnError, GeometricModel2dProps, IModel, RelatedElement, SheetInformation, SheetProps } from \"@itwin/core-common\";\nimport { SheetInformationAspect } from \"../../ElementAspect\";\nimport { SheetOwnsSheetInformationAspect } from \"../../NavigationRelationship\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\n\nasync function getOrCreateDocumentList(iModel: IModelDb): Promise<Id64String> {\n const documentListName = \"SheetList\";\n let documentListModelId: string | undefined;\n\n // Attempt to find an existing document partition and document list model\n const ids = iModel.queryEntityIds({ from: DocumentPartition.classFullName, where: `CodeValue = '${documentListName}'` });\n if (ids.size === 1) {\n documentListModelId = ids.values().next().value;\n }\n\n // If they do not exist, create the document partition and document list model\n if (documentListModelId === undefined) {\n const subjectId = iModel.elements.getRootSubject().id;\n await iModel.locks.acquireLocks({\n shared: subjectId,\n });\n documentListModelId = withEditTxn(iModel, (txn) => DocumentListModel.insert(txn, subjectId, documentListName));\n }\n\n return documentListModelId;\n};\n\nasync function insertSheet(iModel: IModelDb): Promise<Id64String> {\n const sheetName = Guid.createValue();\n\n const createSheetProps = {\n height: 42,\n width: 42,\n scale: 42,\n };\n // Get or make documentListModelId\n const modelId = await getOrCreateDocumentList(iModel);\n\n // Acquire locks and create sheet\n await iModel.locks.acquireLocks({ shared: modelId });\n const sheetElementProps: SheetProps = {\n ...createSheetProps,\n classFullName: Sheet.classFullName,\n code: Sheet.createCode(iModel, modelId, sheetName),\n model: modelId,\n };\n return withEditTxn(iModel, (txn) => {\n const sheetElementId = txn.insertElement(sheetElementProps);\n const sheetModelProps: GeometricModel2dProps = {\n classFullName: SheetModel.classFullName,\n modeledElement: { id: sheetElementId, relClassName: \"BisCore:ModelModelsElement\" } as RelatedElement,\n };\n return txn.insertModel(sheetModelProps);\n });\n};\n\ndescribe(\"SheetInformationAspect\", () => {\n describe(\"with BisCore < 00.01.25\", () => {\n let db: SnapshotDb;\n let sheetId: Id64String;\n\n before(async () => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"SheetInformationAspect\", \"OldBisCore.bim\");\n db = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n sheetId = await insertSheet(db);\n });\n\n after(() => db.close());\n\n describe(\"getSheetInformation\", () => {\n it(\"returns undefined\", () => {\n expect(SheetInformationAspect.getSheetInformation(sheetId, db)).to.be.undefined;\n });\n });\n\n describe(\"setSheetInformation\", () => {\n it(\"throws\", () => {\n expect(\n () => withEditTxn(db, (txn) => SheetInformationAspect.setSheetInformation(txn, { designedBy: \"me\" }, sheetId))\n ).to.throw(\"SheetInformationAspect requires BisCore v01.00.25 or newer\");\n });\n });\n });\n\n describe(\"with BisCore >= 00.01.25\", () => {\n let db: SnapshotDb;\n const designedDate = new Date(\"2011-10-05T14:48:00.000Z\");\n expect(designedDate.toISOString()).to.equal(\"2011-10-05T14:48:00.000Z\");\n\n before(async () => {\n db = SnapshotDb.createEmpty(\n IModelTestUtils.prepareOutputFile(\"SheetInformationAspect\", \"NewBisCore.bim\"),\n { rootSubject: { name: \"SheetInformationAspect\" } }\n );\n });\n\n after(() => db.close());\n\n function getSheetInfo(elemId: string): SheetInformation | undefined {\n return SheetInformationAspect.getSheetInformation(elemId, db);\n }\n\n function setSheetInfo(elemId: string, info: SheetInformation | undefined): void {\n withEditTxn(db, (txn) => SheetInformationAspect.setSheetInformation(txn, info, elemId));\n }\n\n describe(\"getSheetInformation\", () => {\n it(\"returns undefined if no aspect exists\", async () => {\n const sheetId = await insertSheet(db);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n });\n\n it(\"returns undefined if element is not a valid Sheet\", () => {\n expect(getSheetInfo(IModel.rootSubjectId)).to.be.undefined;\n });\n\n it(\"returns information if aspect exists\", async () => {\n const sheetId = await insertSheet(db);\n const info = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n });\n });\n\n describe(\"setSheetInformation\", () => {\n it(\"inserts aspect if it doesn't already exist\", async () => {\n const sheetId = await insertSheet(db);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n\n const info = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n });\n\n it(\"omits undefined fields\", async () => {\n const info = { designedBy: \"me\" };\n const sheetId = await insertSheet(db);\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal({ designedBy: \"me\", checkedBy: undefined, designedDate: undefined, drawnBy: undefined });\n });\n\n it(\"includes fields set to empty strings\", async () => {\n const info = { designedBy: \"\", checkedBy: \"\", designedDate, drawnBy: \"\" };\n const sheetId = await insertSheet(db);\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n });\n\n it(\"updates existing aspect\", async () => {\n const sheetId = await insertSheet(db);\n const initialInfo = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, initialInfo);\n expect(getSheetInfo(sheetId)).to.deep.equal(initialInfo);\n\n const updatedInfo = { designedBy: \"you\", checkedBy: \"me\", designedDate, drawnBy: \"Pablo Picasso\" };\n setSheetInfo(sheetId, updatedInfo);\n expect(getSheetInfo(sheetId)).to.deep.equal(updatedInfo);\n });\n\n it(\"selectively updates existing aspect\", async () => {\n const sheetId = await insertSheet(db);\n const initialInfo = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, initialInfo);\n expect(getSheetInfo(sheetId)).to.deep.equal(initialInfo);\n\n const updatedInfo = { designedBy: \"my buddy Gary\" };\n setSheetInfo(sheetId, updatedInfo);\n expect(getSheetInfo(sheetId)).to.deep.equal({ designedDate, designedBy: \"my buddy Gary\", checkedBy: \"you\", drawnBy: \"Bob Ross\" });\n });\n\n it(\"deletes existing aspect if information is undefined\", async () => {\n const sheetId = await insertSheet(db);\n const info = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n setSheetInfo(sheetId, info);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n setSheetInfo(sheetId, undefined);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n });\n\n it(\"is a no-op if information is undefined and no aspect exists\", async () => {\n const sheetId = await insertSheet(db);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n setSheetInfo(sheetId, undefined);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n });\n\n it(\"throws if element is not a Sheet\", () => {\n const info = { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" };\n expect(() => setSheetInfo(IModel.rootSubjectId, info)).to.throw(\"SheetInformationAspect can only be applied to a Sheet element\");\n });\n\n it(\"supports deprecated setSheetInformation overload when implicit writes are allowed\", async () => {\n const previousEnforcement = EditTxn.implicitWriteEnforcement;\n EditTxn.implicitWriteEnforcement = \"allow\";\n\n try {\n const sheetId = await insertSheet(db);\n const info = { designedBy: \"legacy\", checkedBy: \"legacy-check\", designedDate, drawnBy: \"legacy-draw\" };\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n SheetInformationAspect.setSheetInformation(info, sheetId, db);\n expect(getSheetInfo(sheetId)).to.deep.equal(info);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n SheetInformationAspect.setSheetInformation(undefined, sheetId, db);\n expect(getSheetInfo(sheetId)).to.be.undefined;\n } finally {\n EditTxn.implicitWriteEnforcement = previousEnforcement;\n }\n });\n\n it(\"rejects deprecated setSheetInformation overload when implicit writes are disallowed\", async () => {\n const previousEnforcement = EditTxn.implicitWriteEnforcement;\n EditTxn.implicitWriteEnforcement = \"throw\";\n\n try {\n const sheetId = await insertSheet(db);\n const info = { designedBy: \"legacy\", checkedBy: \"legacy-check\", designedDate, drawnBy: \"legacy-draw\" };\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => SheetInformationAspect.setSheetInformation(info, sheetId, db)).to.throw().that.satisfies((error: unknown) =>\n EditTxnError.isError(error, \"implicit-txn-write-disallowed\"));\n } finally {\n EditTxn.implicitWriteEnforcement = previousEnforcement;\n }\n });\n\n it(\"creates SheetOwnsSheetInformationAspect relationships\", async () => {\n const sheetId = await insertSheet(db);\n\n function countRelationships(): number {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return db.withPreparedStatement(`SELECT COUNT(*) FROM ${SheetOwnsSheetInformationAspect.classFullName} WHERE SourceECInstanceId=${sheetId}`, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n return stmt.getValue(0).getInteger();\n });\n }\n\n expect(countRelationships()).to.equal(0);\n setSheetInfo(sheetId, { designedBy: \"me\", checkedBy: \"you\", designedDate, drawnBy: \"Bob Ross\" });\n expect(countRelationships()).to.equal(1);\n });\n })\n });\n});\n"]}
@@ -5,6 +5,7 @@
5
5
  import { assert } from "chai";
6
6
  import { Guid, Id64 } from "@itwin/core-bentley";
7
7
  import { IModelTestUtils } from "../IModelTestUtils";
8
+ import { withEditTxn } from "../../EditTxn";
8
9
  import { IModel } from "@itwin/core-common";
9
10
  import { RepositoryLink } from "../../Element";
10
11
  import { SnapshotDb } from "../../IModelDb";
@@ -23,9 +24,8 @@ describe("UrlLink tests", () => {
23
24
  model: IModel.repositoryModelId,
24
25
  };
25
26
  const linkElement = imodel.elements.createElement(linkProps);
26
- const id = imodel.elements.insertElement(linkElement.toJSON());
27
+ const id = withEditTxn(imodel, (txn) => txn.insertElement(linkElement.toJSON()));
27
28
  assert.isTrue(Id64.isValidId64(id), "insert worked");
28
- imodel.saveChanges();
29
29
  // verify inserted element properties
30
30
  const actualValue = imodel.elements.getElement(id);
31
31
  assert.equal(actualValue.url, linkProps.url, "Repository link url not set as expected");
@@ -1 +1 @@
1
- {"version":3,"file":"UrlLink.test.js","sourceRoot":"","sources":["../../../../src/test/element/UrlLink.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAuB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAE/E,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAC5F,MAAM,SAAS,GAAwB;YACrC,WAAW,EAAE,gCAAgC;YAC7C,GAAG,EAAE,oBAAoB;YACzB,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE;YAClC,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;YAChF,KAAK,EAAE,MAAM,CAAC,iBAAiB;SAChC,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;AACL,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*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { Guid, Id64 } from \"@itwin/core-bentley\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\nimport { IModel, RepositoryLinkProps } from \"@itwin/core-common\";\nimport { RepositoryLink } from \"../../Element\";\nimport { SnapshotDb } from \"../../IModelDb\";\n\nconst testFileName = \"UrlLinkTest.bim\";\nconst subDirName = \"UrlLinkTrip\";\nconst iModelPath = IModelTestUtils.prepareOutputFile(subDirName, testFileName);\n\ndescribe(\"UrlLink tests\", () => {\n it(\"Link should construct properly\", () => {\n const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"UrlLinkTest\" } });\n const linkProps: RepositoryLinkProps = {\n description: \"This is a test repository link\",\n url: \"http://itwinjs.org\",\n repositoryGuid: Guid.createValue(),\n classFullName: RepositoryLink.classFullName,\n code: RepositoryLink.createCode(imodel, IModel.repositoryModelId, \"MyTestValue\"),\n model: IModel.repositoryModelId,\n };\n\n const linkElement = imodel.elements.createElement(linkProps);\n const id = imodel.elements.insertElement(linkElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n imodel.saveChanges();\n\n // verify inserted element properties\n const actualValue = imodel.elements.getElement<RepositoryLink>(id);\n assert.equal(actualValue.url, linkProps.url, \"Repository link url not set as expected\");\n assert.equal(actualValue.description, linkProps.description, \"Repository link description not set as expected\");\n assert.equal(actualValue.repositoryGuid, linkProps.repositoryGuid, \"Repository link guid not set as expected.\");\n });\n});\n"]}
1
+ {"version":3,"file":"UrlLink.test.js","sourceRoot":"","sources":["../../../../src/test/element/UrlLink.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAuB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAE/E,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAC5F,MAAM,SAAS,GAAwB;YACrC,WAAW,EAAE,gCAAgC;YAC7C,GAAG,EAAE,oBAAoB;YACzB,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE;YAClC,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;YAChF,KAAK,EAAE,MAAM,CAAC,iBAAiB;SAChC,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QAErD,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;AACL,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*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { Guid, Id64 } from \"@itwin/core-bentley\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { withEditTxn } from \"../../EditTxn\";\n\nimport { IModel, RepositoryLinkProps } from \"@itwin/core-common\";\nimport { RepositoryLink } from \"../../Element\";\nimport { SnapshotDb } from \"../../IModelDb\";\n\nconst testFileName = \"UrlLinkTest.bim\";\nconst subDirName = \"UrlLinkTrip\";\nconst iModelPath = IModelTestUtils.prepareOutputFile(subDirName, testFileName);\n\ndescribe(\"UrlLink tests\", () => {\n it(\"Link should construct properly\", () => {\n const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"UrlLinkTest\" } });\n const linkProps: RepositoryLinkProps = {\n description: \"This is a test repository link\",\n url: \"http://itwinjs.org\",\n repositoryGuid: Guid.createValue(),\n classFullName: RepositoryLink.classFullName,\n code: RepositoryLink.createCode(imodel, IModel.repositoryModelId, \"MyTestValue\"),\n model: IModel.repositoryModelId,\n };\n\n const linkElement = imodel.elements.createElement(linkProps);\n const id = withEditTxn(imodel, (txn) => txn.insertElement(linkElement.toJSON()));\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n\n // verify inserted element properties\n const actualValue = imodel.elements.getElement<RepositoryLink>(id);\n assert.equal(actualValue.url, linkProps.url, \"Repository link url not set as expected\");\n assert.equal(actualValue.description, linkProps.description, \"Repository link description not set as expected\");\n assert.equal(actualValue.repositoryGuid, linkProps.repositoryGuid, \"Repository link guid not set as expected.\");\n });\n});\n"]}