@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
@@ -6,13 +6,13 @@ import { expect } from "chai";
6
6
  import { existsSync } from "fs";
7
7
  import { join } from "path";
8
8
  import { OpenMode } from "@itwin/core-bentley";
9
- import { IModelHost } from "../IModelHost";
10
9
  import { PropertyStore } from "../PropertyStore";
11
10
  import { KnownTestLocations } from "./KnownTestLocations";
11
+ import { TestUtils } from "./TestUtils";
12
12
  describe("PropertyDb", function () {
13
13
  this.timeout(0);
14
14
  const outputDir = KnownTestLocations.outputDir;
15
- before(async () => IModelHost.startup());
15
+ before(async () => TestUtils.startBackend());
16
16
  it("save and load properties", async () => {
17
17
  const dbName = join(outputDir, "properties.db");
18
18
  PropertyStore.PropertyDb.createNewDb(dbName);
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyDb.test.js","sourceRoot":"","sources":["../../../src/test/PropertyDb.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 { existsSync } from \"fs\";\nimport { Suite } from \"mocha\";\nimport { join } from \"path\";\nimport { OpenMode } from \"@itwin/core-bentley\";\nimport { IModelHost } from \"../IModelHost\";\nimport { PropertyStore } from \"../PropertyStore\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\n\ndescribe(\"PropertyDb\", function (this: Suite) {\n this.timeout(0);\n\n const outputDir = KnownTestLocations.outputDir;\n\n before(async () => IModelHost.startup());\n\n it(\"save and load properties\", async () => {\n const dbName = join(outputDir, \"properties.db\");\n PropertyStore.PropertyDb.createNewDb(dbName);\n expect(existsSync(dbName)).true;\n const propertyDb = new PropertyStore.PropertyDb();\n propertyDb.openDb(dbName, OpenMode.ReadWrite);\n\n const countProperties = (filter?: PropertyStore.PropertyFilter) => {\n let count = 0;\n propertyDb.forAllProperties(() => {\n ++count;\n }, filter);\n return count;\n };\n const testJson = {\n a: \"test string\",\n num: 20,\n b: true,\n };\n\n const string1 = \"this is a test\";\n const string2 = \"this is another test\";\n const blob1 = new Uint8Array([2, 33, 23, 0, 202]);\n await propertyDb.saveProperty(\"test-string\", string1);\n await propertyDb.saveProperty(\"test-string2\", string2);\n await propertyDb.saveProperty(\"test-obj\", testJson);\n await propertyDb.saveProperty(\"is-false\", false);\n await propertyDb.saveProperty(\"is-true\", true);\n await propertyDb.saveProperty(\"is-100\", 100);\n await propertyDb.saveProperty(\"is-2.3\", 2.3);\n await propertyDb.saveProperty(\"is-blob\", blob1);\n propertyDb.saveChanges();\n expect(countProperties()).equal(8);\n\n expect(propertyDb.getString(\"test-string\")).equals(string1);\n expect(propertyDb.getString(\"test-string2\")).equals(string2);\n expect(propertyDb.getObject(\"test-obj\")).deep.equal(testJson);\n expect(propertyDb.getBoolean(\"is-false\")).false;\n expect(propertyDb.getBoolean(\"is-true\")).true;\n expect(propertyDb.getNumber(\"is-100\")).equal(100);\n expect(propertyDb.getNumber(\"is-2.3\")).equal(2.3);\n expect(propertyDb.getBlob(\"is-blob\")).deep.equal(blob1);\n\n const updated = \"this is a different string\";\n await propertyDb.saveProperty(\"test-string\", updated);\n expect(propertyDb.getString(\"test-string\")).equals(updated);\n\n expect(propertyDb.getNumber(\"test-string\")).undefined;\n expect(propertyDb.getString(\"not there\")).undefined;\n expect(propertyDb.getBlob(\"not there\")).undefined;\n expect(propertyDb.getNumber(\"not there\")).undefined;\n expect(propertyDb.getBlob(\"not there\")).undefined;\n expect(propertyDb.getNumber(\"not there\", 50)).equal(50);\n\n expect(countProperties({ value: \"test%\", valueCompare: \"LIKE\" })).equal(3);\n await propertyDb.deleteProperty(\"test-string\");\n expect(countProperties()).equal(7);\n expect(countProperties({ value: \"test%\", valueCompare: \"LIKE\" })).equal(2);\n\n propertyDb.closeDb(true);\n });\n});\n"]}
1
+ {"version":3,"file":"PropertyDb.test.js","sourceRoot":"","sources":["../../../src/test/PropertyDb.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,QAAQ,CAAC,YAAY,EAAE;IACrB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhB,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;IAE/C,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;IAE7C,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAChD,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;QAClD,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE9C,MAAM,eAAe,GAAG,CAAC,MAAqC,EAAE,EAAE;YAChE,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE;gBAC/B,EAAE,KAAK,CAAC;YACV,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG;YACf,CAAC,EAAE,aAAa;YAChB,GAAG,EAAE,EAAE;YACP,CAAC,EAAE,IAAI;SACR,CAAC;QAEF,MAAM,OAAO,GAAG,gBAAgB,CAAC;QACjC,MAAM,OAAO,GAAG,sBAAsB,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,UAAU,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,UAAU,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;QAChD,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,4BAA4B,CAAC;QAC7C,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAExD,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3E,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,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 { existsSync } from \"fs\";\nimport { Suite } from \"mocha\";\nimport { join } from \"path\";\nimport { OpenMode } from \"@itwin/core-bentley\";\nimport { PropertyStore } from \"../PropertyStore\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\nimport { TestUtils } from \"./TestUtils\";\n\ndescribe(\"PropertyDb\", function (this: Suite) {\n this.timeout(0);\n\n const outputDir = KnownTestLocations.outputDir;\n\n before(async () => TestUtils.startBackend());\n\n it(\"save and load properties\", async () => {\n const dbName = join(outputDir, \"properties.db\");\n PropertyStore.PropertyDb.createNewDb(dbName);\n expect(existsSync(dbName)).true;\n const propertyDb = new PropertyStore.PropertyDb();\n propertyDb.openDb(dbName, OpenMode.ReadWrite);\n\n const countProperties = (filter?: PropertyStore.PropertyFilter) => {\n let count = 0;\n propertyDb.forAllProperties(() => {\n ++count;\n }, filter);\n return count;\n };\n const testJson = {\n a: \"test string\",\n num: 20,\n b: true,\n };\n\n const string1 = \"this is a test\";\n const string2 = \"this is another test\";\n const blob1 = new Uint8Array([2, 33, 23, 0, 202]);\n await propertyDb.saveProperty(\"test-string\", string1);\n await propertyDb.saveProperty(\"test-string2\", string2);\n await propertyDb.saveProperty(\"test-obj\", testJson);\n await propertyDb.saveProperty(\"is-false\", false);\n await propertyDb.saveProperty(\"is-true\", true);\n await propertyDb.saveProperty(\"is-100\", 100);\n await propertyDb.saveProperty(\"is-2.3\", 2.3);\n await propertyDb.saveProperty(\"is-blob\", blob1);\n propertyDb.saveChanges();\n expect(countProperties()).equal(8);\n\n expect(propertyDb.getString(\"test-string\")).equals(string1);\n expect(propertyDb.getString(\"test-string2\")).equals(string2);\n expect(propertyDb.getObject(\"test-obj\")).deep.equal(testJson);\n expect(propertyDb.getBoolean(\"is-false\")).false;\n expect(propertyDb.getBoolean(\"is-true\")).true;\n expect(propertyDb.getNumber(\"is-100\")).equal(100);\n expect(propertyDb.getNumber(\"is-2.3\")).equal(2.3);\n expect(propertyDb.getBlob(\"is-blob\")).deep.equal(blob1);\n\n const updated = \"this is a different string\";\n await propertyDb.saveProperty(\"test-string\", updated);\n expect(propertyDb.getString(\"test-string\")).equals(updated);\n\n expect(propertyDb.getNumber(\"test-string\")).undefined;\n expect(propertyDb.getString(\"not there\")).undefined;\n expect(propertyDb.getBlob(\"not there\")).undefined;\n expect(propertyDb.getNumber(\"not there\")).undefined;\n expect(propertyDb.getBlob(\"not there\")).undefined;\n expect(propertyDb.getNumber(\"not there\", 50)).equal(50);\n\n expect(countProperties({ value: \"test%\", valueCompare: \"LIKE\" })).equal(3);\n await propertyDb.deleteProperty(\"test-string\");\n expect(countProperties()).equal(7);\n expect(countProperties({ value: \"test%\", valueCompare: \"LIKE\" })).equal(2);\n\n propertyDb.closeDb(true);\n });\n});\n"]}
@@ -11,6 +11,7 @@ import { HubMock } from "../internal/HubMock";
11
11
  import { KnownTestLocations } from "./KnownTestLocations";
12
12
  import * as chai from "chai";
13
13
  import { TestUtils } from "./TestUtils";
14
+ import { EditTxn, withEditTxn } from "../EditTxn";
14
15
  const schemas = {
15
16
  /** Base schema v01.00.00 with classes A, C, D */
16
17
  v01x00x00: `<?xml version="1.0" encoding="UTF-8"?>
@@ -166,12 +167,13 @@ describe("SquashSchemaAndDataChanges", () => {
166
167
  const createModelAndCategory = async (db) => {
167
168
  const modelCode = IModelTestUtils.getUniqueModelCode(db, "DrawingModel");
168
169
  await db.locks.acquireLocks({ shared: IModel.dictionaryId });
169
- const [, newDrawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(db, modelCode);
170
- const newDrawingCategoryId = DrawingCategory.insert(db, IModel.dictionaryId, "DrawingCategory", new SubCategoryAppearance());
171
- db.saveChanges();
172
- return [newDrawingModelId, newDrawingCategoryId];
170
+ return withEditTxn(db, (txn) => {
171
+ const [, newDrawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);
172
+ const newDrawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, "DrawingCategory", new SubCategoryAppearance());
173
+ return [newDrawingModelId, newDrawingCategoryId];
174
+ });
173
175
  };
174
- const insertElement = (briefcase, className, properties) => {
176
+ const insertElement = (txn, className, properties) => {
175
177
  const elementProps = {
176
178
  classFullName: className,
177
179
  model: drawingModelId,
@@ -179,8 +181,8 @@ describe("SquashSchemaAndDataChanges", () => {
179
181
  code: Code.createEmpty(),
180
182
  ...properties,
181
183
  };
182
- const element = briefcase.elements.createElement(elementProps);
183
- return briefcase.elements.insertElement(element.toJSON());
184
+ const element = txn.iModel.elements.createElement(elementProps);
185
+ return txn.insertElement(element.toJSON());
184
186
  };
185
187
  before(async () => {
186
188
  HubMock.startup("MergeSchemaAndDataChanges", KnownTestLocations.outputDir);
@@ -191,7 +193,6 @@ describe("SquashSchemaAndDataChanges", () => {
191
193
  iModelId = await HubWrappers.createIModel("user1", HubMock.iTwinId, `Test-${Guid.createValue()}`);
192
194
  imodel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId });
193
195
  imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
194
- imodel.saveChanges();
195
196
  [drawingModelId, drawingCategoryId] = await createModelAndCategory(imodel);
196
197
  await imodel.importSchemaStrings([schemas.v01x00x00, schemas.v01x00x01AddPropC2]);
197
198
  await imodel.pushChanges({ description: "create model and category and imported schemas" });
@@ -205,22 +206,29 @@ describe("SquashSchemaAndDataChanges", () => {
205
206
  await TestUtils.shutdownBackend();
206
207
  await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost
207
208
  });
208
- it("should throw error if tried to import schema while unsaved changes are present", async () => {
209
+ it("should allow schema import while an EditTxn is active", async () => {
209
210
  await imodel.locks.acquireLocks({ shared: drawingModelId });
210
- insertElement(imodel, "TestDomain:C", {
211
- propA: "local_value_a",
212
- propC: "local_value_c",
213
- });
214
- await chai.expect(imodel.importSchemaStrings([schemas.v01x00x02MovePropCToA])).to.be.rejectedWith("Cannot import schemas with unsaved changes when useSemanticRebase flag is on");
215
- await imodel.discardChanges();
211
+ const txn = new EditTxn(imodel, "schema and data changes unsaved state");
212
+ txn.start();
213
+ try {
214
+ txn.saveChanges("prepare for schema import");
215
+ await imodel.importSchemaStrings([schemas.v01x00x02MovePropCToA]);
216
+ chai.assert(imodel.containsClass("TestDomain:C"));
217
+ }
218
+ finally {
219
+ if (txn.isActive)
220
+ txn.end("abandon");
221
+ }
216
222
  });
217
223
  it("should squash schema and data changes if useSemanticRebase flag is on", async () => {
218
224
  await imodel.locks.acquireLocks({ shared: drawingModelId });
219
- insertElement(imodel, "TestDomain:C", {
225
+ const txn = new EditTxn(imodel, "squash schema and data changes");
226
+ txn.start();
227
+ insertElement(txn, "TestDomain:C", {
220
228
  propA: "local_value_a",
221
229
  propC: "local_value_c",
222
230
  });
223
- imodel.saveChanges("local data change");
231
+ txn.saveChanges("local data change");
224
232
  await imodel.importSchemaStrings([schemas.v01x00x02MovePropCToA]); // transforming data change
225
233
  const lastTxnProps = imodel.txns.getLastSavedTxnProps();
226
234
  chai.assert(lastTxnProps !== undefined);
@@ -235,7 +243,8 @@ describe("SquashSchemaAndDataChanges", () => {
235
243
  chai.assert(thirdLastTxnProps !== undefined);
236
244
  chai.assert(thirdLastTxnProps?.type === "Data");
237
245
  chai.assert(thirdLastTxnProps?.prevId === undefined);
238
- await imodel.discardChanges();
246
+ if (txn.isActive)
247
+ txn.end("abandon");
239
248
  });
240
249
  });
241
250
  //# sourceMappingURL=SquashSchemaAndDataChanges.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SquashSchemaAndDataChanges.test.js","sourceRoot":"","sources":["../../../src/test/SquashSchemaAndDataChanges.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 { Guid, Id64String } from \"@itwin/core-bentley\";\nimport { BriefcaseDb } from \"../IModelDb\";\nimport { HubWrappers, IModelTestUtils } from \"./IModelTestUtils\";\nimport { ChannelControl } from \"../ChannelControl\";\nimport { Code, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { DrawingCategory } from \"../Category\";\nimport { HubMock } from \"../internal/HubMock\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\nimport * as chai from \"chai\";\nimport { TestUtils } from \"./TestUtils\";\n\nconst schemas = {\n /** Base schema v01.00.00 with classes A, C, D */\n v01x00x00: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 - Adds PropC2 to class C (trivial additive change) */\n v01x00x01AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Adds PropD2 to class D (trivial additive change) */\n v01x00x02AddPropD2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Moves PropC from C to A (requires data transformation) on top of v01.00.01 */\n v01x00x02MovePropCToA: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.03 - Builds on top of v01.00.02 and in addition moves PropD to base, so we can have incoming and local transforming changes */\n v01x00x03MovePropCAndD: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (same version) */\n v01x00x01AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (higher version) */\n v01x00x02AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC2 (higher version, different type) */\n v01x00x02AddPropC2Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"int\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n};\n\ndescribe(\"SquashSchemaAndDataChanges\", () => {\n let imodel: BriefcaseDb;\n let iModelId: string;\n let drawingModelId: string;\n let drawingCategoryId: string;\n\n const createModelAndCategory = async (db: BriefcaseDb) => {\n const modelCode = IModelTestUtils.getUniqueModelCode(db, \"DrawingModel\");\n await db.locks.acquireLocks({ shared: IModel.dictionaryId });\n const [, newDrawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(db, modelCode);\n const newDrawingCategoryId = DrawingCategory.insert(\n db,\n IModel.dictionaryId,\n \"DrawingCategory\",\n new SubCategoryAppearance()\n );\n db.saveChanges();\n return [newDrawingModelId, newDrawingCategoryId];\n };\n\n const insertElement = (\n briefcase: BriefcaseDb,\n className: string,\n properties: Record<string, any>\n ): Id64String => {\n const elementProps: GeometricElementProps = {\n classFullName: className,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n ...properties,\n };\n const element = briefcase.elements.createElement(elementProps);\n return briefcase.elements.insertElement(element.toJSON());\n }\n\n before(async () => {\n HubMock.startup(\"MergeSchemaAndDataChanges\", KnownTestLocations.outputDir);\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n beforeEach(async () => {\n iModelId = await HubWrappers.createIModel(\"user1\", HubMock.iTwinId, `Test-${Guid.createValue()}`);\n\n imodel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n imodel.saveChanges();\n [drawingModelId, drawingCategoryId] = await createModelAndCategory(imodel);\n await imodel.importSchemaStrings([schemas.v01x00x00, schemas.v01x00x01AddPropC2]);\n await imodel.pushChanges({ description: \"create model and category and imported schemas\" });\n });\n\n afterEach(async () => {\n imodel.close();\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n });\n\n after(async () => {\n HubMock.shutdown();\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n });\n\n it(\"should throw error if tried to import schema while unsaved changes are present\", async () => {\n await imodel.locks.acquireLocks({ shared: drawingModelId });\n insertElement(imodel, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n\n await chai.expect(imodel.importSchemaStrings([schemas.v01x00x02MovePropCToA])).to.be.rejectedWith(\"Cannot import schemas with unsaved changes when useSemanticRebase flag is on\");\n await imodel.discardChanges();\n });\n\n it(\"should squash schema and data changes if useSemanticRebase flag is on\", async () => {\n await imodel.locks.acquireLocks({ shared: drawingModelId });\n insertElement(imodel, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n imodel.saveChanges(\"local data change\");\n await imodel.importSchemaStrings([schemas.v01x00x02MovePropCToA]); // transforming data change\n\n const lastTxnProps = imodel.txns.getLastSavedTxnProps();\n chai.assert(lastTxnProps !== undefined);\n chai.assert(lastTxnProps?.type === \"Schema\");\n chai.assert(lastTxnProps?.prevId !== undefined);\n // both schema and data(migration) changes are merged into single txn\n\n const secondLastTxnProps = imodel.txns.getTxnProps(lastTxnProps.prevId);\n chai.assert(secondLastTxnProps !== undefined);\n chai.assert(secondLastTxnProps?.type === \"Ddl\");\n chai.assert(secondLastTxnProps?.prevId !== undefined);\n\n const thirdLastTxnProps = imodel.txns.getTxnProps(secondLastTxnProps.prevId);\n chai.assert(thirdLastTxnProps !== undefined);\n chai.assert(thirdLastTxnProps?.type === \"Data\");\n chai.assert(thirdLastTxnProps?.prevId === undefined);\n\n await imodel.discardChanges();\n });\n});"]}
1
+ {"version":3,"file":"SquashSchemaAndDataChanges.test.js","sourceRoot":"","sources":["../../../src/test/SquashSchemaAndDataChanges.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 { Guid, Id64String } from \"@itwin/core-bentley\";\nimport { BriefcaseDb } from \"../IModelDb\";\nimport { HubWrappers, IModelTestUtils } from \"./IModelTestUtils\";\nimport { ChannelControl } from \"../ChannelControl\";\nimport { Code, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { DrawingCategory } from \"../Category\";\nimport { HubMock } from \"../internal/HubMock\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\nimport * as chai from \"chai\";\nimport { TestUtils } from \"./TestUtils\";\nimport { EditTxn, withEditTxn } from \"../EditTxn\";\n\nconst schemas = {\n /** Base schema v01.00.00 with classes A, C, D */\n v01x00x00: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 - Adds PropC2 to class C (trivial additive change) */\n v01x00x01AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Adds PropD2 to class D (trivial additive change) */\n v01x00x02AddPropD2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Moves PropC from C to A (requires data transformation) on top of v01.00.01 */\n v01x00x02MovePropCToA: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.03 - Builds on top of v01.00.02 and in addition moves PropD to base, so we can have incoming and local transforming changes */\n v01x00x03MovePropCAndD: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (same version) */\n v01x00x01AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (higher version) */\n v01x00x02AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC2 (higher version, different type) */\n v01x00x02AddPropC2Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"int\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n};\n\ndescribe(\"SquashSchemaAndDataChanges\", () => {\n let imodel: BriefcaseDb;\n let iModelId: string;\n let drawingModelId: string;\n let drawingCategoryId: string;\n\n const createModelAndCategory = async (db: BriefcaseDb) => {\n const modelCode = IModelTestUtils.getUniqueModelCode(db, \"DrawingModel\");\n await db.locks.acquireLocks({ shared: IModel.dictionaryId });\n return withEditTxn(db, (txn) => {\n const [, newDrawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\n const newDrawingCategoryId = DrawingCategory.insert(\n txn,\n IModel.dictionaryId,\n \"DrawingCategory\",\n new SubCategoryAppearance()\n );\n return [newDrawingModelId, newDrawingCategoryId] as const;\n });\n };\n\n const insertElement = (\n txn: EditTxn,\n className: string,\n properties: Record<string, any>\n ): Id64String => {\n const elementProps: GeometricElementProps = {\n classFullName: className,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n ...properties,\n };\n const element = txn.iModel.elements.createElement(elementProps);\n return txn.insertElement(element.toJSON());\n }\n\n before(async () => {\n HubMock.startup(\"MergeSchemaAndDataChanges\", KnownTestLocations.outputDir);\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n beforeEach(async () => {\n iModelId = await HubWrappers.createIModel(\"user1\", HubMock.iTwinId, `Test-${Guid.createValue()}`);\n\n imodel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n [drawingModelId, drawingCategoryId] = await createModelAndCategory(imodel);\n await imodel.importSchemaStrings([schemas.v01x00x00, schemas.v01x00x01AddPropC2]);\n await imodel.pushChanges({ description: \"create model and category and imported schemas\" });\n });\n\n afterEach(async () => {\n imodel.close();\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n });\n\n after(async () => {\n HubMock.shutdown();\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n });\n\n it(\"should allow schema import while an EditTxn is active\", async () => {\n await imodel.locks.acquireLocks({ shared: drawingModelId });\n const txn = new EditTxn(imodel, \"schema and data changes unsaved state\");\n txn.start();\n try {\n txn.saveChanges(\"prepare for schema import\");\n await imodel.importSchemaStrings([schemas.v01x00x02MovePropCToA]);\n chai.assert(imodel.containsClass(\"TestDomain:C\"));\n } finally {\n if (txn.isActive)\n txn.end(\"abandon\");\n }\n });\n\n it(\"should squash schema and data changes if useSemanticRebase flag is on\", async () => {\n await imodel.locks.acquireLocks({ shared: drawingModelId });\n const txn = new EditTxn(imodel, \"squash schema and data changes\");\n txn.start();\n insertElement(txn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n txn.saveChanges(\"local data change\");\n await imodel.importSchemaStrings([schemas.v01x00x02MovePropCToA]); // transforming data change\n\n const lastTxnProps = imodel.txns.getLastSavedTxnProps();\n chai.assert(lastTxnProps !== undefined);\n chai.assert(lastTxnProps?.type === \"Schema\");\n chai.assert(lastTxnProps?.prevId !== undefined);\n // both schema and data(migration) changes are merged into single txn\n\n const secondLastTxnProps = imodel.txns.getTxnProps(lastTxnProps.prevId);\n chai.assert(secondLastTxnProps !== undefined);\n chai.assert(secondLastTxnProps?.type === \"Ddl\");\n chai.assert(secondLastTxnProps?.prevId !== undefined);\n\n const thirdLastTxnProps = imodel.txns.getTxnProps(secondLastTxnProps.prevId);\n chai.assert(thirdLastTxnProps !== undefined);\n chai.assert(thirdLastTxnProps?.type === \"Data\");\n chai.assert(thirdLastTxnProps?.prevId === undefined);\n\n if (txn.isActive)\n txn.end(\"abandon\");\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TestChangeSetUtility.d.ts","sourceRoot":"","sources":["../../../src/test/TestChangeSetUtility.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAmC,MAAM,iBAAiB,CAAC;AAI/E,oDAAoD;AACpD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAE9B,OAAO,EAAG,UAAU,CAAC;IACrB,QAAQ,EAAG,UAAU,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,WAAW,CAAU;gBAEjB,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM;YAK1C,YAAY;YAKZ,eAAe;YAKf,eAAe;IAM7B;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAmBxC,iBAAiB;IAOjB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/C"}
1
+ {"version":3,"file":"TestChangeSetUtility.d.ts","sourceRoot":"","sources":["../../../src/test/TestChangeSetUtility.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAmC,MAAM,iBAAiB,CAAC;AAK/E,oDAAoD;AACpD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAE9B,OAAO,EAAG,UAAU,CAAC;IACrB,QAAQ,EAAG,UAAU,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,WAAW,CAAU;gBAEjB,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM;YAK1C,YAAY;YAMZ,eAAe;YAMf,eAAe;IAO7B;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAmBxC,iBAAiB;IAOjB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/C"}
@@ -6,6 +6,7 @@ import { ColorDef, IModel, SubCategoryAppearance } from "@itwin/core-common";
6
6
  import { ChannelControl, SpatialCategory } from "../core-backend";
7
7
  import { HubMock } from "../internal/HubMock";
8
8
  import { HubWrappers, IModelTestUtils } from "./IModelTestUtils";
9
+ import { withEditTxn } from "../EditTxn";
9
10
  /** Test utility to push an iModel and ChangeSets */
10
11
  export class TestChangeSetUtility {
11
12
  _iModelName;
@@ -20,17 +21,20 @@ export class TestChangeSetUtility {
20
21
  this._iModelName = IModelTestUtils.generateUniqueName(iModelName); // Generate a unique name for the iModel (so that this test can be run simultaneously by multiple users+hosts simultaneously)
21
22
  }
22
23
  async addTestModel() {
23
- [, this._modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(this._iModel, IModelTestUtils.getUniqueModelCode(this._iModel, "TestPhysicalModel"), true);
24
- this._iModel.saveChanges("Added test model");
24
+ withEditTxn(this._iModel, "Added test model", (txn) => {
25
+ [, this._modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, IModelTestUtils.getUniqueModelCode(txn.iModel, "TestPhysicalModel"), true);
26
+ });
25
27
  }
26
28
  async addTestCategory() {
27
- this._categoryId = SpatialCategory.insert(this._iModel, IModel.dictionaryId, "TestSpatialCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
28
- this._iModel.saveChanges("Added test category");
29
+ withEditTxn(this._iModel, "Added test category", (txn) => {
30
+ this._categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, "TestSpatialCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
31
+ });
29
32
  }
30
33
  async addTestElements() {
31
- this._iModel.elements.insertElement(IModelTestUtils.createPhysicalObject(this._iModel, this._modelId, this._categoryId).toJSON());
32
- this._iModel.elements.insertElement(IModelTestUtils.createPhysicalObject(this._iModel, this._modelId, this._categoryId).toJSON());
33
- this._iModel.saveChanges("Added test elements");
34
+ withEditTxn(this._iModel, "Added test elements", (txn) => {
35
+ txn.insertElement(IModelTestUtils.createPhysicalObject(txn.iModel, this._modelId, this._categoryId).toJSON());
36
+ txn.insertElement(IModelTestUtils.createPhysicalObject(txn.iModel, this._modelId, this._categoryId).toJSON());
37
+ });
34
38
  }
35
39
  /** Create a new iModel, populate it, push the changes and returns the opened db.
36
40
  * Uses the iTwinId from HubMock.
@@ -1 +1 @@
1
- {"version":3,"file":"TestChangeSetUtility.js","sourceRoot":"","sources":["../../../src/test/TestChangeSetUtility.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 { AccessToken, GuidString } from \"@itwin/core-bentley\";\nimport { ColorDef, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { BriefcaseDb, ChannelControl, SpatialCategory } from \"../core-backend\";\nimport { HubMock } from \"../internal/HubMock\";\nimport { HubWrappers, IModelTestUtils } from \"./IModelTestUtils\";\n\n/** Test utility to push an iModel and ChangeSets */\nexport class TestChangeSetUtility {\n private readonly _iModelName: string;\n\n public iTwinId!: GuidString;\n public iModelId!: GuidString;\n private _iModel!: BriefcaseDb;\n private _accessToken: AccessToken;\n\n private _modelId!: string;\n private _categoryId!: string;\n\n constructor(accessToken: AccessToken, iModelName: string) {\n this._accessToken = accessToken;\n this._iModelName = IModelTestUtils.generateUniqueName(iModelName); // Generate a unique name for the iModel (so that this test can be run simultaneously by multiple users+hosts simultaneously)\n }\n\n private async addTestModel(): Promise<void> {\n [, this._modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(this._iModel, IModelTestUtils.getUniqueModelCode(this._iModel, \"TestPhysicalModel\"), true);\n this._iModel.saveChanges(\"Added test model\");\n }\n\n private async addTestCategory(): Promise<void> {\n this._categoryId = SpatialCategory.insert(this._iModel, IModel.dictionaryId, \"TestSpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n this._iModel.saveChanges(\"Added test category\");\n }\n\n private async addTestElements(): Promise<void> {\n this._iModel.elements.insertElement(IModelTestUtils.createPhysicalObject(this._iModel, this._modelId, this._categoryId).toJSON());\n this._iModel.elements.insertElement(IModelTestUtils.createPhysicalObject(this._iModel, this._modelId, this._categoryId).toJSON());\n this._iModel.saveChanges(\"Added test elements\");\n }\n\n /** Create a new iModel, populate it, push the changes and returns the opened db.\n * Uses the iTwinId from HubMock.\n */\n public async createTestIModel(): Promise<BriefcaseDb> {\n this.iTwinId = HubMock.iTwinId;\n\n // Re-create iModel on iModelHub\n this.iModelId = await HubWrappers.recreateIModel({ accessToken: this._accessToken, iTwinId: this.iTwinId, iModelName: this._iModelName, noLocks: true });\n\n this._iModel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: this._accessToken, iTwinId: this.iTwinId, iModelId: this.iModelId });\n this._iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Populate sample data\n await this.addTestModel();\n await this.addTestCategory();\n await this.addTestElements();\n\n // Push changes to the hub\n await this._iModel.pushChanges({ accessToken: this._accessToken, description: \"Setup test model\" });\n return this._iModel;\n }\n\n public async pushTestChangeSet() {\n if (!this._iModel)\n throw new Error(\"Must first call createTestIModel\");\n await this.addTestElements();\n await this._iModel.pushChanges({ accessToken: this._accessToken, description: \"Added test elements\" });\n }\n\n public async deleteTestIModel(): Promise<void> {\n if (!this._iModel)\n throw new Error(\"Must first call createTestIModel\");\n await HubWrappers.closeAndDeleteBriefcaseDb(this._accessToken, this._iModel);\n await HubMock.deleteIModel({ accessToken: this._accessToken, iTwinId: this.iTwinId, iModelId: this.iModelId });\n }\n}\n"]}
1
+ {"version":3,"file":"TestChangeSetUtility.js","sourceRoot":"","sources":["../../../src/test/TestChangeSetUtility.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 { AccessToken, GuidString } from \"@itwin/core-bentley\";\nimport { ColorDef, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { BriefcaseDb, ChannelControl, SpatialCategory } from \"../core-backend\";\nimport { HubMock } from \"../internal/HubMock\";\nimport { HubWrappers, IModelTestUtils } from \"./IModelTestUtils\";\nimport { withEditTxn } from \"../EditTxn\";\n\n/** Test utility to push an iModel and ChangeSets */\nexport class TestChangeSetUtility {\n private readonly _iModelName: string;\n\n public iTwinId!: GuidString;\n public iModelId!: GuidString;\n private _iModel!: BriefcaseDb;\n private _accessToken: AccessToken;\n\n private _modelId!: string;\n private _categoryId!: string;\n\n constructor(accessToken: AccessToken, iModelName: string) {\n this._accessToken = accessToken;\n this._iModelName = IModelTestUtils.generateUniqueName(iModelName); // Generate a unique name for the iModel (so that this test can be run simultaneously by multiple users+hosts simultaneously)\n }\n\n private async addTestModel(): Promise<void> {\n withEditTxn(this._iModel, \"Added test model\", (txn) => {\n [, this._modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, IModelTestUtils.getUniqueModelCode(txn.iModel, \"TestPhysicalModel\"), true);\n });\n }\n\n private async addTestCategory(): Promise<void> {\n withEditTxn(this._iModel, \"Added test category\", (txn) => {\n this._categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"TestSpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n });\n }\n\n private async addTestElements(): Promise<void> {\n withEditTxn(this._iModel, \"Added test elements\", (txn) => {\n txn.insertElement(IModelTestUtils.createPhysicalObject(txn.iModel, this._modelId, this._categoryId).toJSON());\n txn.insertElement(IModelTestUtils.createPhysicalObject(txn.iModel, this._modelId, this._categoryId).toJSON());\n });\n }\n\n /** Create a new iModel, populate it, push the changes and returns the opened db.\n * Uses the iTwinId from HubMock.\n */\n public async createTestIModel(): Promise<BriefcaseDb> {\n this.iTwinId = HubMock.iTwinId;\n\n // Re-create iModel on iModelHub\n this.iModelId = await HubWrappers.recreateIModel({ accessToken: this._accessToken, iTwinId: this.iTwinId, iModelName: this._iModelName, noLocks: true });\n\n this._iModel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: this._accessToken, iTwinId: this.iTwinId, iModelId: this.iModelId });\n this._iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Populate sample data\n await this.addTestModel();\n await this.addTestCategory();\n await this.addTestElements();\n\n // Push changes to the hub\n await this._iModel.pushChanges({ accessToken: this._accessToken, description: \"Setup test model\" });\n return this._iModel;\n }\n\n public async pushTestChangeSet() {\n if (!this._iModel)\n throw new Error(\"Must first call createTestIModel\");\n await this.addTestElements();\n await this._iModel.pushChanges({ accessToken: this._accessToken, description: \"Added test elements\" });\n }\n\n public async deleteTestIModel(): Promise<void> {\n if (!this._iModel)\n throw new Error(\"Must first call createTestIModel\");\n await HubWrappers.closeAndDeleteBriefcaseDb(this._accessToken, this._iModel);\n await HubMock.deleteIModel({ accessToken: this._accessToken, iTwinId: this.iTwinId, iModelId: this.iModelId });\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { SaveChangesArgs } from "@itwin/core-common";
2
+ import { EditTxn } from "../EditTxn";
3
+ import type { IModelDb } from "../IModelDb";
4
+ export declare function withEditTxn<T>(iModel: IModelDb, fn: (txn: EditTxn) => T): T;
5
+ export declare function withEditTxn<T>(iModel: IModelDb, saveArgs: string | SaveChangesArgs, fn: (txn: EditTxn) => T): T;
6
+ export declare function withEditTxn<T>(iModel: IModelDb, fn: (txn: EditTxn) => Promise<T>): Promise<T>;
7
+ export declare function withEditTxn<T>(iModel: IModelDb, saveArgs: string | SaveChangesArgs, fn: (txn: EditTxn) => Promise<T>): Promise<T>;
8
+ //# sourceMappingURL=TestEditTxn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestEditTxn.d.ts","sourceRoot":"","sources":["../../../src/test/TestEditTxn.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7E,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;AACjH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/F,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { EditTxn } from "../EditTxn";
6
+ export function withEditTxn(iModel, saveArgsOrFn, maybeFn) {
7
+ const saveArgs = "function" === typeof saveArgsOrFn ? undefined : saveArgsOrFn;
8
+ const fn = "function" === typeof saveArgsOrFn ? saveArgsOrFn : maybeFn;
9
+ if (undefined === fn)
10
+ throw new Error("withEditTxn requires a callback");
11
+ const txn = new EditTxn(iModel, "test");
12
+ txn.start();
13
+ try {
14
+ const result = fn(txn);
15
+ if (result instanceof Promise) {
16
+ return result.then((value) => {
17
+ txn.end("save", saveArgs);
18
+ return value;
19
+ }, (err) => {
20
+ if (txn.isActive)
21
+ txn.end("abandon");
22
+ throw err;
23
+ });
24
+ }
25
+ txn.end("save", saveArgs);
26
+ return result;
27
+ }
28
+ catch (err) {
29
+ if (txn.isActive)
30
+ txn.end("abandon");
31
+ throw err;
32
+ }
33
+ }
34
+ //# sourceMappingURL=TestEditTxn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestEditTxn.js","sourceRoot":"","sources":["../../../src/test/TestEditTxn.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAG/F,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAOrC,MAAM,UAAU,WAAW,CAAI,MAAgB,EAAE,YAA2E,EAAE,OAA0C;IACtK,MAAM,QAAQ,GAAG,UAAU,KAAK,OAAO,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAC/E,MAAM,EAAE,GAAG,UAAU,KAAK,OAAO,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IAEvE,IAAI,SAAS,KAAK,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAErD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,GAAG,CAAC,KAAK,EAAE,CAAC;IAEZ,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC1B,OAAO,KAAK,CAAC;YACf,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;gBACT,IAAI,GAAG,CAAC,QAAQ;oBACd,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAErB,MAAM,GAAG,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,CAAC,QAAQ;YACd,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAErB,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,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 { SaveChangesArgs } from \"@itwin/core-common\";\nimport { EditTxn } from \"../EditTxn\";\nimport type { IModelDb } from \"../IModelDb\";\n\nexport function withEditTxn<T>(iModel: IModelDb, fn: (txn: EditTxn) => T): T;\nexport function withEditTxn<T>(iModel: IModelDb, saveArgs: string | SaveChangesArgs, fn: (txn: EditTxn) => T): T;\nexport function withEditTxn<T>(iModel: IModelDb, fn: (txn: EditTxn) => Promise<T>): Promise<T>;\nexport function withEditTxn<T>(iModel: IModelDb, saveArgs: string | SaveChangesArgs, fn: (txn: EditTxn) => Promise<T>): Promise<T>;\nexport function withEditTxn<T>(iModel: IModelDb, saveArgsOrFn: string | SaveChangesArgs | ((txn: EditTxn) => T | Promise<T>), maybeFn?: (txn: EditTxn) => T | Promise<T>): T | Promise<T> {\n const saveArgs = \"function\" === typeof saveArgsOrFn ? undefined : saveArgsOrFn;\n const fn = \"function\" === typeof saveArgsOrFn ? saveArgsOrFn : maybeFn;\n\n if (undefined === fn)\n throw new Error(\"withEditTxn requires a callback\");\n\n const txn = new EditTxn(iModel, \"test\");\n txn.start();\n\n try {\n const result = fn(txn);\n if (result instanceof Promise) {\n return result.then((value) => {\n txn.end(\"save\", saveArgs);\n return value;\n }, (err) => {\n if (txn.isActive)\n txn.end(\"abandon\");\n\n throw err;\n });\n }\n\n txn.end(\"save\", saveArgs);\n return result;\n } catch (err) {\n if (txn.isActive)\n txn.end(\"abandon\");\n\n throw err;\n }\n}\n\n"]}
@@ -20,6 +20,7 @@ export declare class DisableNativeAssertions implements Disposable {
20
20
  dispose(): void;
21
21
  }
22
22
  export declare class TestUtils {
23
+ private static shouldLogToConsole;
23
24
  static getCacheDir(fallback?: string | undefined): string | undefined;
24
25
  /** Handles the startup of IModelHost.
25
26
  * The provided config is used and will override any of the default values used in this method.
@@ -1 +1 @@
1
- {"version":3,"file":"TestUtils.d.ts","sourceRoot":"","sources":["../../../src/test/TestUtils.ts"],"names":[],"mappings":"AASA,OAAO,EAAc,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG9D,mCAAmC;AACnC,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAO;gBACT,KAAK,EAAE,MAAM;IAKlB,GAAG;CAMX;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,UAAU;IACxD,OAAO,CAAC,OAAO,CAAqD;;IAM7D,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAQ/B,qGAAqG;IAC9F,OAAO,IAAI,IAAI;CAGvB;AAED,qBAAa,SAAS;WACN,WAAW,CAAC,QAAQ,GAAE,MAAM,GAAG,SAAqB;IAOlE;;;;;;OAMG;WACiB,YAAY,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;WAOvD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;WAItC,YAAY;IAK1B,OAAO,CAAC,MAAM,CAAC,kBAAkB;WAUnB,mBAAmB;WAInB,mBAAmB;CAGlC"}
1
+ {"version":3,"file":"TestUtils.d.ts","sourceRoot":"","sources":["../../../src/test/TestUtils.ts"],"names":[],"mappings":"AASA,OAAO,EAAc,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG9D,mCAAmC;AACnC,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAO;gBACT,KAAK,EAAE,MAAM;IAKlB,GAAG;CAMX;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,UAAU;IACxD,OAAO,CAAC,OAAO,CAAqD;;IAM7D,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAQ/B,qGAAqG;IAC9F,OAAO,IAAI,IAAI;CAGvB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,kBAAkB;WAInB,WAAW,CAAC,QAAQ,GAAE,MAAM,GAAG,SAAqB;IAOlE;;;;;;OAMG;WACiB,YAAY,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;WAQvD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;WAItC,YAAY;IAQ1B,OAAO,CAAC,MAAM,CAAC,kBAAkB;WAUnB,mBAAmB;WAInB,mBAAmB;CAGlC"}
@@ -46,6 +46,9 @@ export class DisableNativeAssertions {
46
46
  }
47
47
  }
48
48
  export class TestUtils {
49
+ static shouldLogToConsole() {
50
+ return process.env.ITWINJS_CORE_BACKEND_TEST_LOG_TO_CONSOLE === "1";
51
+ }
49
52
  static getCacheDir(fallback = undefined) {
50
53
  if (ProcessDetector.isMobileAppBackend) {
51
54
  return undefined; // Let the native side handle the cache.
@@ -63,13 +66,17 @@ export class TestUtils {
63
66
  const cfg = config ?? {};
64
67
  cfg.cacheDir = TestUtils.getCacheDir(cfg.cacheDir);
65
68
  cfg.allowSharedChannel ??= false; // Override default to test shared channel enforcement. Remove in version 5.0.
69
+ cfg.implicitWriteEnforcement ??= "throw";
66
70
  await IModelHost.startup(cfg);
67
71
  }
68
72
  static async shutdownBackend() {
69
73
  return IModelHost.shutdown();
70
74
  }
71
75
  static setupLogging() {
72
- Logger.initializeToConsole();
76
+ if (TestUtils.shouldLogToConsole())
77
+ Logger.initializeToConsole();
78
+ else
79
+ Logger.initialize();
73
80
  Logger.setLevelDefault(LogLevel.Error);
74
81
  }
75
82
  static initDebugLogLevels(reset) {
@@ -1 +1 @@
1
- {"version":3,"file":"TestUtils.js","sourceRoot":"","sources":["../../../src/test/TestUtils.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 * as path from \"path\";\nimport { IModelJsNative, NativeLoggerCategory } from \"@bentley/imodeljs-native\";\nimport { BentleyLoggerCategory, Logger, LogLevel, ProcessDetector } from \"@itwin/core-bentley\";\nimport { BackendLoggerCategory } from \"../BackendLoggerCategory\";\nimport { IModelHost, IModelHostOptions } from \"../IModelHost\";\nimport { IModelNative } from \"../internal/NativePlatform\";\n\n/** Class for simple test timing */\nexport class Timer {\n private _label: string;\n private _start: Date;\n constructor(label: string) {\n this._label = `\\t${label}`;\n this._start = new Date();\n }\n\n public end() {\n const stop = new Date();\n const elapsed = stop.getTime() - this._start.getTime();\n // eslint-disable-next-line no-console\n console.log(`${this._label}: ${elapsed}ms`);\n }\n}\n\n/**\n * Disables native code assertions from firing. This can be used by tests that intentionally\n * test failing operations. If those failing operations raise assertions in native code, the test\n * would fail unexpectedly in a debug build. In that case the native code assertions can be disabled with\n * this class.\n */\nexport class DisableNativeAssertions implements Disposable {\n private _native: IModelJsNative.DisableNativeAssertions | undefined;\n\n constructor() {\n this._native = new IModelNative.platform.DisableNativeAssertions();\n }\n\n public [Symbol.dispose](): void {\n if (!this._native)\n return;\n\n this._native.dispose();\n this._native = undefined;\n }\n\n /** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [Symbol.dispose] instead. */\n public dispose(): void {\n this[Symbol.dispose]();\n }\n}\n\nexport class TestUtils {\n public static getCacheDir(fallback: string | undefined = undefined) {\n if (ProcessDetector.isMobileAppBackend) {\n return undefined; // Let the native side handle the cache.\n }\n return fallback ?? path.join(__dirname, \".cache\"); // Set the cache dir to be under the lib directory.\n }\n\n /** Handles the startup of IModelHost.\n * The provided config is used and will override any of the default values used in this method.\n *\n * The default includes:\n * - cacheDir = path.join(__dirname, \".cache\")\n * - allowSharedChannel = false;\n */\n public static async startBackend(config?: IModelHostOptions): Promise<void> {\n const cfg = config ?? {};\n cfg.cacheDir = TestUtils.getCacheDir(cfg.cacheDir);\n cfg.allowSharedChannel ??= false; // Override default to test shared channel enforcement. Remove in version 5.0.\n await IModelHost.startup(cfg);\n }\n\n public static async shutdownBackend(): Promise<void> {\n return IModelHost.shutdown();\n }\n\n public static setupLogging() {\n Logger.initializeToConsole();\n Logger.setLevelDefault(LogLevel.Error);\n }\n\n private static initDebugLogLevels(reset?: boolean) {\n Logger.setLevelDefault(reset ? LogLevel.Error : LogLevel.Warning);\n Logger.setLevel(BentleyLoggerCategory.Performance, reset ? LogLevel.Error : LogLevel.Info);\n Logger.setLevel(BackendLoggerCategory.IModelDb, reset ? LogLevel.Error : LogLevel.Trace);\n Logger.setLevel(NativeLoggerCategory.DgnCore, reset ? LogLevel.Error : LogLevel.Trace);\n Logger.setLevel(NativeLoggerCategory.BeSQLite, reset ? LogLevel.Error : LogLevel.Trace);\n }\n\n // Setup typical programmatic log level overrides here\n // Convenience method used to debug specific tests/fixtures\n public static setupDebugLogLevels() {\n TestUtils.initDebugLogLevels(false);\n }\n\n public static resetDebugLogLevels() {\n TestUtils.initDebugLogLevels(true);\n }\n}\n\n// The very first \"before\" run to initially setup the logging and initial backend.\nbefore(async () => {\n TestUtils.setupLogging();\n await TestUtils.startBackend();\n});\n\nafter(async () => {\n await TestUtils.shutdownBackend();\n});\n\n"]}
1
+ {"version":3,"file":"TestUtils.js","sourceRoot":"","sources":["../../../src/test/TestUtils.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 * as path from \"path\";\nimport { IModelJsNative, NativeLoggerCategory } from \"@bentley/imodeljs-native\";\nimport { BentleyLoggerCategory, Logger, LogLevel, ProcessDetector } from \"@itwin/core-bentley\";\nimport { BackendLoggerCategory } from \"../BackendLoggerCategory\";\nimport { IModelHost, IModelHostOptions } from \"../IModelHost\";\nimport { IModelNative } from \"../internal/NativePlatform\";\n\n/** Class for simple test timing */\nexport class Timer {\n private _label: string;\n private _start: Date;\n constructor(label: string) {\n this._label = `\\t${label}`;\n this._start = new Date();\n }\n\n public end() {\n const stop = new Date();\n const elapsed = stop.getTime() - this._start.getTime();\n // eslint-disable-next-line no-console\n console.log(`${this._label}: ${elapsed}ms`);\n }\n}\n\n/**\n * Disables native code assertions from firing. This can be used by tests that intentionally\n * test failing operations. If those failing operations raise assertions in native code, the test\n * would fail unexpectedly in a debug build. In that case the native code assertions can be disabled with\n * this class.\n */\nexport class DisableNativeAssertions implements Disposable {\n private _native: IModelJsNative.DisableNativeAssertions | undefined;\n\n constructor() {\n this._native = new IModelNative.platform.DisableNativeAssertions();\n }\n\n public [Symbol.dispose](): void {\n if (!this._native)\n return;\n\n this._native.dispose();\n this._native = undefined;\n }\n\n /** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [Symbol.dispose] instead. */\n public dispose(): void {\n this[Symbol.dispose]();\n }\n}\n\nexport class TestUtils {\n private static shouldLogToConsole(): boolean {\n return process.env.ITWINJS_CORE_BACKEND_TEST_LOG_TO_CONSOLE === \"1\";\n }\n\n public static getCacheDir(fallback: string | undefined = undefined) {\n if (ProcessDetector.isMobileAppBackend) {\n return undefined; // Let the native side handle the cache.\n }\n return fallback ?? path.join(__dirname, \".cache\"); // Set the cache dir to be under the lib directory.\n }\n\n /** Handles the startup of IModelHost.\n * The provided config is used and will override any of the default values used in this method.\n *\n * The default includes:\n * - cacheDir = path.join(__dirname, \".cache\")\n * - allowSharedChannel = false;\n */\n public static async startBackend(config?: IModelHostOptions): Promise<void> {\n const cfg = config ?? {};\n cfg.cacheDir = TestUtils.getCacheDir(cfg.cacheDir);\n cfg.allowSharedChannel ??= false; // Override default to test shared channel enforcement. Remove in version 5.0.\n cfg.implicitWriteEnforcement ??= \"throw\";\n await IModelHost.startup(cfg);\n }\n\n public static async shutdownBackend(): Promise<void> {\n return IModelHost.shutdown();\n }\n\n public static setupLogging() {\n if (TestUtils.shouldLogToConsole())\n Logger.initializeToConsole();\n else\n Logger.initialize();\n Logger.setLevelDefault(LogLevel.Error);\n }\n\n private static initDebugLogLevels(reset?: boolean) {\n Logger.setLevelDefault(reset ? LogLevel.Error : LogLevel.Warning);\n Logger.setLevel(BentleyLoggerCategory.Performance, reset ? LogLevel.Error : LogLevel.Info);\n Logger.setLevel(BackendLoggerCategory.IModelDb, reset ? LogLevel.Error : LogLevel.Trace);\n Logger.setLevel(NativeLoggerCategory.DgnCore, reset ? LogLevel.Error : LogLevel.Trace);\n Logger.setLevel(NativeLoggerCategory.BeSQLite, reset ? LogLevel.Error : LogLevel.Trace);\n }\n\n // Setup typical programmatic log level overrides here\n // Convenience method used to debug specific tests/fixtures\n public static setupDebugLogLevels() {\n TestUtils.initDebugLogLevels(false);\n }\n\n public static resetDebugLogLevels() {\n TestUtils.initDebugLogLevels(true);\n }\n}\n\n// The very first \"before\" run to initially setup the logging and initial backend.\nbefore(async () => {\n TestUtils.setupLogging();\n await TestUtils.startBackend();\n});\n\nafter(async () => {\n await TestUtils.shutdownBackend();\n});\n\n"]}