@itwin/core-backend 5.1.0-dev.5 → 5.1.0-dev.51

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 (556) hide show
  1. package/CHANGELOG.md +122 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +1 -1
  3. package/lib/cjs/BackendHubAccess.js +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  6. package/lib/cjs/BisCoreSchema.js +1 -1
  7. package/lib/cjs/BisCoreSchema.js.map +1 -1
  8. package/lib/cjs/BlobContainerService.js.map +1 -1
  9. package/lib/cjs/BriefcaseManager.d.ts +10 -2
  10. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  11. package/lib/cjs/BriefcaseManager.js +16 -0
  12. package/lib/cjs/BriefcaseManager.js.map +1 -1
  13. package/lib/cjs/CatalogDb.js.map +1 -1
  14. package/lib/cjs/Category.d.ts +4 -4
  15. package/lib/cjs/Category.js +4 -4
  16. package/lib/cjs/Category.js.map +1 -1
  17. package/lib/cjs/ChangeSummaryManager.js +2 -2
  18. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  19. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  20. package/lib/cjs/ChangesetECAdaptor.d.ts +67 -8
  21. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  22. package/lib/cjs/ChangesetECAdaptor.js +490 -275
  23. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  24. package/lib/cjs/ChannelControl.js.map +1 -1
  25. package/lib/cjs/CheckpointManager.js.map +1 -1
  26. package/lib/cjs/ClassRegistry.d.ts +1 -1
  27. package/lib/cjs/ClassRegistry.js +6 -6
  28. package/lib/cjs/ClassRegistry.js.map +1 -1
  29. package/lib/cjs/CloudSqlite.js +1 -1
  30. package/lib/cjs/CloudSqlite.js.map +1 -1
  31. package/lib/cjs/CodeService.js.map +1 -1
  32. package/lib/cjs/CodeSpecs.d.ts +1 -1
  33. package/lib/cjs/CodeSpecs.js +1 -1
  34. package/lib/cjs/CodeSpecs.js.map +1 -1
  35. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  36. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  37. package/lib/cjs/DevTools.js.map +1 -1
  38. package/lib/cjs/DisplayStyle.d.ts +4 -4
  39. package/lib/cjs/DisplayStyle.js +3 -3
  40. package/lib/cjs/DisplayStyle.js.map +1 -1
  41. package/lib/cjs/ECDb.d.ts +4 -4
  42. package/lib/cjs/ECDb.d.ts.map +1 -1
  43. package/lib/cjs/ECDb.js +4 -4
  44. package/lib/cjs/ECDb.js.map +1 -1
  45. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  46. package/lib/cjs/ECSqlStatement.d.ts +15 -6
  47. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  48. package/lib/cjs/ECSqlStatement.js +18 -4
  49. package/lib/cjs/ECSqlStatement.js.map +1 -1
  50. package/lib/cjs/Element.d.ts +51 -51
  51. package/lib/cjs/Element.js +52 -52
  52. package/lib/cjs/Element.js.map +1 -1
  53. package/lib/cjs/ElementAspect.d.ts +8 -8
  54. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  55. package/lib/cjs/ElementAspect.js +8 -8
  56. package/lib/cjs/ElementAspect.js.map +1 -1
  57. package/lib/cjs/ElementGraphics.js.map +1 -1
  58. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  59. package/lib/cjs/Entity.d.ts +3 -3
  60. package/lib/cjs/Entity.js +2 -2
  61. package/lib/cjs/Entity.js.map +1 -1
  62. package/lib/cjs/EntityReferences.js.map +1 -1
  63. package/lib/cjs/ExportGraphics.d.ts +54 -8
  64. package/lib/cjs/ExportGraphics.d.ts.map +1 -1
  65. package/lib/cjs/ExportGraphics.js +158 -59
  66. package/lib/cjs/ExportGraphics.js.map +1 -1
  67. package/lib/cjs/ExternalSource.js.map +1 -1
  68. package/lib/cjs/FontFile.js.map +1 -1
  69. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  70. package/lib/cjs/GeographicCRSServices.d.ts +6 -2
  71. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  72. package/lib/cjs/GeographicCRSServices.js +1 -1
  73. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  74. package/lib/cjs/GeometrySummary.js +47 -47
  75. package/lib/cjs/GeometrySummary.js.map +1 -1
  76. package/lib/cjs/IModelDb.d.ts +29 -23
  77. package/lib/cjs/IModelDb.d.ts.map +1 -1
  78. package/lib/cjs/IModelDb.js +102 -49
  79. package/lib/cjs/IModelDb.js.map +1 -1
  80. package/lib/cjs/IModelDbFonts.js.map +1 -1
  81. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  82. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  83. package/lib/cjs/IModelElementCloneContext.js +1 -1
  84. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  85. package/lib/cjs/IModelHost.d.ts +2 -3
  86. package/lib/cjs/IModelHost.d.ts.map +1 -1
  87. package/lib/cjs/IModelHost.js +2 -3
  88. package/lib/cjs/IModelHost.js.map +1 -1
  89. package/lib/cjs/IModelJsFs.js.map +1 -1
  90. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  91. package/lib/cjs/IpcHost.js.map +1 -1
  92. package/lib/cjs/LineStyle.js.map +1 -1
  93. package/lib/cjs/LocalHub.js +1 -1
  94. package/lib/cjs/LocalHub.js.map +1 -1
  95. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  96. package/lib/cjs/LockControl.js.map +1 -1
  97. package/lib/cjs/Material.d.ts +1 -1
  98. package/lib/cjs/Material.js +1 -1
  99. package/lib/cjs/Material.js.map +1 -1
  100. package/lib/cjs/Model.d.ts +22 -22
  101. package/lib/cjs/Model.js +22 -22
  102. package/lib/cjs/Model.js.map +1 -1
  103. package/lib/cjs/NativeAppStorage.js.map +1 -1
  104. package/lib/cjs/NativeHost.js.map +1 -1
  105. package/lib/cjs/NavigationRelationship.js.map +1 -1
  106. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  107. package/lib/cjs/PropertyStore.js.map +1 -1
  108. package/lib/cjs/Relationship.js.map +1 -1
  109. package/lib/cjs/RpcBackend.js.map +1 -1
  110. package/lib/cjs/SQLiteDb.d.ts +1 -1
  111. package/lib/cjs/SQLiteDb.js +1 -1
  112. package/lib/cjs/SQLiteDb.js.map +1 -1
  113. package/lib/cjs/Schema.js.map +1 -1
  114. package/lib/cjs/SchemaSync.js.map +1 -1
  115. package/lib/cjs/SchemaUtils.js.map +1 -1
  116. package/lib/cjs/SheetIndex.js.map +1 -1
  117. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  118. package/lib/cjs/SqliteStatement.d.ts +1 -1
  119. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  120. package/lib/cjs/SqliteStatement.js +1 -1
  121. package/lib/cjs/SqliteStatement.js.map +1 -1
  122. package/lib/cjs/Texture.d.ts +1 -1
  123. package/lib/cjs/Texture.js +1 -1
  124. package/lib/cjs/Texture.js.map +1 -1
  125. package/lib/cjs/TileStorage.js.map +1 -1
  126. package/lib/cjs/TxnManager.d.ts +4 -4
  127. package/lib/cjs/TxnManager.js +1 -1
  128. package/lib/cjs/TxnManager.js.map +1 -1
  129. package/lib/cjs/ViewDefinition.d.ts +40 -14
  130. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  131. package/lib/cjs/ViewDefinition.js +42 -14
  132. package/lib/cjs/ViewDefinition.js.map +1 -1
  133. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  134. package/lib/cjs/ViewStore.js.map +1 -1
  135. package/lib/cjs/annotations/FrameGeometry.d.ts +52 -0
  136. package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -0
  137. package/lib/cjs/annotations/FrameGeometry.js +250 -0
  138. package/lib/cjs/annotations/FrameGeometry.js.map +1 -0
  139. package/lib/cjs/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
  140. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -0
  141. package/lib/cjs/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +20 -26
  142. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -0
  143. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +31 -0
  144. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  145. package/lib/cjs/annotations/TextAnnotationGeometry.js +132 -0
  146. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -0
  147. package/lib/cjs/annotations/TextBlockGeometry.d.ts +16 -0
  148. package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -0
  149. package/lib/cjs/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +13 -69
  150. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -0
  151. package/lib/cjs/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +22 -8
  152. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -0
  153. package/lib/cjs/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +51 -9
  154. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -0
  155. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  156. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  157. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  158. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  159. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  160. package/lib/cjs/core-backend.d.ts +5 -3
  161. package/lib/cjs/core-backend.d.ts.map +1 -1
  162. package/lib/cjs/core-backend.js +25 -6
  163. package/lib/cjs/core-backend.js.map +1 -1
  164. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  165. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  166. package/lib/cjs/domains/GenericElements.js.map +1 -1
  167. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  168. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  169. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  170. package/lib/cjs/internal/ElementLRUCache.d.ts +23 -0
  171. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
  172. package/lib/cjs/internal/ElementLRUCache.js +167 -3
  173. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  174. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  175. package/lib/cjs/internal/HubMock.js.map +1 -1
  176. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  177. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  178. package/lib/cjs/internal/NoLocks.js.map +1 -1
  179. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  180. package/lib/cjs/internal/Symbols.d.ts +1 -0
  181. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  182. package/lib/cjs/internal/Symbols.js +2 -1
  183. package/lib/cjs/internal/Symbols.js.map +1 -1
  184. package/lib/cjs/internal/cross-package.js.map +1 -1
  185. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  186. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  187. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  188. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  189. package/lib/cjs/rpc/multipart.js.map +1 -1
  190. package/lib/cjs/rpc/tracing.js.map +1 -1
  191. package/lib/cjs/rpc/web/logging.js.map +1 -1
  192. package/lib/cjs/rpc/web/request.js.map +1 -1
  193. package/lib/cjs/rpc/web/response.js.map +1 -1
  194. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  195. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  196. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +1 -1
  197. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  198. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  199. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  200. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  201. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  202. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  203. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  204. package/lib/cjs/workspace/Settings.js.map +1 -1
  205. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  206. package/lib/cjs/workspace/Workspace.js.map +1 -1
  207. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  208. package/lib/esm/BackendHubAccess.d.ts +1 -1
  209. package/lib/esm/BackendHubAccess.js +1 -1
  210. package/lib/esm/BackendHubAccess.js.map +1 -1
  211. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  212. package/lib/esm/BisCoreSchema.js +1 -1
  213. package/lib/esm/BisCoreSchema.js.map +1 -1
  214. package/lib/esm/BlobContainerService.js.map +1 -1
  215. package/lib/esm/BriefcaseManager.d.ts +10 -2
  216. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  217. package/lib/esm/BriefcaseManager.js +17 -1
  218. package/lib/esm/BriefcaseManager.js.map +1 -1
  219. package/lib/esm/CatalogDb.js.map +1 -1
  220. package/lib/esm/Category.d.ts +4 -4
  221. package/lib/esm/Category.js +4 -4
  222. package/lib/esm/Category.js.map +1 -1
  223. package/lib/esm/ChangeSummaryManager.js +2 -2
  224. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  225. package/lib/esm/ChangedElementsDb.js.map +1 -1
  226. package/lib/esm/ChangesetECAdaptor.d.ts +67 -8
  227. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  228. package/lib/esm/ChangesetECAdaptor.js +490 -275
  229. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  230. package/lib/esm/ChannelControl.js.map +1 -1
  231. package/lib/esm/CheckpointManager.js.map +1 -1
  232. package/lib/esm/ClassRegistry.d.ts +1 -1
  233. package/lib/esm/ClassRegistry.js +6 -6
  234. package/lib/esm/ClassRegistry.js.map +1 -1
  235. package/lib/esm/CloudSqlite.js +1 -1
  236. package/lib/esm/CloudSqlite.js.map +1 -1
  237. package/lib/esm/CodeService.js.map +1 -1
  238. package/lib/esm/CodeSpecs.d.ts +1 -1
  239. package/lib/esm/CodeSpecs.js +1 -1
  240. package/lib/esm/CodeSpecs.js.map +1 -1
  241. package/lib/esm/ConcurrentQuery.js.map +1 -1
  242. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  243. package/lib/esm/DevTools.js.map +1 -1
  244. package/lib/esm/DisplayStyle.d.ts +4 -4
  245. package/lib/esm/DisplayStyle.js +3 -3
  246. package/lib/esm/DisplayStyle.js.map +1 -1
  247. package/lib/esm/ECDb.d.ts +4 -4
  248. package/lib/esm/ECDb.d.ts.map +1 -1
  249. package/lib/esm/ECDb.js +4 -4
  250. package/lib/esm/ECDb.js.map +1 -1
  251. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  252. package/lib/esm/ECSqlStatement.d.ts +15 -6
  253. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  254. package/lib/esm/ECSqlStatement.js +18 -4
  255. package/lib/esm/ECSqlStatement.js.map +1 -1
  256. package/lib/esm/Element.d.ts +51 -51
  257. package/lib/esm/Element.js +52 -52
  258. package/lib/esm/Element.js.map +1 -1
  259. package/lib/esm/ElementAspect.d.ts +8 -8
  260. package/lib/esm/ElementAspect.d.ts.map +1 -1
  261. package/lib/esm/ElementAspect.js +8 -8
  262. package/lib/esm/ElementAspect.js.map +1 -1
  263. package/lib/esm/ElementGraphics.js.map +1 -1
  264. package/lib/esm/ElementTreeWalker.js.map +1 -1
  265. package/lib/esm/Entity.d.ts +3 -3
  266. package/lib/esm/Entity.js +2 -2
  267. package/lib/esm/Entity.js.map +1 -1
  268. package/lib/esm/EntityReferences.js.map +1 -1
  269. package/lib/esm/ExportGraphics.d.ts +54 -8
  270. package/lib/esm/ExportGraphics.d.ts.map +1 -1
  271. package/lib/esm/ExportGraphics.js +156 -58
  272. package/lib/esm/ExportGraphics.js.map +1 -1
  273. package/lib/esm/ExternalSource.js.map +1 -1
  274. package/lib/esm/FontFile.js.map +1 -1
  275. package/lib/esm/GeoCoordConfig.js.map +1 -1
  276. package/lib/esm/GeographicCRSServices.d.ts +6 -2
  277. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  278. package/lib/esm/GeographicCRSServices.js +1 -1
  279. package/lib/esm/GeographicCRSServices.js.map +1 -1
  280. package/lib/esm/GeometrySummary.js +47 -47
  281. package/lib/esm/GeometrySummary.js.map +1 -1
  282. package/lib/esm/IModelDb.d.ts +29 -23
  283. package/lib/esm/IModelDb.d.ts.map +1 -1
  284. package/lib/esm/IModelDb.js +105 -52
  285. package/lib/esm/IModelDb.js.map +1 -1
  286. package/lib/esm/IModelDbFonts.js.map +1 -1
  287. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  288. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  289. package/lib/esm/IModelElementCloneContext.js +1 -1
  290. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  291. package/lib/esm/IModelHost.d.ts +2 -3
  292. package/lib/esm/IModelHost.d.ts.map +1 -1
  293. package/lib/esm/IModelHost.js +2 -3
  294. package/lib/esm/IModelHost.js.map +1 -1
  295. package/lib/esm/IModelJsFs.js.map +1 -1
  296. package/lib/esm/ImageSourceConversion.js.map +1 -1
  297. package/lib/esm/IpcHost.js.map +1 -1
  298. package/lib/esm/LineStyle.js.map +1 -1
  299. package/lib/esm/LocalHub.js +1 -1
  300. package/lib/esm/LocalHub.js.map +1 -1
  301. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  302. package/lib/esm/LockControl.js.map +1 -1
  303. package/lib/esm/Material.d.ts +1 -1
  304. package/lib/esm/Material.js +1 -1
  305. package/lib/esm/Material.js.map +1 -1
  306. package/lib/esm/Model.d.ts +22 -22
  307. package/lib/esm/Model.js +22 -22
  308. package/lib/esm/Model.js.map +1 -1
  309. package/lib/esm/NativeAppStorage.js.map +1 -1
  310. package/lib/esm/NativeHost.js.map +1 -1
  311. package/lib/esm/NavigationRelationship.js.map +1 -1
  312. package/lib/esm/PromiseMemoizer.js.map +1 -1
  313. package/lib/esm/PropertyStore.js.map +1 -1
  314. package/lib/esm/Relationship.js.map +1 -1
  315. package/lib/esm/RpcBackend.js.map +1 -1
  316. package/lib/esm/SQLiteDb.d.ts +1 -1
  317. package/lib/esm/SQLiteDb.js +1 -1
  318. package/lib/esm/SQLiteDb.js.map +1 -1
  319. package/lib/esm/Schema.js.map +1 -1
  320. package/lib/esm/SchemaSync.js.map +1 -1
  321. package/lib/esm/SchemaUtils.js.map +1 -1
  322. package/lib/esm/SheetIndex.js.map +1 -1
  323. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  324. package/lib/esm/SqliteStatement.d.ts +1 -1
  325. package/lib/esm/SqliteStatement.d.ts.map +1 -1
  326. package/lib/esm/SqliteStatement.js +1 -1
  327. package/lib/esm/SqliteStatement.js.map +1 -1
  328. package/lib/esm/Texture.d.ts +1 -1
  329. package/lib/esm/Texture.js +1 -1
  330. package/lib/esm/Texture.js.map +1 -1
  331. package/lib/esm/TileStorage.js.map +1 -1
  332. package/lib/esm/TxnManager.d.ts +4 -4
  333. package/lib/esm/TxnManager.js +1 -1
  334. package/lib/esm/TxnManager.js.map +1 -1
  335. package/lib/esm/ViewDefinition.d.ts +40 -14
  336. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  337. package/lib/esm/ViewDefinition.js +42 -14
  338. package/lib/esm/ViewDefinition.js.map +1 -1
  339. package/lib/esm/ViewStateHydrator.js.map +1 -1
  340. package/lib/esm/ViewStore.js.map +1 -1
  341. package/lib/esm/annotations/FrameGeometry.d.ts +52 -0
  342. package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -0
  343. package/lib/esm/annotations/FrameGeometry.js +245 -0
  344. package/lib/esm/annotations/FrameGeometry.js.map +1 -0
  345. package/lib/esm/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
  346. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -0
  347. package/lib/esm/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +22 -28
  348. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -0
  349. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +31 -0
  350. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  351. package/lib/esm/annotations/TextAnnotationGeometry.js +129 -0
  352. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -0
  353. package/lib/esm/annotations/TextBlockGeometry.d.ts +16 -0
  354. package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -0
  355. package/lib/esm/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +13 -69
  356. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -0
  357. package/lib/esm/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +22 -8
  358. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -0
  359. package/lib/esm/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +51 -9
  360. package/lib/esm/annotations/TextBlockLayout.js.map +1 -0
  361. package/lib/esm/core-backend.d.ts +5 -3
  362. package/lib/esm/core-backend.d.ts.map +1 -1
  363. package/lib/esm/core-backend.js +25 -3
  364. package/lib/esm/core-backend.js.map +1 -1
  365. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  366. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  367. package/lib/esm/domains/GenericElements.js.map +1 -1
  368. package/lib/esm/domains/GenericSchema.js.map +1 -1
  369. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  370. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  371. package/lib/esm/internal/ElementLRUCache.d.ts +23 -0
  372. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
  373. package/lib/esm/internal/ElementLRUCache.js +165 -2
  374. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  375. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  376. package/lib/esm/internal/HubMock.js.map +1 -1
  377. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  378. package/lib/esm/internal/NativePlatform.js.map +1 -1
  379. package/lib/esm/internal/NoLocks.js.map +1 -1
  380. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  381. package/lib/esm/internal/Symbols.d.ts +1 -0
  382. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  383. package/lib/esm/internal/Symbols.js +1 -0
  384. package/lib/esm/internal/Symbols.js.map +1 -1
  385. package/lib/esm/internal/cross-package.js.map +1 -1
  386. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  387. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  388. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  389. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  390. package/lib/esm/rpc/multipart.js.map +1 -1
  391. package/lib/esm/rpc/tracing.js.map +1 -1
  392. package/lib/esm/rpc/web/logging.js.map +1 -1
  393. package/lib/esm/rpc/web/request.js.map +1 -1
  394. package/lib/esm/rpc/web/response.js.map +1 -1
  395. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  396. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  397. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +1 -1
  398. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  399. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  400. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  401. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  402. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  403. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  404. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  405. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  406. package/lib/esm/test/AttachDb.test.js +11 -11
  407. package/lib/esm/test/AttachDb.test.js.map +1 -1
  408. package/lib/esm/test/ElementLRUCache.test.js +224 -1
  409. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  410. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  411. package/lib/esm/test/IModelHost.test.js.map +1 -1
  412. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  413. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  414. package/lib/esm/test/IpcHost.test.js.map +1 -1
  415. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  416. package/lib/esm/test/PrintElementTree.js.map +1 -1
  417. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  418. package/lib/esm/test/RevisionUtility.js.map +1 -1
  419. package/lib/esm/test/SchemaUtils.test.js +25 -25
  420. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  421. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  422. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  423. package/lib/esm/test/TestUtils.d.ts +1 -1
  424. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  425. package/lib/esm/test/TestUtils.js +1 -1
  426. package/lib/esm/test/TestUtils.js.map +1 -1
  427. package/lib/esm/test/annotations/TextAnnotation.test.js +190 -1025
  428. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  429. package/lib/esm/test/annotations/TextBlock.test.d.ts +2 -0
  430. package/lib/esm/test/annotations/TextBlock.test.d.ts.map +1 -0
  431. package/lib/esm/test/annotations/TextBlock.test.js +1105 -0
  432. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -0
  433. package/lib/esm/test/categories/Category.test.js.map +1 -1
  434. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  435. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  436. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  437. package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts +2 -0
  438. package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts.map +1 -0
  439. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +164 -0
  440. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -0
  441. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +35 -45
  442. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  443. package/lib/esm/test/ecdb/ECDb.test.js +86 -65
  444. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  445. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  446. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  447. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  448. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  449. package/lib/esm/test/ecdb/ECSqlQuery.test.js +0 -55
  450. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  451. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  452. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  453. package/lib/esm/test/ecdb/ECSqlStatement.test.js +484 -292
  454. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  455. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  456. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  457. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  458. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  459. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  460. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  461. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  462. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  463. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  464. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  465. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  466. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  467. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  468. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  469. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  470. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  471. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  472. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  473. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  474. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  475. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  476. package/lib/esm/test/imageData.js.map +1 -1
  477. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  478. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  479. package/lib/esm/test/imodel/IModel.test.js +228 -5
  480. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  481. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  482. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  483. package/lib/esm/test/index.js.map +1 -1
  484. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  485. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  486. package/lib/esm/test/misc/GeoServices.test.js +23 -9
  487. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  488. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  489. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  490. package/lib/esm/test/rpc/response.test.js.map +1 -1
  491. package/lib/esm/test/schema/ClassRegistry.test.js +71 -71
  492. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  493. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  494. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  495. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  496. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  497. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  498. package/lib/esm/test/standalone/ChangesetReader.test.js +479 -164
  499. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  500. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  501. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  502. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  503. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  504. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  505. package/lib/esm/test/standalone/ExportGraphics.test.js +67 -15
  506. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  507. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  508. package/lib/esm/test/standalone/GeometryStream.test.js +49 -1
  509. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  510. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  511. package/lib/esm/test/standalone/IModelLimits.test.d.ts +2 -0
  512. package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
  513. package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
  514. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
  515. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  516. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  517. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  518. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  519. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  520. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  521. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  522. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  523. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  524. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  525. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  526. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  527. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  528. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  529. package/lib/esm/test/standalone/SnapshotDb.test.js +19 -1
  530. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  531. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  532. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  533. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  534. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  535. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  536. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  537. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  538. package/lib/esm/workspace/Settings.js.map +1 -1
  539. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  540. package/lib/esm/workspace/Workspace.js.map +1 -1
  541. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  542. package/package.json +12 -12
  543. package/lib/cjs/TextAnnotationElement.d.ts.map +0 -1
  544. package/lib/cjs/TextAnnotationElement.js.map +0 -1
  545. package/lib/cjs/TextAnnotationGeometry.d.ts +0 -32
  546. package/lib/cjs/TextAnnotationGeometry.d.ts.map +0 -1
  547. package/lib/cjs/TextAnnotationGeometry.js.map +0 -1
  548. package/lib/cjs/TextAnnotationLayout.d.ts.map +0 -1
  549. package/lib/cjs/TextAnnotationLayout.js.map +0 -1
  550. package/lib/esm/TextAnnotationElement.d.ts.map +0 -1
  551. package/lib/esm/TextAnnotationElement.js.map +0 -1
  552. package/lib/esm/TextAnnotationGeometry.d.ts +0 -32
  553. package/lib/esm/TextAnnotationGeometry.d.ts.map +0 -1
  554. package/lib/esm/TextAnnotationGeometry.js.map +0 -1
  555. package/lib/esm/TextAnnotationLayout.d.ts.map +0 -1
  556. package/lib/esm/TextAnnotationLayout.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ElementTreeWalker.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/ElementTreeWalker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { Code, GeometricElement2dProps, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Point2d } from \"@itwin/core-geometry\";\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { DefinitionContainer, DefinitionModel, DocumentListModel, Drawing, DrawingCategory, DrawingGraphic, ElementGroupsMembers, ElementOwnsChildElements, ExternalSource, ExternalSourceGroup, IModelDb, Model, PhysicalPartition, SnapshotDb, SpatialCategory, SubCategory, Subject } from \"../../core-backend\";\nimport { deleteElementSubTrees, deleteElementTree, ElementTreeBottomUp, ElementTreeWalkerScope } from \"../../ElementTreeWalker\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\n\n// Test class that collects the results of a bottom-up tree walk\nclass ElementTreeCollector extends ElementTreeBottomUp {\n public subModels: Id64Array = [];\n public definitionModels: Id64Array = [];\n public elements: Id64Array = [];\n public definitions: Id64Array = [];\n\n public constructor(iModel: IModelDb) { super(iModel); }\n\n public visitModel(model: Model, _scope: ElementTreeWalkerScope): void {\n if (model instanceof DefinitionModel)\n this.definitionModels.push(model.id);\n else\n this.subModels.push(model.id);\n }\n\n public visitElement(elementId: Id64String, scope: ElementTreeWalkerScope): void {\n if (scope.inDefinitionModel)\n this.definitions.push(elementId); // may be some other kind of InformationContentElement - that's OK.\n else\n this.elements.push(elementId);\n }\n\n public collect(topElement: Id64String): void {\n this.processElementTree(topElement, ElementTreeWalkerScope.createTopScope(this._iModel, topElement));\n }\n}\n\nclass SelectedElementCollector extends ElementTreeCollector {\n public constructor(iModel: IModelDb, private _elementsToReport: Id64Array) { super(iModel); }\n public override shouldExploreModel(_model: Model): boolean { return true; }\n public override shouldVisitModel(_model: Model): boolean { return false; }\n public override shouldVisitElement(elementId: Id64String): boolean { return this._elementsToReport.includes(elementId); }\n}\n\nfunction doesElementExist(iModel: IModelDb, elementId: Id64String): boolean {\n return iModel.elements.tryGetElementProps(elementId) !== undefined;\n}\n\nfunction doesModelExist(iModel: IModelDb, mid: Id64String): boolean {\n return iModel.models.tryGetModelProps(mid) !== undefined;\n}\n\nfunction doesGroupRelationshipExist(iModel: IModelDb, source: Id64String, target: Id64String): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModel.withPreparedStatement(`select count(*) from ${ElementGroupsMembers.classFullName} where sourceecinstanceid=? and targetecinstanceid=?`, (stmt) => {\n stmt.bindId(1, source);\n stmt.bindId(2, target);\n stmt.step();\n return stmt.getValue(0).getInteger() !== 0;\n });\n}\n\ndescribe(\"ElementTreeWalker\", () => {\n let iModel: SnapshotDb;\n let originalEnv: any;\n\n let repositoryLinkId: Id64String;\n let jobSubjectId: Id64String;\n let childSubject: Id64String;\n let definitionModelId: Id64String;\n let definitionContainerId: Id64String;\n let drawingDefinitionModelId: Id64String;\n let spatialCategoryId: Id64String;\n let nestedSpatialCategoryId: Id64String;\n let drawingCategoryId: Id64String;\n let drawingSubCategory1Id: Id64String;\n let drawingSubCategory2Id: Id64String;\n let xsGroup: Id64String;\n let xsElement: Id64String;\n let documentListModelId: Id64String;\n let drawingModelId: Id64String;\n let drawingGraphicId1: Id64String;\n let physicalModelId: Id64String;\n let physicalObjectId1: Id64String;\n let physicalObjectId2: Id64String;\n let physicalObjectId3: Id64String;\n\n before(async () => {\n originalEnv = { ...process.env };\n\n IModelTestUtils.registerTestBimSchema();\n });\n\n after(() => {\n process.env = originalEnv;\n });\n\n beforeEach(async () => {\n // Uncomment the following two lines to debug test failures\n // Logger.initializeToConsole();\n // Logger.setLevel(\"core-backend.IModelDb.ElementTreeWalker\", LogLevel.Trace);\n\n const iModelFileName = IModelTestUtils.prepareOutputFile(\"ElementTreeWalker\", \"Test.bim\");\n iModel = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"ElementTreeWalker Test\" } });\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\n await iModel.importSchemas([schemaPathname]); // will throw an exception if import fails\n\n /*\n [RepositoryModel]\n RepositoryLink\n Job Subject\n +- DefinitionParitition -- [DefinitionModel]\n | DrawingCategory\n | default SubCategory + 2 non-default SubCategories\n | ExternalSourceGroup\n | ExternalSource child1\n +- DefinitionParitition -- [DefinitionModel]\n | SpatialCategory\n | DefinitionContainer\n | SpatialCategory\n |\n +- DocumentList -- [DocumentListModel]\n | Drawing -- [DrawingModel]\n | DrawingGraphic\n +- Child Subject\n |\n +- PhysicalPartition -- [PhysicalModel]\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\n */\n\n repositoryLinkId = IModelTestUtils.insertRepositoryLink(iModel, \"test link\", \"foo\", \"bar\");\n jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, \"Job\").insert();\n\n childSubject = Subject.insert(iModel, jobSubjectId, \"Child Subject\");\n\n definitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"Definition\");\n spatialCategoryId = SpatialCategory.insert(iModel, definitionModelId, \"SpatialCategory\", new SubCategoryAppearance());\n drawingDefinitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"DrawingDefinition\");\n drawingCategoryId = DrawingCategory.insert(iModel, drawingDefinitionModelId, \"DrawingCategory\", new SubCategoryAppearance());\n drawingSubCategory1Id = SubCategory.insert(iModel, drawingCategoryId, \"SubCategory1\", new SubCategoryAppearance());\n drawingSubCategory2Id = SubCategory.insert(iModel, drawingCategoryId, \"SubCategory2\", new SubCategoryAppearance());\n\n definitionContainerId = DefinitionContainer.insert(iModel, definitionModelId, Code.createEmpty());\n nestedSpatialCategoryId = SpatialCategory.insert(iModel, definitionContainerId, \"nested\", {});\n\n xsGroup = iModel.elements.insertElement({ classFullName: ExternalSourceGroup.classFullName, model: drawingDefinitionModelId, code: Code.createEmpty() });\n xsElement = iModel.elements.insertElement({ classFullName: ExternalSource.classFullName, model: drawingDefinitionModelId, parent: new ElementOwnsChildElements(xsGroup), code: Code.createEmpty() });\n\n documentListModelId = DocumentListModel.insert(iModel, jobSubjectId, \"Document\");\n assert.isTrue(Id64.isValidId64(documentListModelId));\n drawingModelId = Drawing.insert(iModel, documentListModelId, \"Drawing\");\n const drawingGraphicProps1: GeometricElement2dProps = {\n classFullName: DrawingGraphic.classFullName,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n userLabel: \"DrawingGraphic1\",\n geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),\n placement: { origin: Point2d.create(2, 2), angle: 0 },\n };\n drawingGraphicId1 = iModel.elements.insertElement(drawingGraphicProps1);\n\n [, physicalModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, PhysicalPartition.createCode(iModel, childSubject, \"Physical\"), false, childSubject);\n const elementProps: GeometricElementProps = {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: physicalModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n const elementProps2: GeometricElementProps = {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: physicalModelId,\n category: nestedSpatialCategoryId,\n code: Code.createEmpty(),\n };\n physicalObjectId1 = iModel.elements.insertElement(iModel.elements.createElement(elementProps).toJSON());\n physicalObjectId2 = iModel.elements.insertElement(iModel.elements.createElement(elementProps2).toJSON());\n physicalObjectId3 = iModel.elements.insertElement(iModel.elements.createElement(elementProps).toJSON());\n ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId2).insert();\n ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId3).insert();\n\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\n assert.equal(iModel.elements.getElement(jobSubjectId).parent?.id, IModel.rootSubjectId);\n assert.equal(iModel.elements.getElement(definitionModelId).parent?.id, jobSubjectId);\n assert.equal(iModel.elements.getElement(definitionContainerId).model, definitionModelId);\n assert.equal(iModel.elements.getElement(spatialCategoryId).model, definitionModelId);\n assert.equal(iModel.elements.getElement(nestedSpatialCategoryId).model, definitionContainerId);\n assert.equal(iModel.elements.getElement(drawingDefinitionModelId).parent?.id, jobSubjectId);\n assert.equal(iModel.elements.getElement(drawingCategoryId).model, drawingDefinitionModelId);\n assert.equal(iModel.elements.getElement(drawingSubCategory1Id).parent?.id, drawingCategoryId);\n assert.equal(iModel.elements.getElement(drawingSubCategory2Id).parent?.id, drawingCategoryId);\n assert.equal(iModel.elements.getElement(xsGroup).model, drawingDefinitionModelId);\n assert.equal(iModel.elements.getElement(xsElement).parent?.id, xsGroup);\n assert.equal(iModel.elements.getElement(documentListModelId).parent?.id, jobSubjectId);\n assert.equal(iModel.elements.getElement(drawingModelId).model, documentListModelId);\n assert.equal(iModel.elements.getElement(drawingGraphicId1).model, drawingModelId);\n assert.equal(iModel.elements.getElement(physicalModelId).parent?.id, childSubject);\n assert.equal(iModel.elements.getElement(physicalObjectId1).model, physicalModelId);\n assert.equal(iModel.elements.getElement(physicalObjectId2).model, physicalModelId);\n assert.equal(iModel.elements.getElement(physicalObjectId3).model, physicalModelId);\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\n assert.isTrue(doesModelExist(iModel, definitionModelId));\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\n assert.isTrue(doesModelExist(iModel, drawingDefinitionModelId));\n assert.isTrue(doesModelExist(iModel, drawingModelId));\n assert.isTrue(doesModelExist(iModel, physicalModelId));\n });\n\n afterEach(() => {\n sinon.restore();\n iModel.close();\n });\n\n it(\"DFS search and deleteElementTree\", () => {\n // First, check that DFS search visits elements and models in expected bottom-up order\n {\n const collector1 = new ElementTreeCollector(iModel);\n collector1.collect(jobSubjectId);\n assert.isTrue(collector1.subModels.includes(physicalModelId));\n assert.isTrue(collector1.subModels.includes(drawingModelId));\n assert.isTrue(collector1.subModels.includes(documentListModelId));\n assert.isTrue(collector1.subModels.indexOf(drawingModelId) < collector1.subModels.indexOf(documentListModelId), \"in bottom-up search, a child model should be visited before its parent model\");\n assert.isFalse(collector1.subModels.includes(definitionModelId));\n assert.isTrue(collector1.definitionModels.includes(definitionModelId));\n assert.isFalse(collector1.subModels.includes(definitionContainerId));\n assert.isTrue(collector1.definitionModels.includes(definitionContainerId));\n assert.isFalse(collector1.subModels.includes(drawingDefinitionModelId));\n assert.isTrue(collector1.definitionModels.includes(drawingDefinitionModelId));\n assert.isTrue(collector1.definitions.includes(drawingCategoryId));\n assert.isTrue(collector1.definitions.includes(spatialCategoryId));\n assert.isTrue(collector1.definitions.includes(nestedSpatialCategoryId));\n assert.isFalse(collector1.elements.includes(drawingCategoryId));\n assert.isFalse(collector1.elements.includes(spatialCategoryId));\n assert.isFalse(collector1.elements.includes(nestedSpatialCategoryId));\n assert.isTrue(collector1.elements.indexOf(physicalObjectId1) < collector1.elements.indexOf(physicalModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\n assert.isTrue(collector1.elements.indexOf(drawingGraphicId1) < collector1.elements.indexOf(drawingModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\n assert.isTrue(collector1.elements.indexOf(drawingModelId) < collector1.elements.indexOf(documentListModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\n assert.isTrue(collector1.elements.indexOf(documentListModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(definitionModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(definitionContainerId) < collector1.elements.indexOf(definitionModelId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(drawingDefinitionModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(childSubject) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(physicalModelId) < collector1.elements.indexOf(childSubject), \"in bottom-up search, a child element should be visited before its parent element\");\n }\n\n // Exercise the search filters\n {\n const collector2 = new SelectedElementCollector(iModel, [drawingGraphicId1, spatialCategoryId, nestedSpatialCategoryId, physicalObjectId3]);\n collector2.collect(jobSubjectId);\n assert.isTrue(collector2.definitions.length === 2);\n assert.isTrue(collector2.definitions.includes(spatialCategoryId));\n assert.isTrue(collector2.definitions.includes(nestedSpatialCategoryId));\n assert.isTrue(collector2.elements.length === 2);\n assert.isTrue(collector2.elements.includes(drawingGraphicId1));\n assert.isTrue(collector2.elements.includes(physicalObjectId3));\n }\n\n // Test the deleteElementTree function\n deleteElementTree(iModel, jobSubjectId);\n\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\n assert.isTrue(doesElementExist(iModel, repositoryLinkId), \"RepositoryLink should not have been deleted, since it is not under Job Subject\");\n assert.isFalse(doesElementExist(iModel, definitionModelId));\n assert.isFalse(doesElementExist(iModel, definitionContainerId));\n assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));\n assert.isFalse(doesElementExist(iModel, spatialCategoryId));\n assert.isFalse(doesElementExist(iModel, nestedSpatialCategoryId));\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\n assert.isFalse(doesElementExist(iModel, xsGroup));\n assert.isFalse(doesElementExist(iModel, xsElement));\n assert.isFalse(doesElementExist(iModel, documentListModelId));\n assert.isFalse(doesElementExist(iModel, drawingModelId));\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1));\n assert.isFalse(doesElementExist(iModel, physicalModelId));\n assert.isFalse(doesElementExist(iModel, physicalObjectId1));\n assert.isFalse(doesElementExist(iModel, physicalObjectId2));\n assert.isFalse(doesElementExist(iModel, physicalObjectId3));\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\n assert.isFalse(doesElementExist(iModel, jobSubjectId));\n assert.isFalse(doesModelExist(iModel, definitionModelId));\n assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));\n assert.isFalse(doesModelExist(iModel, drawingModelId));\n assert.isFalse(doesModelExist(iModel, physicalModelId));\n });\n\n it(\"deleteElementSubTrees\", () => {\n /*\n [RepositoryModel]\n RepositoryLink\n Job Subject\n +- DefinitionParitition -- [DefinitionModel]\n | DrawingCategory <-- PRUNE\n | default SubCategory + 2 non-default SubCategories\n | ExternalSourceGroup\n | ExternalSource child1\n +- DefinitionParitition -- [DefinitionModel]\n | SpatialCategory\n | DefinitionContainer\n | SpatialCategory\n |\n +- DocumentList -- [DocumentListModel]\n | Drawing -- [DrawingModel] <-- PRUNE\n | DrawingGraphic \"\n +- Child Subject\n |\n +- PhysicalPartition -- [PhysicalModel]\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\n ^-- PRUNE\n */\n\n const toPrune = new Set<string>();\n toPrune.add(drawingModelId);\n toPrune.add(drawingCategoryId);\n toPrune.add(physicalObjectId3);\n\n deleteElementSubTrees(iModel, jobSubjectId, (elementId) => toPrune.has(elementId));\n\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\n assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));\n assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));\n assert.isFalse(doesElementExist(iModel, drawingModelId));\n assert.isFalse(doesModelExist(iModel, drawingModelId));\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1)); // contents of drawing model should be gone\n assert.isFalse(doesElementExist(iModel, physicalObjectId3));\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\n\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\n assert.isTrue(doesElementExist(iModel, definitionModelId));\n assert.isTrue(doesElementExist(iModel, definitionContainerId));\n assert.isTrue(doesElementExist(iModel, drawingDefinitionModelId));\n assert.equal(iModel.elements.getElement(xsGroup).model, drawingDefinitionModelId);\n assert.equal(iModel.elements.getElement(xsElement).parent?.id, xsGroup);\n assert.isTrue(doesElementExist(iModel, spatialCategoryId));\n assert.isTrue(doesElementExist(iModel, nestedSpatialCategoryId));\n assert.isTrue(doesElementExist(iModel, documentListModelId));\n assert.isTrue(doesElementExist(iModel, physicalModelId));\n assert.isTrue(doesElementExist(iModel, physicalObjectId1));\n assert.isTrue(doesElementExist(iModel, physicalObjectId2));\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\n assert.isTrue(doesElementExist(iModel, jobSubjectId));\n assert.isTrue(doesModelExist(iModel, definitionModelId));\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\n assert.isTrue(doesModelExist(iModel, drawingDefinitionModelId));\n assert.isTrue(doesModelExist(iModel, physicalModelId));\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\n });\n\n it(\"deleteDefinitionPartition\", () => {\n /*\n [RepositoryModel]\n RepositoryLink\n Job Subject\n +- DefinitionParitition -- [DefinitionModel] <-- PRUNE\n | DrawingCategory\n | default SubCategory + 2 non-default SubCategories\n | ExternalSourceGroup\n | ExternalSource child1\n +- DefinitionParitition -- [DefinitionModel]\n | SpatialCategory\n | DefinitionContainer\n | SpatialCategory |\n +- DocumentList -- [DocumentListModel]\n | Drawing -- [DrawingModel]\n | DrawingGraphic\n +- Child Subject\n |\n +- PhysicalPartition -- [PhysicalModel]\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\n */\n\n const toPrune = new Set<string>();\n toPrune.add(drawingDefinitionModelId);\n toPrune.add(documentListModelId); // (also get rid of the elements that use the definitions)\n\n deleteElementSubTrees(iModel, jobSubjectId, (elementId) => toPrune.has(elementId));\n\n assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));\n assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\n assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));\n assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));\n assert.isFalse(doesElementExist(iModel, xsGroup));\n assert.isFalse(doesElementExist(iModel, xsElement));\n assert.isFalse(doesElementExist(iModel, documentListModelId));\n assert.isFalse(doesModelExist(iModel, documentListModelId));\n assert.isFalse(doesElementExist(iModel, drawingModelId));\n assert.isFalse(doesModelExist(iModel, drawingModelId));\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1));\n\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\n assert.isTrue(doesElementExist(iModel, definitionModelId));\n assert.isTrue(doesElementExist(iModel, definitionContainerId));\n assert.isTrue(doesElementExist(iModel, spatialCategoryId));\n assert.isTrue(doesElementExist(iModel, nestedSpatialCategoryId));\n assert.isTrue(doesElementExist(iModel, physicalModelId));\n assert.isTrue(doesElementExist(iModel, physicalObjectId1));\n assert.isTrue(doesElementExist(iModel, physicalObjectId2));\n assert.isTrue(doesElementExist(iModel, physicalObjectId3));\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\n assert.isTrue(doesElementExist(iModel, jobSubjectId));\n assert.isTrue(doesModelExist(iModel, definitionModelId));\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\n assert.isTrue(doesModelExist(iModel, physicalModelId));\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\n });\n});\n"]}
1
+ {"version":3,"file":"ElementTreeWalker.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/ElementTreeWalker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, GeometricElement2dProps, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { Point2d } from \"@itwin/core-geometry\";\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { DefinitionContainer, DefinitionModel, DocumentListModel, Drawing, DrawingCategory, DrawingGraphic, ElementGroupsMembers, ElementOwnsChildElements, ExternalSource, ExternalSourceGroup, IModelDb, Model, PhysicalPartition, SnapshotDb, SpatialCategory, SubCategory, Subject } from \"../../core-backend\";\r\nimport { deleteElementSubTrees, deleteElementTree, ElementTreeBottomUp, ElementTreeWalkerScope } from \"../../ElementTreeWalker\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\n\r\n// Test class that collects the results of a bottom-up tree walk\r\nclass ElementTreeCollector extends ElementTreeBottomUp {\r\n public subModels: Id64Array = [];\r\n public definitionModels: Id64Array = [];\r\n public elements: Id64Array = [];\r\n public definitions: Id64Array = [];\r\n\r\n public constructor(iModel: IModelDb) { super(iModel); }\r\n\r\n public visitModel(model: Model, _scope: ElementTreeWalkerScope): void {\r\n if (model instanceof DefinitionModel)\r\n this.definitionModels.push(model.id);\r\n else\r\n this.subModels.push(model.id);\r\n }\r\n\r\n public visitElement(elementId: Id64String, scope: ElementTreeWalkerScope): void {\r\n if (scope.inDefinitionModel)\r\n this.definitions.push(elementId); // may be some other kind of InformationContentElement - that's OK.\r\n else\r\n this.elements.push(elementId);\r\n }\r\n\r\n public collect(topElement: Id64String): void {\r\n this.processElementTree(topElement, ElementTreeWalkerScope.createTopScope(this._iModel, topElement));\r\n }\r\n}\r\n\r\nclass SelectedElementCollector extends ElementTreeCollector {\r\n public constructor(iModel: IModelDb, private _elementsToReport: Id64Array) { super(iModel); }\r\n public override shouldExploreModel(_model: Model): boolean { return true; }\r\n public override shouldVisitModel(_model: Model): boolean { return false; }\r\n public override shouldVisitElement(elementId: Id64String): boolean { return this._elementsToReport.includes(elementId); }\r\n}\r\n\r\nfunction doesElementExist(iModel: IModelDb, elementId: Id64String): boolean {\r\n return iModel.elements.tryGetElementProps(elementId) !== undefined;\r\n}\r\n\r\nfunction doesModelExist(iModel: IModelDb, mid: Id64String): boolean {\r\n return iModel.models.tryGetModelProps(mid) !== undefined;\r\n}\r\n\r\nfunction doesGroupRelationshipExist(iModel: IModelDb, source: Id64String, target: Id64String): boolean {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModel.withPreparedStatement(`select count(*) from ${ElementGroupsMembers.classFullName} where sourceecinstanceid=? and targetecinstanceid=?`, (stmt) => {\r\n stmt.bindId(1, source);\r\n stmt.bindId(2, target);\r\n stmt.step();\r\n return stmt.getValue(0).getInteger() !== 0;\r\n });\r\n}\r\n\r\ndescribe(\"ElementTreeWalker\", () => {\r\n let iModel: SnapshotDb;\r\n let originalEnv: any;\r\n\r\n let repositoryLinkId: Id64String;\r\n let jobSubjectId: Id64String;\r\n let childSubject: Id64String;\r\n let definitionModelId: Id64String;\r\n let definitionContainerId: Id64String;\r\n let drawingDefinitionModelId: Id64String;\r\n let spatialCategoryId: Id64String;\r\n let nestedSpatialCategoryId: Id64String;\r\n let drawingCategoryId: Id64String;\r\n let drawingSubCategory1Id: Id64String;\r\n let drawingSubCategory2Id: Id64String;\r\n let xsGroup: Id64String;\r\n let xsElement: Id64String;\r\n let documentListModelId: Id64String;\r\n let drawingModelId: Id64String;\r\n let drawingGraphicId1: Id64String;\r\n let physicalModelId: Id64String;\r\n let physicalObjectId1: Id64String;\r\n let physicalObjectId2: Id64String;\r\n let physicalObjectId3: Id64String;\r\n\r\n before(async () => {\r\n originalEnv = { ...process.env };\r\n\r\n IModelTestUtils.registerTestBimSchema();\r\n });\r\n\r\n after(() => {\r\n process.env = originalEnv;\r\n });\r\n\r\n beforeEach(async () => {\r\n // Uncomment the following two lines to debug test failures\r\n // Logger.initializeToConsole();\r\n // Logger.setLevel(\"core-backend.IModelDb.ElementTreeWalker\", LogLevel.Trace);\r\n\r\n const iModelFileName = IModelTestUtils.prepareOutputFile(\"ElementTreeWalker\", \"Test.bim\");\r\n iModel = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"ElementTreeWalker Test\" } });\r\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\r\n await iModel.importSchemas([schemaPathname]); // will throw an exception if import fails\r\n\r\n /*\r\n [RepositoryModel]\r\n RepositoryLink\r\n Job Subject\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | DrawingCategory\r\n | default SubCategory + 2 non-default SubCategories\r\n | ExternalSourceGroup\r\n | ExternalSource child1\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | SpatialCategory\r\n | DefinitionContainer\r\n | SpatialCategory\r\n |\r\n +- DocumentList -- [DocumentListModel]\r\n | Drawing -- [DrawingModel]\r\n | DrawingGraphic\r\n +- Child Subject\r\n |\r\n +- PhysicalPartition -- [PhysicalModel]\r\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\r\n */\r\n\r\n repositoryLinkId = IModelTestUtils.insertRepositoryLink(iModel, \"test link\", \"foo\", \"bar\");\r\n jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, \"Job\").insert();\r\n\r\n childSubject = Subject.insert(iModel, jobSubjectId, \"Child Subject\");\r\n\r\n definitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"Definition\");\r\n spatialCategoryId = SpatialCategory.insert(iModel, definitionModelId, \"SpatialCategory\", new SubCategoryAppearance());\r\n drawingDefinitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"DrawingDefinition\");\r\n drawingCategoryId = DrawingCategory.insert(iModel, drawingDefinitionModelId, \"DrawingCategory\", new SubCategoryAppearance());\r\n drawingSubCategory1Id = SubCategory.insert(iModel, drawingCategoryId, \"SubCategory1\", new SubCategoryAppearance());\r\n drawingSubCategory2Id = SubCategory.insert(iModel, drawingCategoryId, \"SubCategory2\", new SubCategoryAppearance());\r\n\r\n definitionContainerId = DefinitionContainer.insert(iModel, definitionModelId, Code.createEmpty());\r\n nestedSpatialCategoryId = SpatialCategory.insert(iModel, definitionContainerId, \"nested\", {});\r\n\r\n xsGroup = iModel.elements.insertElement({ classFullName: ExternalSourceGroup.classFullName, model: drawingDefinitionModelId, code: Code.createEmpty() });\r\n xsElement = iModel.elements.insertElement({ classFullName: ExternalSource.classFullName, model: drawingDefinitionModelId, parent: new ElementOwnsChildElements(xsGroup), code: Code.createEmpty() });\r\n\r\n documentListModelId = DocumentListModel.insert(iModel, jobSubjectId, \"Document\");\r\n assert.isTrue(Id64.isValidId64(documentListModelId));\r\n drawingModelId = Drawing.insert(iModel, documentListModelId, \"Drawing\");\r\n const drawingGraphicProps1: GeometricElement2dProps = {\r\n classFullName: DrawingGraphic.classFullName,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"DrawingGraphic1\",\r\n geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),\r\n placement: { origin: Point2d.create(2, 2), angle: 0 },\r\n };\r\n drawingGraphicId1 = iModel.elements.insertElement(drawingGraphicProps1);\r\n\r\n [, physicalModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, PhysicalPartition.createCode(iModel, childSubject, \"Physical\"), false, childSubject);\r\n const elementProps: GeometricElementProps = {\r\n classFullName: \"TestBim:TestPhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n };\r\n const elementProps2: GeometricElementProps = {\r\n classFullName: \"TestBim:TestPhysicalObject\",\r\n model: physicalModelId,\r\n category: nestedSpatialCategoryId,\r\n code: Code.createEmpty(),\r\n };\r\n physicalObjectId1 = iModel.elements.insertElement(iModel.elements.createElement(elementProps).toJSON());\r\n physicalObjectId2 = iModel.elements.insertElement(iModel.elements.createElement(elementProps2).toJSON());\r\n physicalObjectId3 = iModel.elements.insertElement(iModel.elements.createElement(elementProps).toJSON());\r\n ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId2).insert();\r\n ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId3).insert();\r\n\r\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\r\n assert.equal(iModel.elements.getElement(jobSubjectId).parent?.id, IModel.rootSubjectId);\r\n assert.equal(iModel.elements.getElement(definitionModelId).parent?.id, jobSubjectId);\r\n assert.equal(iModel.elements.getElement(definitionContainerId).model, definitionModelId);\r\n assert.equal(iModel.elements.getElement(spatialCategoryId).model, definitionModelId);\r\n assert.equal(iModel.elements.getElement(nestedSpatialCategoryId).model, definitionContainerId);\r\n assert.equal(iModel.elements.getElement(drawingDefinitionModelId).parent?.id, jobSubjectId);\r\n assert.equal(iModel.elements.getElement(drawingCategoryId).model, drawingDefinitionModelId);\r\n assert.equal(iModel.elements.getElement(drawingSubCategory1Id).parent?.id, drawingCategoryId);\r\n assert.equal(iModel.elements.getElement(drawingSubCategory2Id).parent?.id, drawingCategoryId);\r\n assert.equal(iModel.elements.getElement(xsGroup).model, drawingDefinitionModelId);\r\n assert.equal(iModel.elements.getElement(xsElement).parent?.id, xsGroup);\r\n assert.equal(iModel.elements.getElement(documentListModelId).parent?.id, jobSubjectId);\r\n assert.equal(iModel.elements.getElement(drawingModelId).model, documentListModelId);\r\n assert.equal(iModel.elements.getElement(drawingGraphicId1).model, drawingModelId);\r\n assert.equal(iModel.elements.getElement(physicalModelId).parent?.id, childSubject);\r\n assert.equal(iModel.elements.getElement(physicalObjectId1).model, physicalModelId);\r\n assert.equal(iModel.elements.getElement(physicalObjectId2).model, physicalModelId);\r\n assert.equal(iModel.elements.getElement(physicalObjectId3).model, physicalModelId);\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\r\n assert.isTrue(doesModelExist(iModel, definitionModelId));\r\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\r\n assert.isTrue(doesModelExist(iModel, drawingDefinitionModelId));\r\n assert.isTrue(doesModelExist(iModel, drawingModelId));\r\n assert.isTrue(doesModelExist(iModel, physicalModelId));\r\n });\r\n\r\n afterEach(() => {\r\n sinon.restore();\r\n iModel.close();\r\n });\r\n\r\n it(\"DFS search and deleteElementTree\", () => {\r\n // First, check that DFS search visits elements and models in expected bottom-up order\r\n {\r\n const collector1 = new ElementTreeCollector(iModel);\r\n collector1.collect(jobSubjectId);\r\n assert.isTrue(collector1.subModels.includes(physicalModelId));\r\n assert.isTrue(collector1.subModels.includes(drawingModelId));\r\n assert.isTrue(collector1.subModels.includes(documentListModelId));\r\n assert.isTrue(collector1.subModels.indexOf(drawingModelId) < collector1.subModels.indexOf(documentListModelId), \"in bottom-up search, a child model should be visited before its parent model\");\r\n assert.isFalse(collector1.subModels.includes(definitionModelId));\r\n assert.isTrue(collector1.definitionModels.includes(definitionModelId));\r\n assert.isFalse(collector1.subModels.includes(definitionContainerId));\r\n assert.isTrue(collector1.definitionModels.includes(definitionContainerId));\r\n assert.isFalse(collector1.subModels.includes(drawingDefinitionModelId));\r\n assert.isTrue(collector1.definitionModels.includes(drawingDefinitionModelId));\r\n assert.isTrue(collector1.definitions.includes(drawingCategoryId));\r\n assert.isTrue(collector1.definitions.includes(spatialCategoryId));\r\n assert.isTrue(collector1.definitions.includes(nestedSpatialCategoryId));\r\n assert.isFalse(collector1.elements.includes(drawingCategoryId));\r\n assert.isFalse(collector1.elements.includes(spatialCategoryId));\r\n assert.isFalse(collector1.elements.includes(nestedSpatialCategoryId));\r\n assert.isTrue(collector1.elements.indexOf(physicalObjectId1) < collector1.elements.indexOf(physicalModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\r\n assert.isTrue(collector1.elements.indexOf(drawingGraphicId1) < collector1.elements.indexOf(drawingModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\r\n assert.isTrue(collector1.elements.indexOf(drawingModelId) < collector1.elements.indexOf(documentListModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\r\n assert.isTrue(collector1.elements.indexOf(documentListModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(definitionModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(definitionContainerId) < collector1.elements.indexOf(definitionModelId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(drawingDefinitionModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(childSubject) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(physicalModelId) < collector1.elements.indexOf(childSubject), \"in bottom-up search, a child element should be visited before its parent element\");\r\n }\r\n\r\n // Exercise the search filters\r\n {\r\n const collector2 = new SelectedElementCollector(iModel, [drawingGraphicId1, spatialCategoryId, nestedSpatialCategoryId, physicalObjectId3]);\r\n collector2.collect(jobSubjectId);\r\n assert.isTrue(collector2.definitions.length === 2);\r\n assert.isTrue(collector2.definitions.includes(spatialCategoryId));\r\n assert.isTrue(collector2.definitions.includes(nestedSpatialCategoryId));\r\n assert.isTrue(collector2.elements.length === 2);\r\n assert.isTrue(collector2.elements.includes(drawingGraphicId1));\r\n assert.isTrue(collector2.elements.includes(physicalObjectId3));\r\n }\r\n\r\n // Test the deleteElementTree function\r\n deleteElementTree(iModel, jobSubjectId);\r\n\r\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\r\n assert.isTrue(doesElementExist(iModel, repositoryLinkId), \"RepositoryLink should not have been deleted, since it is not under Job Subject\");\r\n assert.isFalse(doesElementExist(iModel, definitionModelId));\r\n assert.isFalse(doesElementExist(iModel, definitionContainerId));\r\n assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));\r\n assert.isFalse(doesElementExist(iModel, spatialCategoryId));\r\n assert.isFalse(doesElementExist(iModel, nestedSpatialCategoryId));\r\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\r\n assert.isFalse(doesElementExist(iModel, xsGroup));\r\n assert.isFalse(doesElementExist(iModel, xsElement));\r\n assert.isFalse(doesElementExist(iModel, documentListModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1));\r\n assert.isFalse(doesElementExist(iModel, physicalModelId));\r\n assert.isFalse(doesElementExist(iModel, physicalObjectId1));\r\n assert.isFalse(doesElementExist(iModel, physicalObjectId2));\r\n assert.isFalse(doesElementExist(iModel, physicalObjectId3));\r\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\r\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\r\n assert.isFalse(doesElementExist(iModel, jobSubjectId));\r\n assert.isFalse(doesModelExist(iModel, definitionModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingModelId));\r\n assert.isFalse(doesModelExist(iModel, physicalModelId));\r\n });\r\n\r\n it(\"deleteElementSubTrees\", () => {\r\n /*\r\n [RepositoryModel]\r\n RepositoryLink\r\n Job Subject\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | DrawingCategory <-- PRUNE\r\n | default SubCategory + 2 non-default SubCategories\r\n | ExternalSourceGroup\r\n | ExternalSource child1\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | SpatialCategory\r\n | DefinitionContainer\r\n | SpatialCategory\r\n |\r\n +- DocumentList -- [DocumentListModel]\r\n | Drawing -- [DrawingModel] <-- PRUNE\r\n | DrawingGraphic \"\r\n +- Child Subject\r\n |\r\n +- PhysicalPartition -- [PhysicalModel]\r\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\r\n ^-- PRUNE\r\n */\r\n\r\n const toPrune = new Set<string>();\r\n toPrune.add(drawingModelId);\r\n toPrune.add(drawingCategoryId);\r\n toPrune.add(physicalObjectId3);\r\n\r\n deleteElementSubTrees(iModel, jobSubjectId, (elementId) => toPrune.has(elementId));\r\n\r\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\r\n assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));\r\n assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));\r\n assert.isFalse(doesElementExist(iModel, drawingModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1)); // contents of drawing model should be gone\r\n assert.isFalse(doesElementExist(iModel, physicalObjectId3));\r\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\r\n\r\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\r\n assert.isTrue(doesElementExist(iModel, definitionModelId));\r\n assert.isTrue(doesElementExist(iModel, definitionContainerId));\r\n assert.isTrue(doesElementExist(iModel, drawingDefinitionModelId));\r\n assert.equal(iModel.elements.getElement(xsGroup).model, drawingDefinitionModelId);\r\n assert.equal(iModel.elements.getElement(xsElement).parent?.id, xsGroup);\r\n assert.isTrue(doesElementExist(iModel, spatialCategoryId));\r\n assert.isTrue(doesElementExist(iModel, nestedSpatialCategoryId));\r\n assert.isTrue(doesElementExist(iModel, documentListModelId));\r\n assert.isTrue(doesElementExist(iModel, physicalModelId));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId1));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId2));\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\r\n assert.isTrue(doesElementExist(iModel, jobSubjectId));\r\n assert.isTrue(doesModelExist(iModel, definitionModelId));\r\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\r\n assert.isTrue(doesModelExist(iModel, drawingDefinitionModelId));\r\n assert.isTrue(doesModelExist(iModel, physicalModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\r\n });\r\n\r\n it(\"deleteDefinitionPartition\", () => {\r\n /*\r\n [RepositoryModel]\r\n RepositoryLink\r\n Job Subject\r\n +- DefinitionParitition -- [DefinitionModel] <-- PRUNE\r\n | DrawingCategory\r\n | default SubCategory + 2 non-default SubCategories\r\n | ExternalSourceGroup\r\n | ExternalSource child1\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | SpatialCategory\r\n | DefinitionContainer\r\n | SpatialCategory |\r\n +- DocumentList -- [DocumentListModel]\r\n | Drawing -- [DrawingModel]\r\n | DrawingGraphic\r\n +- Child Subject\r\n |\r\n +- PhysicalPartition -- [PhysicalModel]\r\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\r\n */\r\n\r\n const toPrune = new Set<string>();\r\n toPrune.add(drawingDefinitionModelId);\r\n toPrune.add(documentListModelId); // (also get rid of the elements that use the definitions)\r\n\r\n deleteElementSubTrees(iModel, jobSubjectId, (elementId) => toPrune.has(elementId));\r\n\r\n assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\r\n assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));\r\n assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));\r\n assert.isFalse(doesElementExist(iModel, xsGroup));\r\n assert.isFalse(doesElementExist(iModel, xsElement));\r\n assert.isFalse(doesElementExist(iModel, documentListModelId));\r\n assert.isFalse(doesModelExist(iModel, documentListModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1));\r\n\r\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\r\n assert.isTrue(doesElementExist(iModel, definitionModelId));\r\n assert.isTrue(doesElementExist(iModel, definitionContainerId));\r\n assert.isTrue(doesElementExist(iModel, spatialCategoryId));\r\n assert.isTrue(doesElementExist(iModel, nestedSpatialCategoryId));\r\n assert.isTrue(doesElementExist(iModel, physicalModelId));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId1));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId2));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId3));\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\r\n assert.isTrue(doesElementExist(iModel, jobSubjectId));\r\n assert.isTrue(doesModelExist(iModel, definitionModelId));\r\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\r\n assert.isTrue(doesModelExist(iModel, physicalModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GetTextureImage.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/GetTextureImage.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,MAAkB,CAAC;IAEvB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5K,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAE5B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;YACxI,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;YACpH,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;YACtL,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;YACpJ,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;QACvJ,CAAC,CAAC,CAAC;IACL,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 { TextureLoadProps } from \"@itwin/core-common\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"IModelDb.queryTextureData\", () => {\n let imodel: SnapshotDb;\n\n before(() => {\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"ElementGraphics\", \"mirukuru.ibim\"), IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\"));\n });\n\n after(() => imodel.close());\n\n it(\"returns undefined if texture not found\", async () => {\n expect(await imodel.queryTextureData({ name: \"0x123\" })).to.be.undefined;\n });\n\n describe(\"throws\", () => {\n it(\"if name is not a valid Id\", async () => {\n await expect(imodel.queryTextureData({} as unknown as TextureLoadProps)).to.be.rejectedWith(\"name property must be a valid Id64String\");\n await expect(imodel.queryTextureData({ name: \"0\" })).to.be.rejectedWith(\"name property must be a valid Id64String\");\n await expect(imodel.queryTextureData({ name: \"NotAnId\" })).to.be.rejectedWith(\"name property must be a valid Id64String\");\n });\n\n it(\"if max size is not a positive number\", async () => {\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: \"25\" } as unknown as TextureLoadProps)).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: 0 })).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: -1 })).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\n });\n });\n});\n"]}
1
+ {"version":3,"file":"GetTextureImage.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/GetTextureImage.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,MAAkB,CAAC;IAEvB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5K,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAE5B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;YACxI,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;YACpH,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;YACtL,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;YACpJ,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;QACvJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport { TextureLoadProps } from \"@itwin/core-common\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"IModelDb.queryTextureData\", () => {\r\n let imodel: SnapshotDb;\r\n\r\n before(() => {\r\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"ElementGraphics\", \"mirukuru.ibim\"), IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\"));\r\n });\r\n\r\n after(() => imodel.close());\r\n\r\n it(\"returns undefined if texture not found\", async () => {\r\n expect(await imodel.queryTextureData({ name: \"0x123\" })).to.be.undefined;\r\n });\r\n\r\n describe(\"throws\", () => {\r\n it(\"if name is not a valid Id\", async () => {\r\n await expect(imodel.queryTextureData({} as unknown as TextureLoadProps)).to.be.rejectedWith(\"name property must be a valid Id64String\");\r\n await expect(imodel.queryTextureData({ name: \"0\" })).to.be.rejectedWith(\"name property must be a valid Id64String\");\r\n await expect(imodel.queryTextureData({ name: \"NotAnId\" })).to.be.rejectedWith(\"name property must be a valid Id64String\");\r\n });\r\n\r\n it(\"if max size is not a positive number\", async () => {\r\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: \"25\" } as unknown as TextureLoadProps)).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\r\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: 0 })).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\r\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: -1 })).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\r\n });\r\n });\r\n});\r\n"]}
@@ -62,7 +62,7 @@ import { DbResult, Guid, Id64, IModelStatus, Logger, OpenMode, ProcessDetector }
62
62
  import { BisCodeSpec, BriefcaseIdValue, Code, CodeScopeSpec, CodeSpec, ColorByName, ColorDef, DisplayStyleSettings, EcefLocation, FontMap, FontType, GeoCoordStatus, GeographicCRS, GeometryParams, GeometryStreamBuilder, ImageSourceFormat, IModel, IModelError, RelatedElement, RenderMode, SchemaState, SubCategoryAppearance, TextureMapping, TextureMapUnits, ViewFlags, } from "@itwin/core-common";
63
63
  import { Geometry, LineString3d, Loop, Matrix4d, Point3d, PolyfaceBuilder, Range3d, StrokeOptions, Transform, YawPitchRollAngles, } from "@itwin/core-geometry";
64
64
  import { V2CheckpointManager } from "../../CheckpointManager";
65
- import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
65
+ import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GenericGraphicalType2d, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
66
66
  import { BriefcaseDb } from "../../IModelDb";
67
67
  import { HubMock } from "../../internal/HubMock";
68
68
  import { KnownTestLocations } from "../KnownTestLocations";
@@ -1301,12 +1301,15 @@ describe("iModel", () => {
1301
1301
  // Delete the model
1302
1302
  testImodel.models.deleteModel(newModelId);
1303
1303
  // Test insertModel error handling
1304
- assert.throws(() => {
1304
+ try {
1305
1305
  testImodel.models.insertModel({
1306
1306
  classFullName: DefinitionModel.classFullName,
1307
1307
  modeledElement: { id: "0x10000000bad" },
1308
1308
  });
1309
- }, IModelError);
1309
+ }
1310
+ catch (error) {
1311
+ assert.isTrue(error instanceof IModelError || error.iTwinErrorId !== undefined);
1312
+ }
1310
1313
  });
1311
1314
  it("should create model with custom relationship to modeled element", async () => {
1312
1315
  const testImodel = imodel1;
@@ -2086,10 +2089,41 @@ describe("iModel", () => {
2086
2089
  db.abandonChanges();
2087
2090
  db.close();
2088
2091
  });
2092
+ it("Cache cleared on abandonChanges", () => {
2093
+ const standaloneFile = IModelTestUtils.prepareOutputFile("IModel", "StandaloneReadWrite.bim");
2094
+ const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: "Standalone" } });
2095
+ db.saveChanges();
2096
+ const code = Code.createEmpty();
2097
+ code.value = "foo";
2098
+ const props = {
2099
+ classFullName: GenericGraphicalType2d.classFullName,
2100
+ model: IModel.dictionaryId,
2101
+ code,
2102
+ };
2103
+ const id = db.elements.insertElement(props);
2104
+ const element1 = db.elements.getElementProps(id);
2105
+ db.abandonChanges();
2106
+ code.value = "bar";
2107
+ const props2 = {
2108
+ classFullName: GenericGraphicalType2d.classFullName,
2109
+ model: IModel.dictionaryId,
2110
+ code,
2111
+ };
2112
+ const id2 = db.elements.insertElement(props2);
2113
+ expect(id2).to.equal(id);
2114
+ const element2 = db.elements.getElementProps(id2);
2115
+ expect(element2).to.not.equal(element1);
2116
+ db.abandonChanges();
2117
+ db.close();
2118
+ });
2089
2119
  it("Standalone iModel properties", () => {
2090
2120
  const standaloneRootSubjectName = "Standalone";
2091
2121
  const standaloneFile1 = IModelTestUtils.prepareOutputFile("IModel", "Standalone1.bim");
2092
- let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName } });
2122
+ const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });
2123
+ const geographicCoordinateSystem = {
2124
+ horizontalCRS: { id: "10TM115-27" },
2125
+ };
2126
+ let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName }, ecefLocation, geographicCoordinateSystem });
2093
2127
  assert.isTrue(standaloneDb1.isStandaloneDb());
2094
2128
  assert.isTrue(standaloneDb1.isStandalone);
2095
2129
  assert.isFalse(standaloneDb1.isReadonly, "Expect standalone iModels to be read-write during create");
@@ -2102,6 +2136,8 @@ describe("iModel", () => {
2102
2136
  assert.equal(standaloneDb1.iTwinId, Guid.empty);
2103
2137
  assert.strictEqual("", standaloneDb1.changeset.id);
2104
2138
  assert.strictEqual(0, standaloneDb1.changeset.index);
2139
+ assert.deepEqual(standaloneDb1.ecefLocation?.origin, ecefLocation.origin, "standalone ecefLocation should be set");
2140
+ assert.strictEqual(standaloneDb1.geographicCoordinateSystem?.horizontalCRS?.id, "10TM115-27", "standalone coordinate system should be set");
2105
2141
  assert.equal(standaloneDb1.openMode, OpenMode.ReadWrite);
2106
2142
  standaloneDb1.close();
2107
2143
  assert.isFalse(standaloneDb1.isOpen);
@@ -2119,7 +2155,11 @@ describe("iModel", () => {
2119
2155
  const snapshotFile2 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot2.bim");
2120
2156
  const snapshotFile3 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot3.bim");
2121
2157
  const imodel = await generateTestSnapshot("test_for_snapshot.bim", "test.bim");
2122
- let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true });
2158
+ const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });
2159
+ const geographicCoordinateSystem = {
2160
+ horizontalCRS: { id: "10TM115-27" },
2161
+ };
2162
+ let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true, ecefLocation, geographicCoordinateSystem });
2123
2163
  let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);
2124
2164
  let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });
2125
2165
  assert.isTrue(snapshotDb1.isSnapshotDb());
@@ -2156,6 +2196,8 @@ describe("iModel", () => {
2156
2196
  assert.isTrue(snapshotDb1.isOpen);
2157
2197
  assert.isTrue(snapshotDb2.isOpen);
2158
2198
  assert.isTrue(snapshotDb3.isOpen);
2199
+ assert.deepEqual(snapshotDb1.ecefLocation?.origin, ecefLocation.origin, "snapshot ecefLocation should be set");
2200
+ assert.strictEqual(snapshotDb1.geographicCoordinateSystem?.horizontalCRS?.id, "10TM115-27", "snapshot coordinate system should be set");
2159
2201
  snapshotDb1.close();
2160
2202
  snapshotDb2.close();
2161
2203
  snapshotDb3.close();
@@ -2587,6 +2629,32 @@ describe("iModel", () => {
2587
2629
  expect(categ3.code.value).to.equal(code3.trimmedCodeVal);
2588
2630
  imodel.close();
2589
2631
  });
2632
+ it("should throw iTwinErrors on element CRUD opertion fails", async () => {
2633
+ const code = Code.createEmpty();
2634
+ code.value = "foo";
2635
+ const props = {
2636
+ classFullName: GenericGraphicalType2d.classFullName,
2637
+ model: IModel.dictionaryId,
2638
+ code,
2639
+ };
2640
+ imodel1.elements.insertElement(props);
2641
+ expect(() => imodel1.elements.insertElement(props)).throws("Error inserting element [duplicate code]").to.have.property("iTwinErrorId");
2642
+ const updateProps = {
2643
+ id: Id64.fromString("0x111111"),
2644
+ classFullName: GenericGraphicalType2d.classFullName,
2645
+ model: IModel.dictionaryId,
2646
+ code,
2647
+ };
2648
+ expect(() => imodel1.elements.updateElement(updateProps)).throws(`Error updating element [missing id], id: ${updateProps.id}`).to.have.property("iTwinErrorId");
2649
+ expect(() => imodel1.elements.deleteElement(updateProps.id)).throws(`Error deleting element [missing id], id: ${updateProps.id}`).to.have.property("iTwinErrorId");
2650
+ expect(() => imodel1.models.insertModel({ classFullName: DefinitionModel.classFullName, modeledElement: { id: "0x10000000bad" } })).throws("Error inserting model [error=10004], class=BisCore:DefinitionModel").to.have.property("iTwinErrorId");
2651
+ expect(() => imodel1.models.updateModel({
2652
+ id: Id64.fromString("0x111111"),
2653
+ modeledElement: { id: Id64.fromString("0x111111") },
2654
+ classFullName: ""
2655
+ })).throws(`Error updating model [missing id], id: ${Id64.fromString("0x111111")}`).to.have.property("iTwinErrorId");
2656
+ expect(() => imodel1.models.deleteModel(Id64.fromString("0x111111"))).throws(`Error deleting model [missing id], id: ${Id64.fromString("0x111111")}`).to.have.property("iTwinErrorId");
2657
+ });
2590
2658
  it("throws NotFound when attempting to access element props after closing the iModel", () => {
2591
2659
  const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "accessAfterClose.bim");
2592
2660
  const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "accessAfterClose" } });
@@ -2622,5 +2690,160 @@ describe("iModel", () => {
2622
2690
  expect(() => imodel.relationships.insertInstance(props)).to.throw(`Failed to insert relationship [${imodelPath}]: rc=2067, constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)`);
2623
2691
  imodel.close();
2624
2692
  });
2693
+ function createElemProps(_imodel, modId, catId, className) {
2694
+ // Create props
2695
+ const elementProps = {
2696
+ classFullName: className,
2697
+ model: modId,
2698
+ category: catId,
2699
+ code: Code.createEmpty(),
2700
+ };
2701
+ return elementProps;
2702
+ }
2703
+ function insertElement(imodel, mId, cId, cName, propName) {
2704
+ const elementProps = createElemProps(imodel, mId, cId, cName);
2705
+ const geomElement = imodel.elements.createElement(elementProps);
2706
+ geomElement.name = propName; // Add a custom property to the element
2707
+ const id = imodel.elements.insertElement(geomElement.toJSON());
2708
+ assert.isTrue(Id64.isValidId64(id), "insert failed");
2709
+ return id;
2710
+ }
2711
+ function validateADrivesBRowCount(imodel, expectedRows) {
2712
+ const reader = IModelTestUtils.executeQuery(imodel, `select * from trs.ADrivesB`);
2713
+ assert.strictEqual(reader.length, expectedRows, `Expected ${expectedRows} rows in trs.ADrivesB table`);
2714
+ }
2715
+ function validateNavProp(imodel, expectedNavPropValue) {
2716
+ const reader = IModelTestUtils.executeQuery(imodel, `select NavPropChildB from trs.ChildA`);
2717
+ assert.strictEqual(reader.length, 1);
2718
+ assert.deepEqual(reader[0].navPropChildB, expectedNavPropValue, `Expected NavPropChildB to be "${expectedNavPropValue}"`);
2719
+ }
2720
+ it("Validate invalid relationship classes being inserted/updated", async () => {
2721
+ const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "invalidRelationshipClass.bim");
2722
+ if (IModelJsFs.existsSync(imodelPath))
2723
+ IModelJsFs.unlinkSync(imodelPath);
2724
+ const testImodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "invalidRelationshipClass" } });
2725
+ await testImodel.importSchemaStrings([
2726
+ `<?xml version="1.0" encoding="UTF-8"?>
2727
+ <ECSchema schemaName="TestRelationSchema" alias="trs" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
2728
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
2729
+ <ECEntityClass typeName="TestElement">
2730
+ <BaseClass>bis:PhysicalElement</BaseClass>
2731
+ <ECProperty propertyName="Name" typeName="string" />
2732
+ </ECEntityClass>
2733
+
2734
+ <ECEntityClass typeName="ChildA" >
2735
+ <BaseClass>TestElement</BaseClass>
2736
+ <ECNavigationProperty propertyName="NavPropChildB" relationshipName="ADrivesB" direction="Forward" readOnly="True">
2737
+ </ECNavigationProperty>
2738
+ </ECEntityClass>
2739
+
2740
+ <ECEntityClass typeName="ChildB" >
2741
+ <BaseClass>TestElement</BaseClass>
2742
+ </ECEntityClass>
2743
+
2744
+ <ECRelationshipClass typeName="ADrivesB" strengthDirection="Backward" strength="referencing" modifier="Sealed">
2745
+ <Source multiplicity="(0..*)" polymorphic="true" roleLabel="drives">
2746
+ <Class class="ChildA"/>
2747
+ </Source>
2748
+ <Target multiplicity="(0..1)" polymorphic="true" roleLabel="is driven by">
2749
+ <Class class="ChildB"/>
2750
+ </Target>
2751
+ </ECRelationshipClass>
2752
+
2753
+ <ECEntityClass typeName="ChildC">
2754
+ <BaseClass>TestElement</BaseClass>
2755
+ </ECEntityClass>
2756
+
2757
+ <ECEntityClass typeName="ChildD">
2758
+ <BaseClass>TestElement</BaseClass>
2759
+ </ECEntityClass>
2760
+
2761
+ <ECRelationshipClass typeName="CIsRelatedToD" strength="referencing" modifier="Sealed">
2762
+ <BaseClass>bis:ElementRefersToElements</BaseClass>
2763
+ <Source multiplicity="(0..*)" roleLabel="IsRelatedTo" polymorphic="true">
2764
+ <Class class="ChildC"/>
2765
+ </Source>
2766
+ <Target multiplicity="(0..*)" roleLabel="IsRelatedTo (Reversed)" polymorphic="true">
2767
+ <Class class="ChildD"/>
2768
+ </Target>
2769
+ </ECRelationshipClass>
2770
+ </ECSchema>`
2771
+ ]);
2772
+ // Enable ECSQL write validation and verify it's set
2773
+ const pragmaRows = IModelTestUtils.executeQuery(testImodel, `PRAGMA validate_ecsql_writes=true`);
2774
+ assert.exists(pragmaRows);
2775
+ assert.strictEqual(pragmaRows[0].validate_ecsql_writes, true);
2776
+ // Ensure ADrivesB table is empty before test
2777
+ validateADrivesBRowCount(testImodel, 0);
2778
+ // Create a physical model and spatial category if needed
2779
+ const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(testImodel, Code.createEmpty(), true);
2780
+ let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, "MySpatialCategory");
2781
+ if (!spatialCategoryId) {
2782
+ spatialCategoryId = SpatialCategory.insert(testImodel, IModel.dictionaryId, "MySpatialCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
2783
+ }
2784
+ // Insert a ChildB element to be referenced by ChildA
2785
+ const idB = insertElement(testImodel, newModelId, spatialCategoryId, "TestRelationSchema:ChildB", "ChildBElement");
2786
+ assert.isTrue(Id64.isValidId64(idB), "Insert ChildBElement failed");
2787
+ testImodel.saveChanges();
2788
+ // Prepare base props for ChildA
2789
+ const elementProps = createElemProps(testImodel, newModelId, spatialCategoryId, "TestRelationSchema:ChildA");
2790
+ // Test various relationship class names for navigation property
2791
+ const testCases = [
2792
+ { name: "trs:ADrivesB", shouldSucceed: true, expectedRows: 1 },
2793
+ { name: "trs.FakeClass", shouldSucceed: true, expectedRows: 0 },
2794
+ { name: "trs:ChildA", shouldSucceed: false, expectedRows: 0 },
2795
+ { name: "trs:ChildB", shouldSucceed: false, expectedRows: 0 },
2796
+ { name: "trs:CIsRelatedToD", shouldSucceed: false, expectedRows: 0 },
2797
+ ];
2798
+ for (const { name, shouldSucceed, expectedRows } of testCases) {
2799
+ const elemRef = new RelatedElement({ id: idB, relClassName: name });
2800
+ elementProps.navPropChildB = elemRef;
2801
+ elementProps.name = "ChildAElement";
2802
+ const geomElement = testImodel.elements.createElement(elementProps);
2803
+ let idA;
2804
+ try {
2805
+ idA = testImodel.elements.insertElement(geomElement.toJSON());
2806
+ if (shouldSucceed)
2807
+ assert.isTrue(Id64.isValidId64(idA), `Insert should have succeeded for ${name}.`);
2808
+ else
2809
+ assert.fail(`Insert should have failed for ${name}.`);
2810
+ }
2811
+ catch (err) {
2812
+ if (shouldSucceed)
2813
+ assert.fail(`Insert should have succeeded for ${name}. Error: ${err.message}`);
2814
+ // If should not succeed, error is expected
2815
+ }
2816
+ // Validate row count in ADrivesB table
2817
+ validateADrivesBRowCount(testImodel, expectedRows);
2818
+ // If insert succeeded, test update and delete scenarios
2819
+ if (expectedRows === 1 && idA !== undefined) {
2820
+ validateNavProp(testImodel, { id: idB, relClassName: "TestRelationSchema.ADrivesB" });
2821
+ const editElem = testImodel.elements.getElement(idA);
2822
+ editElem.navPropChildB = new RelatedElement({ id: idB, relClassName: "trs.FakeClass" });
2823
+ editElem.name = "ChildAElementUpdated";
2824
+ testImodel.elements.updateElement(editElem);
2825
+ validateADrivesBRowCount(testImodel, 1);
2826
+ validateNavProp(testImodel, { id: idB, relClassName: "TestRelationSchema.ADrivesB" });
2827
+ const editedElem = testImodel.elements.getElement(idA);
2828
+ assert.equal(editedElem.name, "ChildAElementUpdated", `Expected name to be "ChildAElementUpdated" after update, but got "${editedElem.name}"`);
2829
+ assert.strictEqual(editedElem.navPropChildB.relClassName, "TestRelationSchema.ADrivesB", `Expected navPropChildB to be "TestRelationSchema.ADrivesB" after update, but got "${editedElem.navPropChildB}"`);
2830
+ // Set the nav prop value to null
2831
+ editElem.name = "ChildAElementNulled";
2832
+ editElem.navPropChildB = null;
2833
+ testImodel.elements.updateElement(editElem);
2834
+ validateADrivesBRowCount(testImodel, 0);
2835
+ const nulledElem = testImodel.elements.getElement(idA);
2836
+ assert.equal(nulledElem.name, "ChildAElementNulled", `Expected name to be "ChildAElementNulled" after nulling, but got "${nulledElem.name}"`);
2837
+ assert.isUndefined(nulledElem.navPropChildB, `Expected navPropChildB to be undefined after nulling, but got "${nulledElem.navPropChildB}"`);
2838
+ if (shouldSucceed) {
2839
+ // Delete the element
2840
+ testImodel.elements.deleteElement(idA);
2841
+ assert.isUndefined(testImodel.elements.tryGetElement(idA), `Expected element with id ${idA} to be deleted, but it still exists.`);
2842
+ }
2843
+ }
2844
+ testImodel.abandonChanges();
2845
+ }
2846
+ testImodel.close();
2847
+ });
2625
2848
  });
2626
2849
  //# sourceMappingURL=IModel.test.js.map