@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
@@ -5,22 +5,71 @@
5
5
  import { assert, expect } from "chai";
6
6
  import { join } from "path";
7
7
  import { CompressedId64Set, Guid, Id64, OpenMode } from "@itwin/core-bentley";
8
- import { Camera, Code, ColorByName, ColorDef, IModel, IModelError, PlanProjectionSettings, SubCategoryAppearance, } from "@itwin/core-common";
8
+ import { Camera, Code, ColorByName, ColorDef, IModel, IModelError, PlanProjectionSettings, RelatedElement, SubCategoryAppearance, } from "@itwin/core-common";
9
9
  import { Matrix3d, Range2d, Range3d, StandardViewIndex, Transform, YawPitchRollAngles } from "@itwin/core-geometry";
10
- import { CategorySelector, DefinitionModel, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, ModelSelector, SpatialCategory, SpatialViewDefinition, StandaloneDb, Subject, ViewStore, } from "../../core-backend";
10
+ import { CategorySelector, DefinitionModel, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, EditTxn, IModelDb, ModelSelector, PhysicalModel, PhysicalPartition, SpatialCategory, SpatialViewDefinition, StandaloneDb, Subject, SubjectOwnsPartitionElements, ViewStore, } from "../../core-backend";
11
11
  import { IModelTestUtils } from "../IModelTestUtils";
12
12
  import { KnownTestLocations } from "../KnownTestLocations";
13
- function createNewModelAndCategory(rwIModel) {
14
- const modelId = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel"))[1];
15
- const modelId2 = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, "PhysicalModel2"), true)[1];
13
+ class ViewDefinitionEditTxn extends EditTxn {
14
+ constructor(iModel) {
15
+ super(iModel, "view-definition");
16
+ }
17
+ start() {
18
+ super.start();
19
+ }
20
+ end(mode = "save", args) {
21
+ super.end(mode, args);
22
+ }
23
+ saveChanges(args) {
24
+ super.saveChanges(args);
25
+ }
26
+ insertElement(elProps) {
27
+ return super.insertElement(elProps);
28
+ }
29
+ updateElement(elProps) {
30
+ super.updateElement(elProps);
31
+ }
32
+ insertPhysicalModel(_code, modeledElementId, privateModel = false) {
33
+ const model = this.iModel.models.createModel({
34
+ modeledElement: new RelatedElement({ id: modeledElementId }),
35
+ classFullName: PhysicalModel.classFullName,
36
+ isPrivate: privateModel,
37
+ });
38
+ return super.insertModel(model.toJSON());
39
+ }
40
+ insertPhysicalPartitionAndModel(newModelCode, privateModel = false, parentId) {
41
+ const model = parentId ? this.iModel.elements.getElement(parentId).model : IModel.repositoryModelId;
42
+ const parent = new SubjectOwnsPartitionElements(parentId ?? IModel.rootSubjectId);
43
+ const partition = this.iModel.elements.createElement({
44
+ classFullName: PhysicalPartition.classFullName,
45
+ parent,
46
+ model,
47
+ code: newModelCode,
48
+ });
49
+ const partitionId = this.insertElement(partition.toJSON());
50
+ const modelId = this.insertPhysicalModel(newModelCode, partitionId, privateModel);
51
+ return [partitionId, modelId];
52
+ }
53
+ insertSpatialCategory(definitionModelId, name, appearance) {
54
+ const category = SpatialCategory.create(this.iModel, definitionModelId, name);
55
+ category.id = this.insertElement(category.toJSON());
56
+ if (appearance) {
57
+ const subCategory = this.iModel.elements.getElement(IModelDb.getDefaultSubCategoryId(category.id));
58
+ subCategory.appearance = appearance;
59
+ this.updateElement(subCategory.toJSON());
60
+ }
61
+ return category.id;
62
+ }
63
+ }
64
+ function createNewModelAndCategory(rwIModel, editTxn) {
65
+ const modelId = editTxn.insertPhysicalPartitionAndModel(IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel"))[1];
66
+ const modelId2 = editTxn.insertPhysicalPartitionAndModel(IModelTestUtils.getUniqueModelCode(rwIModel, "PhysicalModel2"), true)[1];
16
67
  const dictionary = rwIModel.models.getModel(IModel.dictionaryId);
17
68
  const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, "TestSpatialCategory");
18
- const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);
19
- const spatialCategoryId = category.insert();
20
- category.setDefaultAppearance(new SubCategoryAppearance({ color: 0xff0000 }));
69
+ const spatialCategoryId = editTxn.insertSpatialCategory(IModel.dictionaryId, newCategoryCode.value, new SubCategoryAppearance({ color: 0xff0000 }));
21
70
  newCategoryCode.value = "spatial category 2";
22
- SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value).insert();
23
- rwIModel.elements.insertElement(IModelTestUtils.createPhysicalObject(rwIModel, modelId2, spatialCategoryId).toJSON());
71
+ editTxn.insertSpatialCategory(IModel.dictionaryId, newCategoryCode.value);
72
+ editTxn.insertElement(IModelTestUtils.createPhysicalObject(rwIModel, modelId2, spatialCategoryId).toJSON());
24
73
  return { modelId, modelId2, spatialCategoryId };
25
74
  }
26
75
  // cspell:disable
@@ -57,234 +106,251 @@ describe("ViewDefinition", () => {
57
106
  vs1.openDb(dbName, OpenMode.ReadWrite);
58
107
  });
59
108
  after(() => {
60
- iModel.abandonChanges();
61
109
  iModel.close();
62
110
  vs1.closeDb(true);
63
111
  });
64
112
  it("SpatialViewDefinition", async () => {
65
- const { modelId, modelId2, spatialCategoryId } = createNewModelAndCategory(iModel);
66
- const displayStyleId = DisplayStyle3d.insert(iModel, IModel.dictionaryId, "default", { backgroundColor: ColorDef.fromString("rgb(255,0,0)") });
67
- const modelSelectorId = ModelSelector.insert(iModel, IModel.dictionaryId, "default", [modelId, modelId2]);
68
- const categorySelectorId = CategorySelector.insert(iModel, IModel.dictionaryId, "default", [spatialCategoryId]);
69
- iModel.saveChanges("Basic setup");
70
- const standardView = StandardViewIndex.Iso;
71
- const rotation = Matrix3d.createStandardWorldToView(standardView);
72
- const angles = YawPitchRollAngles.createFromMatrix3d(rotation);
73
- const rotationTransform = Transform.createOriginAndMatrix(undefined, rotation);
74
- const range = new Range3d(1, 1, 1, 8, 8, 8);
75
- const rotatedRange = rotationTransform.multiplyRange(range);
76
- const basicProps = {
77
- code: Code.createEmpty(),
78
- model: IModel.dictionaryId,
79
- classFullName: "BisCore:SpatialViewDefinition",
80
- cameraOn: false,
81
- origin: rotation.multiplyTransposeXYZ(rotatedRange.low.x, rotatedRange.low.y, rotatedRange.low.z),
82
- extents: rotatedRange.diagonal(),
83
- angles,
84
- camera: new Camera(),
85
- };
86
- const ms1 = iModel.elements.getElement(modelSelectorId);
87
- const ms1Row = await vs1.addModelSelector({ name: ms1.code.value, selector: { ids: ms1.models } });
88
- expect(ms1Row).equal("@1");
89
- let ms1out = vs1.getModelSelectorSync({ id: ms1Row });
90
- expect(ms1out.classFullName).equal("BisCore:ModelSelector");
91
- expect(ms1out.models.length).equal(2);
92
- expect(ms1out.models[0]).equal(modelId);
93
- expect(ms1out.models[1]).equal(modelId2);
94
- ms1out.models.push("0x123");
95
- await vs1.updateModelSelector({ id: ms1Row, selector: { ids: ms1out.models } });
96
- ms1out = vs1.getModelSelectorSync({ id: ms1Row });
97
- expect(ms1out.models.length).equal(3);
98
- expect(ms1out.models[2]).equal("0x123");
99
- const cs1 = iModel.elements.getElement(categorySelectorId);
100
- const cs1Row = await vs1.addCategorySelector({ selector: { ids: cs1.categories } });
101
- expect(cs1Row).equal("@1");
102
- let cs1out = vs1.getCategorySelectorSync({ id: cs1Row });
103
- expect(cs1out.classFullName).equal("BisCore:CategorySelector");
104
- expect(cs1out.categories.length).equal(1);
105
- expect(cs1out.categories[0]).equal(spatialCategoryId);
106
- cs1out.categories.push("0x1234");
107
- await vs1.updateCategorySelector({ id: cs1Row, selector: { ids: cs1out.categories } });
108
- cs1out = vs1.getCategorySelectorSync({ id: cs1Row });
109
- expect(cs1out.categories.length).equal(2);
110
- expect(cs1out.categories[1]).equal("0x1234");
111
- const longElementList = CompressedId64Set.sortAndCompress(["0x2a", "0x2b", "0x2d", "0x2e", "0x43", "0x1a", "0x1d", "0x12", "0x22",
112
- "0x8", "0x21", "0x1b", "0x1c", "0x1e", "0x1f", "0x2c", "0x2f", "0x3a", "0x3b", "0x3d", "0x3e", "0x43",
113
- "0x4a", "0x4b", "0x4d", "0x4e", "0x5a", "0x5b", "0x5d", "0x5e", "0x6a", "0x6b", "0x6d", "0x6e", "0x7a",
114
- "0x7b", "0x7d", "0x7e", "0x8a", "0x8b", "0x8d", "0x8e", "0x9a", "0x9b", "0x9d", "0x9e", "0xaa", "0xab", "0xad",
115
- "0xae", "0xba", "0xbb", "0xbd", "0xbe", "0xf5ca", "0xcb", "0xcd", "0xce", "0xda", "0xdb", "0xdd", "0xde", "0xea",
116
- "0xeb", "0xed", "0xee", "0xfa", "0xfb", "0xfd", "0xfe", "0x10a", "0x10b", "0x10d", "0x10e", "0x11a", "0x11b", "0x11d",
117
- "0x11e", "0x12a", "0x12b", "0x12d", "0x12e", "0x13a", "0x13b", "0x13d", "0x13e", "0x14a", "0x14b", "0x14d", "0x14e",
118
- "0x15a", "0x15b", "0x15d", "0x15e", "0x16a", "0x16b", "0x16d"]);
119
- await expect(vs1.addCategorySelector({ selector: { query: { from: "BisCore:SubCategory" } } })).to.be.rejectedWith("must select from BisCore:Category");
120
- const cs2 = (await vs1.addCategorySelector({ selector: { query: { from: "BisCore:Category" } } }));
121
- expect(cs2).equal("@2");
122
- const cs3 = (await vs1.addCategorySelector({ selector: { query: { from: "BisCore:Category", adds: longElementList } } }));
123
- const cs4 = (await vs1.addCategorySelector({ selector: { query: { from: "BisCore:Category", removes: ["0x233", "0x21"], adds: longElementList } } }));
124
- const onlyUsedProps = {
125
- name: "only used spatial categories",
126
- selector: {
127
- query: {
128
- from: "BisCore.Category",
129
- where: "ECInstanceId IN (SELECT DISTINCT Category.Id FROM BisCore.GeometricElement3d)",
130
- },
131
- },
132
- };
133
- await vs1.addCategorySelector(onlyUsedProps);
134
- let selected = vs1.getCategorySelectorSync({ id: cs2 });
135
- expect(selected.categories.length).equal(2);
136
- selected = vs1.getCategorySelectorSync({ id: cs3 });
137
- expect(selected.categories.length).equal(98);
138
- selected = vs1.getCategorySelectorSync({ id: cs4 });
139
- expect(selected.categories.length).equal(97);
140
- selected = vs1.getCategorySelectorSync({ name: onlyUsedProps.name });
141
- expect(selected.categories.length).equal(1);
142
- expect(selected.categories[0]).equal(spatialCategoryId);
143
- const ms3 = (await vs1.addModelSelector({ name: "model selector 2", selector: { query: { from: "Bis.GeometricModel3d" } } }));
144
- let selectedModels = vs1.getModelSelectorSync({ id: ms3 });
145
- expect(selectedModels.models.length).equal(2);
146
- const ms4Props = {
147
- name: "spatial, non-private models",
148
- selector: {
149
- query: {
150
- from: "BisCore.GeometricModel3d",
151
- where: "IsPrivate=false AND IsTemplate=false AND (IsNotSpatiallyLocated IS NULL OR IsNotSpatiallyLocated=false)",
113
+ const editTxn = new ViewDefinitionEditTxn(iModel);
114
+ editTxn.start();
115
+ try {
116
+ const { modelId, modelId2, spatialCategoryId } = createNewModelAndCategory(iModel, editTxn);
117
+ const displayStyleId = editTxn.insertElement(DisplayStyle3d.create(iModel, IModel.dictionaryId, "default", { backgroundColor: ColorDef.fromString("rgb(255,0,0)") }).toJSON());
118
+ const modelSelectorId = editTxn.insertElement(ModelSelector.create(iModel, IModel.dictionaryId, "default", [modelId, modelId2]).toJSON());
119
+ const categorySelectorId = editTxn.insertElement(CategorySelector.create(iModel, IModel.dictionaryId, "default", [spatialCategoryId]).toJSON());
120
+ editTxn.saveChanges("Basic setup");
121
+ const standardView = StandardViewIndex.Iso;
122
+ const rotation = Matrix3d.createStandardWorldToView(standardView);
123
+ const angles = YawPitchRollAngles.createFromMatrix3d(rotation);
124
+ const rotationTransform = Transform.createOriginAndMatrix(undefined, rotation);
125
+ const range = new Range3d(1, 1, 1, 8, 8, 8);
126
+ const rotatedRange = rotationTransform.multiplyRange(range);
127
+ const basicProps = {
128
+ code: Code.createEmpty(),
129
+ model: IModel.dictionaryId,
130
+ classFullName: "BisCore:SpatialViewDefinition",
131
+ cameraOn: false,
132
+ origin: rotation.multiplyTransposeXYZ(rotatedRange.low.x, rotatedRange.low.y, rotatedRange.low.z),
133
+ extents: rotatedRange.diagonal(),
134
+ angles,
135
+ camera: new Camera(),
136
+ };
137
+ const ms1 = iModel.elements.getElement(modelSelectorId);
138
+ const ms1Row = await vs1.addModelSelector({ name: ms1.code.value, selector: { ids: ms1.models } });
139
+ expect(ms1Row).equal("@1");
140
+ let ms1out = vs1.getModelSelectorSync({ id: ms1Row });
141
+ expect(ms1out.classFullName).equal("BisCore:ModelSelector");
142
+ expect(ms1out.models.length).equal(2);
143
+ expect(ms1out.models[0]).equal(modelId);
144
+ expect(ms1out.models[1]).equal(modelId2);
145
+ ms1out.models.push("0x123");
146
+ await vs1.updateModelSelector({ id: ms1Row, selector: { ids: ms1out.models } });
147
+ ms1out = vs1.getModelSelectorSync({ id: ms1Row });
148
+ expect(ms1out.models.length).equal(3);
149
+ expect(ms1out.models[2]).equal("0x123");
150
+ const cs1 = iModel.elements.getElement(categorySelectorId);
151
+ const cs1Row = await vs1.addCategorySelector({ selector: { ids: cs1.categories } });
152
+ expect(cs1Row).equal("@1");
153
+ let cs1out = vs1.getCategorySelectorSync({ id: cs1Row });
154
+ expect(cs1out.classFullName).equal("BisCore:CategorySelector");
155
+ expect(cs1out.categories.length).equal(1);
156
+ expect(cs1out.categories[0]).equal(spatialCategoryId);
157
+ cs1out.categories.push("0x1234");
158
+ await vs1.updateCategorySelector({ id: cs1Row, selector: { ids: cs1out.categories } });
159
+ cs1out = vs1.getCategorySelectorSync({ id: cs1Row });
160
+ expect(cs1out.categories.length).equal(2);
161
+ expect(cs1out.categories[1]).equal("0x1234");
162
+ const longElementList = CompressedId64Set.sortAndCompress(["0x2a", "0x2b", "0x2d", "0x2e", "0x43", "0x1a", "0x1d", "0x12", "0x22",
163
+ "0x8", "0x21", "0x1b", "0x1c", "0x1e", "0x1f", "0x2c", "0x2f", "0x3a", "0x3b", "0x3d", "0x3e", "0x43",
164
+ "0x4a", "0x4b", "0x4d", "0x4e", "0x5a", "0x5b", "0x5d", "0x5e", "0x6a", "0x6b", "0x6d", "0x6e", "0x7a",
165
+ "0x7b", "0x7d", "0x7e", "0x8a", "0x8b", "0x8d", "0x8e", "0x9a", "0x9b", "0x9d", "0x9e", "0xaa", "0xab", "0xad",
166
+ "0xae", "0xba", "0xbb", "0xbd", "0xbe", "0xf5ca", "0xcb", "0xcd", "0xce", "0xda", "0xdb", "0xdd", "0xde", "0xea",
167
+ "0xeb", "0xed", "0xee", "0xfa", "0xfb", "0xfd", "0xfe", "0x10a", "0x10b", "0x10d", "0x10e", "0x11a", "0x11b", "0x11d",
168
+ "0x11e", "0x12a", "0x12b", "0x12d", "0x12e", "0x13a", "0x13b", "0x13d", "0x13e", "0x14a", "0x14b", "0x14d", "0x14e",
169
+ "0x15a", "0x15b", "0x15d", "0x15e", "0x16a", "0x16b", "0x16d"]);
170
+ await expect(vs1.addCategorySelector({ selector: { query: { from: "BisCore:SubCategory" } } })).to.be.rejectedWith("must select from BisCore:Category");
171
+ const cs2 = (await vs1.addCategorySelector({ selector: { query: { from: "BisCore:Category" } } }));
172
+ expect(cs2).equal("@2");
173
+ const cs3 = (await vs1.addCategorySelector({ selector: { query: { from: "BisCore:Category", adds: longElementList } } }));
174
+ const cs4 = (await vs1.addCategorySelector({ selector: { query: { from: "BisCore:Category", removes: ["0x233", "0x21"], adds: longElementList } } }));
175
+ const onlyUsedProps = {
176
+ name: "only used spatial categories",
177
+ selector: {
178
+ query: {
179
+ from: "BisCore.Category",
180
+ where: "ECInstanceId IN (SELECT DISTINCT Category.Id FROM BisCore.GeometricElement3d)",
181
+ },
152
182
  },
153
- },
154
- };
155
- await vs1.addModelSelector(ms4Props);
156
- selectedModels = vs1.getModelSelectorSync({ name: ms4Props.name });
157
- expect(selectedModels.models.length).equal(1);
158
- expect(selectedModels.models[0]).equal(modelId);
159
- const ds1 = iModel.elements.getElement(displayStyleId);
160
- ds1.settings.setPlanProjectionSettings("0x1", PlanProjectionSettings.fromJSON({ elevation: 1 }));
161
- ds1.settings.setPlanProjectionSettings("0x2", PlanProjectionSettings.fromJSON({ elevation: 2 }));
162
- const styles = ds1.toJSON().jsonProperties.styles;
163
- styles.subCategoryOvr =
164
- [{
165
- subCategory: spatialCategoryId,
166
- color: ColorByName.fuchsia,
167
- invisible: true,
168
- style: "0xaaa",
169
- weight: 10,
170
- transp: 0.5,
183
+ };
184
+ await vs1.addCategorySelector(onlyUsedProps);
185
+ let selected = vs1.getCategorySelectorSync({ id: cs2 });
186
+ expect(selected.categories.length).equal(2);
187
+ selected = vs1.getCategorySelectorSync({ id: cs3 });
188
+ expect(selected.categories.length).equal(98);
189
+ selected = vs1.getCategorySelectorSync({ id: cs4 });
190
+ expect(selected.categories.length).equal(97);
191
+ selected = vs1.getCategorySelectorSync({ name: onlyUsedProps.name });
192
+ expect(selected.categories.length).equal(1);
193
+ expect(selected.categories[0]).equal(spatialCategoryId);
194
+ const ms3 = (await vs1.addModelSelector({ name: "model selector 2", selector: { query: { from: "Bis.GeometricModel3d" } } }));
195
+ let selectedModels = vs1.getModelSelectorSync({ id: ms3 });
196
+ expect(selectedModels.models.length).equal(2);
197
+ const ms4Props = {
198
+ name: "spatial, non-private models",
199
+ selector: {
200
+ query: {
201
+ from: "BisCore.GeometricModel3d",
202
+ where: "IsPrivate=false AND IsTemplate=false AND (IsNotSpatiallyLocated IS NULL OR IsNotSpatiallyLocated=false)",
203
+ },
171
204
  },
172
- ];
173
- styles.excludedElements = CompressedId64Set.sortAndCompress(["0x8", "0x12", "0x22"]);
174
- styles.scheduleScript = [{
175
- modelId: "0x21",
176
- realityModelUrl: "altavista.com",
177
- elementTimelines: [{
178
- batchId: 64,
179
- elementIds: CompressedId64Set.sortAndCompress(["0x1a", "0x1d"]),
180
- }, {
181
- batchId: 65,
182
- elementIds: longElementList,
183
- }],
184
- }];
185
- const ds1Row = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });
186
- expect(ds1Row).equal("@1");
187
- const ds1out = vs1.getDisplayStyleSync({ id: ds1Row });
188
- expect(ds1out.classFullName).equal("BisCore:DisplayStyle3d");
189
- expect(ds1out.jsonProperties?.styles).deep.equal(JSON.parse(JSON.stringify(styles)));
190
- ds1out.jsonProperties.styles.scheduleScript[0].elementTimelines[0].elementIds = CompressedId64Set.sortAndCompress(["0x11a", "0x11d", "0x11e", "0x12a"]);
191
- await vs1.updateDisplayStyle({ id: ds1Row, className: ds1.classFullName, settings: ds1out.jsonProperties.styles });
192
- const ds1out2 = vs1.getDisplayStyleSync({ id: ds1Row });
193
- expect(ds1out2.jsonProperties?.styles).deep.equal(ds1out.jsonProperties.styles);
194
- const tl1Row = await vs1.addTimeline({ name: "TestRenderTimeline", timeline: styles.scheduleScript, owner: "owner2" });
195
- expect(tl1Row).equal("@1");
196
- const tl1out = vs1.getTimelineSync({ id: tl1Row });
197
- expect(tl1out.classFullName).equal("BisCore:RenderTimeline");
198
- expect(tl1out.id).equal(tl1Row);
199
- expect(tl1out.code.value).equal("TestRenderTimeline");
200
- expect(tl1out.script).equal(JSON.stringify(styles.scheduleScript));
201
- const viewDefProps = {
202
- ...basicProps,
203
- modelSelectorId: ms1Row,
204
- categorySelectorId: cs1Row,
205
- displayStyleId: ds1Row,
206
- };
207
- viewDefProps.code = { value: "TestViewDefinition", spec: "0x1", scope: "0x1" };
208
- const v1 = await vs1.addView({ viewDefinition: viewDefProps, tags: ["big", "in progress", "done"] });
209
- expect(v1).equal("@1");
210
- let viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 });
211
- expect(viewDefOut.code.value).equal("TestViewDefinition");
212
- expect(viewDefOut.classFullName).equal("BisCore:SpatialViewDefinition");
213
- expect(viewDefOut.modelSelectorId).equal(ms1Row);
214
- expect(viewDefOut.categorySelectorId).equal(cs1Row);
215
- expect(viewDefOut.displayStyleId).equal(ds1Row);
216
- expect(viewDefOut.cameraOn).equal(false);
217
- expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify(basicProps.origin));
218
- expect(JSON.stringify(viewDefOut.extents)).equal(JSON.stringify(basicProps.extents));
219
- expect(JSON.stringify(viewDefOut.angles)).equal(JSON.stringify(basicProps.angles));
220
- expect(JSON.stringify(viewDefOut.camera)).equal(JSON.stringify(basicProps.camera));
221
- viewDefOut.cameraOn = true;
222
- viewDefOut.origin = [1, 2, 3];
223
- await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });
224
- viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 });
225
- expect(viewDefOut.cameraOn).equal(true);
226
- expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify([1, 2, 3]));
227
- viewDefOut.displayStyleId = "@2";
228
- await expect(vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut })).to.be.rejectedWith("invalid Id for displayStyles");
229
- // add a new display style and uodate the view to use it
230
- viewDefOut.displayStyleId = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });
231
- await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });
232
- viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 });
233
- expect(viewDefOut.displayStyleId).equal("@2");
234
- const vinfo = await vs1.getViewInfo({ viewId: v1 });
235
- expect(vinfo?.displayStyleId).equal(viewDefOut.displayStyleId);
236
- viewDefOut.displayStyleId = "@1";
237
- await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut }); // change it back for sharing test below
238
- viewDefProps.code.value = "TestViewDefinition2";
239
- const v2 = await vs1.addView({ viewDefinition: viewDefProps, tags: ["big", "done"] });
240
- await vs1.addTagsToView({ viewId: v2, tags: ["problems", "finished", "big"] });
241
- let tags = vs1.getTagsForView(v2);
242
- expect(tags?.length).equal(4);
243
- expect(tags).includes("big");
244
- expect(tags).includes("done");
245
- await vs1.removeTagFromView({ viewId: v2, tag: "done" });
246
- tags = vs1.getTagsForView(v2);
247
- expect(tags).not.includes("done");
248
- expect(tags?.length).equal(3);
249
- // v1 and v2 share modelselector, categoryselector, and displaystyle so when v2 is deleted they should not be deleted
250
- await vs1.deleteView({ viewId: v2 });
251
- expect(() => vs1.getViewDefinitionSync({ viewId: v2 })).throws("View not found");
252
- expect(vs1.getDisplayStyleRow(1)).not.undefined;
253
- expect(vs1.getModelSelectorRow(1)).not.undefined;
254
- expect(vs1.getCategorySelectorRow(1)).not.undefined;
255
- // the categoryselector, and displaystyle are no longer shared, so they should be deleted when v1 is deleted
256
- await vs1.deleteView({ viewId: v1 });
257
- expect(() => vs1.getViewDefinitionSync({ viewId: v1 })).throws("View not found");
258
- expect(vs1.getDisplayStyleRow(1)).undefined;
259
- expect(vs1.getCategorySelectorRow(1)).undefined;
260
- expect(vs1.getModelSelectorRow(1)).not.undefined; // modelselector has a name so it should not be deleted
261
- // attempt to create a ViewDefinition element with invalid properties
262
- assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, categorySelectorId }), IModelError, "displayStyleId is invalid");
263
- assert.throws(() => iModel.elements.createElement({ ...basicProps, categorySelectorId, displayStyleId }), IModelError, "modelSelectorId is invalid");
264
- assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, displayStyleId }), IModelError, "categorySelectorId is invalid");
265
- // attempt to insert a ViewDefinition with invalid properties
266
- assert.throws(() => iModel.elements.insertElement({ ...basicProps, modelSelectorId, categorySelectorId, displayStyleId: modelId }), "invalid displayStyle");
267
- assert.throws(() => iModel.elements.insertElement({ ...basicProps, modelSelectorId: modelId, displayStyleId, categorySelectorId }), "invalid modelSelector");
268
- assert.throws(() => iModel.elements.insertElement({ ...basicProps, modelSelectorId, categorySelectorId: modelId, displayStyleId }), "invalid categorySelector");
269
- // Better way to create and insert
270
- const props = { ...basicProps, modelSelectorId, categorySelectorId, displayStyleId };
271
- const viewDefinition = iModel.elements.createElement(props);
272
- const viewDefinitionId = iModel.elements.insertElement(viewDefinition.toJSON());
273
- assert.isNotEmpty(viewDefinitionId);
274
- assert.isTrue(Id64.isValid(viewDefinitionId));
275
- // Best way to create and insert
276
- SpatialViewDefinition.insertWithCamera(iModel, IModel.dictionaryId, "default", modelSelectorId, categorySelectorId, displayStyleId, iModel.projectExtents);
205
+ };
206
+ await vs1.addModelSelector(ms4Props);
207
+ selectedModels = vs1.getModelSelectorSync({ name: ms4Props.name });
208
+ expect(selectedModels.models.length).equal(1);
209
+ expect(selectedModels.models[0]).equal(modelId);
210
+ const ds1 = iModel.elements.getElement(displayStyleId);
211
+ ds1.settings.setPlanProjectionSettings("0x1", PlanProjectionSettings.fromJSON({ elevation: 1 }));
212
+ ds1.settings.setPlanProjectionSettings("0x2", PlanProjectionSettings.fromJSON({ elevation: 2 }));
213
+ const styles = ds1.toJSON().jsonProperties.styles;
214
+ styles.subCategoryOvr =
215
+ [{
216
+ subCategory: spatialCategoryId,
217
+ color: ColorByName.fuchsia,
218
+ invisible: true,
219
+ style: "0xaaa",
220
+ weight: 10,
221
+ transp: 0.5,
222
+ },
223
+ ];
224
+ styles.excludedElements = CompressedId64Set.sortAndCompress(["0x8", "0x12", "0x22"]);
225
+ styles.scheduleScript = [{
226
+ modelId: "0x21",
227
+ realityModelUrl: "altavista.com",
228
+ elementTimelines: [{
229
+ batchId: 64,
230
+ elementIds: CompressedId64Set.sortAndCompress(["0x1a", "0x1d"]),
231
+ }, {
232
+ batchId: 65,
233
+ elementIds: longElementList,
234
+ }],
235
+ }];
236
+ const ds1Row = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });
237
+ expect(ds1Row).equal("@1");
238
+ const ds1out = vs1.getDisplayStyleSync({ id: ds1Row });
239
+ expect(ds1out.classFullName).equal("BisCore:DisplayStyle3d");
240
+ expect(ds1out.jsonProperties?.styles).deep.equal(JSON.parse(JSON.stringify(styles)));
241
+ ds1out.jsonProperties.styles.scheduleScript[0].elementTimelines[0].elementIds = CompressedId64Set.sortAndCompress(["0x11a", "0x11d", "0x11e", "0x12a"]);
242
+ await vs1.updateDisplayStyle({ id: ds1Row, className: ds1.classFullName, settings: ds1out.jsonProperties.styles });
243
+ const ds1out2 = vs1.getDisplayStyleSync({ id: ds1Row });
244
+ expect(ds1out2.jsonProperties?.styles).deep.equal(ds1out.jsonProperties.styles);
245
+ const tl1Row = await vs1.addTimeline({ name: "TestRenderTimeline", timeline: styles.scheduleScript, owner: "owner2" });
246
+ expect(tl1Row).equal("@1");
247
+ const tl1out = vs1.getTimelineSync({ id: tl1Row });
248
+ expect(tl1out.classFullName).equal("BisCore:RenderTimeline");
249
+ expect(tl1out.id).equal(tl1Row);
250
+ expect(tl1out.code.value).equal("TestRenderTimeline");
251
+ expect(tl1out.script).equal(JSON.stringify(styles.scheduleScript));
252
+ const viewDefProps = {
253
+ ...basicProps,
254
+ modelSelectorId: ms1Row,
255
+ categorySelectorId: cs1Row,
256
+ displayStyleId: ds1Row,
257
+ };
258
+ viewDefProps.code = { value: "TestViewDefinition", spec: "0x1", scope: "0x1" };
259
+ const v1 = await vs1.addView({ viewDefinition: viewDefProps, tags: ["big", "in progress", "done"] });
260
+ expect(v1).equal("@1");
261
+ let viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 });
262
+ expect(viewDefOut.code.value).equal("TestViewDefinition");
263
+ expect(viewDefOut.classFullName).equal("BisCore:SpatialViewDefinition");
264
+ expect(viewDefOut.modelSelectorId).equal(ms1Row);
265
+ expect(viewDefOut.categorySelectorId).equal(cs1Row);
266
+ expect(viewDefOut.displayStyleId).equal(ds1Row);
267
+ expect(viewDefOut.cameraOn).equal(false);
268
+ expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify(basicProps.origin));
269
+ expect(JSON.stringify(viewDefOut.extents)).equal(JSON.stringify(basicProps.extents));
270
+ expect(JSON.stringify(viewDefOut.angles)).equal(JSON.stringify(basicProps.angles));
271
+ expect(JSON.stringify(viewDefOut.camera)).equal(JSON.stringify(basicProps.camera));
272
+ viewDefOut.cameraOn = true;
273
+ viewDefOut.origin = [1, 2, 3];
274
+ await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });
275
+ viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 });
276
+ expect(viewDefOut.cameraOn).equal(true);
277
+ expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify([1, 2, 3]));
278
+ viewDefOut.displayStyleId = "@2";
279
+ await expect(vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut })).to.be.rejectedWith("invalid Id for displayStyles");
280
+ // add a new display style and uodate the view to use it
281
+ viewDefOut.displayStyleId = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });
282
+ await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });
283
+ viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 });
284
+ expect(viewDefOut.displayStyleId).equal("@2");
285
+ const vinfo = await vs1.getViewInfo({ viewId: v1 });
286
+ expect(vinfo?.displayStyleId).equal(viewDefOut.displayStyleId);
287
+ viewDefOut.displayStyleId = "@1";
288
+ await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut }); // change it back for sharing test below
289
+ viewDefProps.code.value = "TestViewDefinition2";
290
+ const v2 = await vs1.addView({ viewDefinition: viewDefProps, tags: ["big", "done"] });
291
+ await vs1.addTagsToView({ viewId: v2, tags: ["problems", "finished", "big"] });
292
+ let tags = vs1.getTagsForView(v2);
293
+ expect(tags?.length).equal(4);
294
+ expect(tags).includes("big");
295
+ expect(tags).includes("done");
296
+ await vs1.removeTagFromView({ viewId: v2, tag: "done" });
297
+ tags = vs1.getTagsForView(v2);
298
+ expect(tags).not.includes("done");
299
+ expect(tags?.length).equal(3);
300
+ // v1 and v2 share modelselector, categoryselector, and displaystyle so when v2 is deleted they should not be deleted
301
+ await vs1.deleteView({ viewId: v2 });
302
+ expect(() => vs1.getViewDefinitionSync({ viewId: v2 })).throws("View not found");
303
+ expect(vs1.getDisplayStyleRow(1)).not.undefined;
304
+ expect(vs1.getModelSelectorRow(1)).not.undefined;
305
+ expect(vs1.getCategorySelectorRow(1)).not.undefined;
306
+ // the categoryselector, and displaystyle are no longer shared, so they should be deleted when v1 is deleted
307
+ await vs1.deleteView({ viewId: v1 });
308
+ expect(() => vs1.getViewDefinitionSync({ viewId: v1 })).throws("View not found");
309
+ expect(vs1.getDisplayStyleRow(1)).undefined;
310
+ expect(vs1.getCategorySelectorRow(1)).undefined;
311
+ expect(vs1.getModelSelectorRow(1)).not.undefined; // modelselector has a name so it should not be deleted
312
+ // attempt to create a ViewDefinition element with invalid properties
313
+ assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, categorySelectorId }), IModelError, "displayStyleId is invalid");
314
+ assert.throws(() => iModel.elements.createElement({ ...basicProps, categorySelectorId, displayStyleId }), IModelError, "modelSelectorId is invalid");
315
+ assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, displayStyleId }), IModelError, "categorySelectorId is invalid");
316
+ // attempt to insert a ViewDefinition with invalid properties
317
+ assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId, categorySelectorId, displayStyleId: modelId }), "invalid displayStyle");
318
+ assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId: modelId, displayStyleId, categorySelectorId }), "invalid modelSelector");
319
+ assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId, categorySelectorId: modelId, displayStyleId }), "invalid categorySelector");
320
+ // Better way to create and insert
321
+ const props = { ...basicProps, modelSelectorId, categorySelectorId, displayStyleId };
322
+ const viewDefinition = iModel.elements.createElement(props);
323
+ const viewDefinitionId = editTxn.insertElement(viewDefinition.toJSON());
324
+ assert.isNotEmpty(viewDefinitionId);
325
+ assert.isTrue(Id64.isValid(viewDefinitionId));
326
+ // Best way to create and insert
327
+ editTxn.insertElement(SpatialViewDefinition.createWithCamera(iModel, IModel.dictionaryId, "default", modelSelectorId, categorySelectorId, displayStyleId, iModel.projectExtents).toJSON());
328
+ editTxn.end("save", "insert view definitions");
329
+ }
330
+ finally {
331
+ if (editTxn.isActive)
332
+ editTxn.end("abandon");
333
+ }
277
334
  });
278
335
  describe("DrawingViewDefinition", () => {
279
336
  it("fails on insert without a valid baseModelId", () => {
280
- const subjectId = Subject.insert(iModel, IModel.rootSubjectId, "Subject", "Subject Description");
281
- const definitionModelId = DefinitionModel.insert(iModel, subjectId, "Definition");
282
- const drawingCategoryId = DrawingCategory.insert(iModel, definitionModelId, "DrawingCategory", new SubCategoryAppearance());
283
- const drawingCategorySelectorId = CategorySelector.insert(iModel, definitionModelId, "DrawingCategories", [drawingCategoryId]);
284
- const displayStyle2dId = DisplayStyle2d.insert(iModel, definitionModelId, "DisplayStyle2d");
285
- assert.throws(() => {
286
- DrawingViewDefinition.insert(iModel, definitionModelId, "Drawing View", "0", drawingCategorySelectorId, displayStyle2dId, new Range2d(0, 0, 100, 100));
287
- }, IModelError, "baseModelId is invalid");
337
+ const editTxn = new ViewDefinitionEditTxn(iModel);
338
+ editTxn.start();
339
+ try {
340
+ const subjectId = Subject.insert(editTxn, IModel.rootSubjectId, "Subject", "Subject Description");
341
+ const definitionModelId = DefinitionModel.insert(editTxn, subjectId, "Definition");
342
+ const drawingCategoryId = DrawingCategory.insert(editTxn, definitionModelId, "DrawingCategory", new SubCategoryAppearance());
343
+ const drawingCategorySelectorId = CategorySelector.insert(editTxn, definitionModelId, "DrawingCategories", [drawingCategoryId]);
344
+ const displayStyle2dId = DisplayStyle2d.insert(editTxn, definitionModelId, "DisplayStyle2d");
345
+ assert.throws(() => {
346
+ DrawingViewDefinition.insert(editTxn, definitionModelId, "Drawing View", "0", drawingCategorySelectorId, displayStyle2dId, new Range2d(0, 0, 100, 100));
347
+ }, IModelError, "baseModelId is invalid");
348
+ editTxn.end();
349
+ }
350
+ finally {
351
+ if (editTxn.isActive)
352
+ editTxn.end("abandon");
353
+ }
288
354
  });
289
355
  });
290
356
  });