@itwin/core-backend 5.10.0-dev.1 → 5.10.0-dev.4

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 (424) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChangesetReader.js.map +1 -1
  14. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  15. package/lib/cjs/ChannelControl.js.map +1 -1
  16. package/lib/cjs/CheckpointManager.js.map +1 -1
  17. package/lib/cjs/ClassRegistry.js +5 -5
  18. package/lib/cjs/ClassRegistry.js.map +1 -1
  19. package/lib/cjs/CloudSqlite.js.map +1 -1
  20. package/lib/cjs/CodeService.js.map +1 -1
  21. package/lib/cjs/CodeSpecs.js.map +1 -1
  22. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  23. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  24. package/lib/cjs/DevTools.js.map +1 -1
  25. package/lib/cjs/DisplayStyle.js.map +1 -1
  26. package/lib/cjs/ECDb.js.map +1 -1
  27. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  28. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  29. package/lib/cjs/ECSqlStatement.js.map +1 -1
  30. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  31. package/lib/cjs/EditTxn.js.map +1 -1
  32. package/lib/cjs/Element.js.map +1 -1
  33. package/lib/cjs/ElementAspect.js.map +1 -1
  34. package/lib/cjs/ElementGraphics.js.map +1 -1
  35. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  36. package/lib/cjs/Entity.js.map +1 -1
  37. package/lib/cjs/EntityReferences.js.map +1 -1
  38. package/lib/cjs/ExportGraphics.js.map +1 -1
  39. package/lib/cjs/ExternalSource.js.map +1 -1
  40. package/lib/cjs/FontFile.js.map +1 -1
  41. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  42. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  43. package/lib/cjs/GeometrySummary.js +47 -47
  44. package/lib/cjs/GeometrySummary.js.map +1 -1
  45. package/lib/cjs/IModelDb.js +8 -8
  46. package/lib/cjs/IModelDb.js.map +1 -1
  47. package/lib/cjs/IModelDbFonts.js.map +1 -1
  48. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  49. package/lib/cjs/IModelHost.js.map +1 -1
  50. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  51. package/lib/cjs/IModelJsFs.js.map +1 -1
  52. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  53. package/lib/cjs/IpcHost.js.map +1 -1
  54. package/lib/cjs/LineStyle.js.map +1 -1
  55. package/lib/cjs/LocalHub.js +1 -1
  56. package/lib/cjs/LocalHub.js.map +1 -1
  57. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  58. package/lib/cjs/LockControl.js.map +1 -1
  59. package/lib/cjs/Material.js.map +1 -1
  60. package/lib/cjs/Model.js.map +1 -1
  61. package/lib/cjs/NativeAppStorage.js.map +1 -1
  62. package/lib/cjs/NativeHost.js.map +1 -1
  63. package/lib/cjs/NavigationRelationship.js.map +1 -1
  64. package/lib/cjs/PartialChangeUnifier.js +7 -7
  65. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  66. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  67. package/lib/cjs/PropertyStore.js.map +1 -1
  68. package/lib/cjs/Relationship.js.map +1 -1
  69. package/lib/cjs/RpcBackend.js.map +1 -1
  70. package/lib/cjs/SQLiteDb.js.map +1 -1
  71. package/lib/cjs/Schema.js.map +1 -1
  72. package/lib/cjs/SchemaSync.js.map +1 -1
  73. package/lib/cjs/SchemaUtils.js.map +1 -1
  74. package/lib/cjs/SheetIndex.js.map +1 -1
  75. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  76. package/lib/cjs/SqliteStatement.js.map +1 -1
  77. package/lib/cjs/StashManager.js.map +1 -1
  78. package/lib/cjs/Texture.js.map +1 -1
  79. package/lib/cjs/TileStorage.js.map +1 -1
  80. package/lib/cjs/TxnManager.js.map +1 -1
  81. package/lib/cjs/ViewDefinition.js.map +1 -1
  82. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  83. package/lib/cjs/ViewStore.js.map +1 -1
  84. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  85. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  86. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  87. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  88. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  89. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  91. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  92. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  93. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  94. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  95. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  96. package/lib/cjs/core-backend.js.map +1 -1
  97. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  98. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  99. package/lib/cjs/domains/GenericElements.js.map +1 -1
  100. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  101. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  102. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  103. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  104. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  105. package/lib/cjs/internal/HubMock.js.map +1 -1
  106. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  107. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  108. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  109. package/lib/cjs/internal/NoLocks.js.map +1 -1
  110. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  111. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  112. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  113. package/lib/cjs/internal/Symbols.js.map +1 -1
  114. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  115. package/lib/cjs/internal/cross-package.js.map +1 -1
  116. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  117. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  118. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  119. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  120. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  121. package/lib/cjs/rpc/multipart.js.map +1 -1
  122. package/lib/cjs/rpc/tracing.js.map +1 -1
  123. package/lib/cjs/rpc/web/logging.js.map +1 -1
  124. package/lib/cjs/rpc/web/request.js.map +1 -1
  125. package/lib/cjs/rpc/web/response.js.map +1 -1
  126. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  127. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  128. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  129. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  130. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  131. package/lib/cjs/workspace/Settings.js.map +1 -1
  132. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  133. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  134. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  135. package/lib/cjs/workspace/Workspace.js.map +1 -1
  136. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  137. package/lib/esm/BackendHubAccess.js.map +1 -1
  138. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  139. package/lib/esm/BisCoreSchema.js.map +1 -1
  140. package/lib/esm/BlobContainerService.js.map +1 -1
  141. package/lib/esm/BriefcaseManager.js.map +1 -1
  142. package/lib/esm/CatalogDb.js.map +1 -1
  143. package/lib/esm/Category.js.map +1 -1
  144. package/lib/esm/ChangeSummaryManager.js +2 -2
  145. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  146. package/lib/esm/ChangedElementsDb.js.map +1 -1
  147. package/lib/esm/ChangesetECAdaptor.js +248 -248
  148. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  149. package/lib/esm/ChangesetReader.js.map +1 -1
  150. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  151. package/lib/esm/ChannelControl.js.map +1 -1
  152. package/lib/esm/CheckpointManager.js.map +1 -1
  153. package/lib/esm/ClassRegistry.js +5 -5
  154. package/lib/esm/ClassRegistry.js.map +1 -1
  155. package/lib/esm/CloudSqlite.js.map +1 -1
  156. package/lib/esm/CodeService.js.map +1 -1
  157. package/lib/esm/CodeSpecs.js.map +1 -1
  158. package/lib/esm/ConcurrentQuery.js.map +1 -1
  159. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  160. package/lib/esm/DevTools.js.map +1 -1
  161. package/lib/esm/DisplayStyle.js.map +1 -1
  162. package/lib/esm/ECDb.js.map +1 -1
  163. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  164. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  165. package/lib/esm/ECSqlStatement.js.map +1 -1
  166. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  167. package/lib/esm/EditTxn.js.map +1 -1
  168. package/lib/esm/Element.js.map +1 -1
  169. package/lib/esm/ElementAspect.js.map +1 -1
  170. package/lib/esm/ElementGraphics.js.map +1 -1
  171. package/lib/esm/ElementTreeWalker.js.map +1 -1
  172. package/lib/esm/Entity.js.map +1 -1
  173. package/lib/esm/EntityReferences.js.map +1 -1
  174. package/lib/esm/ExportGraphics.js.map +1 -1
  175. package/lib/esm/ExternalSource.js.map +1 -1
  176. package/lib/esm/FontFile.js.map +1 -1
  177. package/lib/esm/GeoCoordConfig.js.map +1 -1
  178. package/lib/esm/GeographicCRSServices.js.map +1 -1
  179. package/lib/esm/GeometrySummary.js +47 -47
  180. package/lib/esm/GeometrySummary.js.map +1 -1
  181. package/lib/esm/IModelDb.js +8 -8
  182. package/lib/esm/IModelDb.js.map +1 -1
  183. package/lib/esm/IModelDbFonts.js.map +1 -1
  184. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  185. package/lib/esm/IModelHost.js.map +1 -1
  186. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  187. package/lib/esm/IModelJsFs.js.map +1 -1
  188. package/lib/esm/ImageSourceConversion.js.map +1 -1
  189. package/lib/esm/IpcHost.js.map +1 -1
  190. package/lib/esm/LineStyle.js.map +1 -1
  191. package/lib/esm/LocalHub.js +1 -1
  192. package/lib/esm/LocalHub.js.map +1 -1
  193. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  194. package/lib/esm/LockControl.js.map +1 -1
  195. package/lib/esm/Material.js.map +1 -1
  196. package/lib/esm/Model.js.map +1 -1
  197. package/lib/esm/NativeAppStorage.js.map +1 -1
  198. package/lib/esm/NativeHost.js.map +1 -1
  199. package/lib/esm/NavigationRelationship.js.map +1 -1
  200. package/lib/esm/PartialChangeUnifier.js +7 -7
  201. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  202. package/lib/esm/PromiseMemoizer.js.map +1 -1
  203. package/lib/esm/PropertyStore.js.map +1 -1
  204. package/lib/esm/Relationship.js.map +1 -1
  205. package/lib/esm/RpcBackend.js.map +1 -1
  206. package/lib/esm/SQLiteDb.js.map +1 -1
  207. package/lib/esm/Schema.js.map +1 -1
  208. package/lib/esm/SchemaSync.js.map +1 -1
  209. package/lib/esm/SchemaUtils.js.map +1 -1
  210. package/lib/esm/SheetIndex.js.map +1 -1
  211. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  212. package/lib/esm/SqliteStatement.js.map +1 -1
  213. package/lib/esm/StashManager.js.map +1 -1
  214. package/lib/esm/Texture.js.map +1 -1
  215. package/lib/esm/TileStorage.js.map +1 -1
  216. package/lib/esm/TxnManager.js.map +1 -1
  217. package/lib/esm/ViewDefinition.js.map +1 -1
  218. package/lib/esm/ViewStateHydrator.js.map +1 -1
  219. package/lib/esm/ViewStore.js.map +1 -1
  220. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  221. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  222. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  223. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  224. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  225. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  226. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  227. package/lib/esm/core-backend.js.map +1 -1
  228. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  229. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  230. package/lib/esm/domains/GenericElements.js.map +1 -1
  231. package/lib/esm/domains/GenericSchema.js.map +1 -1
  232. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  233. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  234. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  235. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  236. package/lib/esm/internal/HubMock.js.map +1 -1
  237. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  238. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  239. package/lib/esm/internal/NativePlatform.js.map +1 -1
  240. package/lib/esm/internal/NoLocks.js.map +1 -1
  241. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  242. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  243. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  244. package/lib/esm/internal/Symbols.js.map +1 -1
  245. package/lib/esm/internal/annotations/fields.js.map +1 -1
  246. package/lib/esm/internal/cross-package.js.map +1 -1
  247. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  248. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  249. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  250. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  251. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  252. package/lib/esm/rpc/multipart.js.map +1 -1
  253. package/lib/esm/rpc/tracing.js.map +1 -1
  254. package/lib/esm/rpc/web/logging.js.map +1 -1
  255. package/lib/esm/rpc/web/request.js.map +1 -1
  256. package/lib/esm/rpc/web/response.js.map +1 -1
  257. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  258. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  259. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  260. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  261. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  262. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  263. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  264. package/lib/esm/test/AttachDb.test.js +11 -11
  265. package/lib/esm/test/AttachDb.test.js.map +1 -1
  266. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  267. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  268. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  269. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  270. package/lib/esm/test/IModelHost.test.js.map +1 -1
  271. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  272. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  273. package/lib/esm/test/IpcHost.test.js.map +1 -1
  274. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  275. package/lib/esm/test/PrintElementTree.js.map +1 -1
  276. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  277. package/lib/esm/test/RevisionUtility.js.map +1 -1
  278. package/lib/esm/test/SchemaUtils.test.js +25 -25
  279. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  280. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  281. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  282. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  283. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  284. package/lib/esm/test/TestEditTxn.js.map +1 -1
  285. package/lib/esm/test/TestUtils.js.map +1 -1
  286. package/lib/esm/test/annotations/Fields.test.js +53 -53
  287. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  288. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  289. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  290. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  291. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  292. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  293. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  294. package/lib/esm/test/categories/Category.test.js.map +1 -1
  295. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  296. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  297. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  298. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  299. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  300. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  301. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  302. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  303. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  304. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  305. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  306. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  307. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  308. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  309. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  310. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  311. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  312. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  313. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  314. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  315. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  316. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  317. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  318. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  319. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  320. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  321. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  322. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  323. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  324. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  325. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  326. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  327. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  328. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  329. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  330. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  331. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  332. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  333. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  334. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  335. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  336. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  337. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  338. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  339. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  340. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  341. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  342. package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
  343. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  344. package/lib/esm/test/imageData.js.map +1 -1
  345. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  346. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  347. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  348. package/lib/esm/test/imodel/IModel.test.js +44 -44
  349. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  350. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  351. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  352. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  353. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  354. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  355. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  356. package/lib/esm/test/index.js.map +1 -1
  357. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  358. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  359. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  360. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  361. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  362. package/lib/esm/test/rpc/response.test.js.map +1 -1
  363. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  364. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  365. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  366. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  367. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  368. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  369. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  370. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  371. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  372. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  373. package/lib/esm/test/standalone/ChangesetReader.test.js +246 -246
  374. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  375. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  376. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  377. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  378. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  379. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  380. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  381. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  382. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  383. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  384. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  385. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  386. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  387. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  388. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  389. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  390. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  391. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  392. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  393. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  394. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  395. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  396. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  397. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  398. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  399. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  400. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  401. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  402. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  403. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  404. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  405. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  406. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  407. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  408. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  409. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  410. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  411. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  412. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  413. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  414. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  415. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  416. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  417. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  418. package/lib/esm/workspace/Settings.js.map +1 -1
  419. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  420. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  421. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  422. package/lib/esm/workspace/Workspace.js.map +1 -1
  423. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  424. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"CustomViewState3dCreator.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/CustomViewState3dCreator.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\n\r\nimport { assert } from \"chai\";\r\nimport { CustomViewState3dProps } from \"@itwin/core-common\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { CompressedId64Set, Id64String} from \"@itwin/core-bentley\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { CustomViewState3dCreator } from \"../../CustomViewState3dCreator\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\n\r\ndescribe(\"CustomViewState3dCreator\", () => {\r\n let imodel: SnapshotDb;\r\n after(() => {\r\n if (imodel && imodel.isOpen)\r\n imodel.close();\r\n });\r\n before(() => {\r\n const filename = IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\");\r\n imodel = SnapshotDb.openFile(filename);\r\n });\r\n function setsAreEqual<T>(set1: Set<T>, set2: Set<T>): boolean {\r\n return set1.size === set2.size && [...set1].every((value) => set2.has(value));\r\n }\r\n\r\n it(\"should get correct data from customviewstate3dcreator\", async () => {\r\n const expectedCatIds = new Set<Id64String>().add(\"0x17\");\r\n const expectedModelIds = new Set<Id64String>().add(\"0x1c\").add(\"0x28\");\r\n const expectedModelExtents: Range3d = new Range3d(288874.09375, 3803760.75, -0.0005000000237487257, 289160.84375, 3803959.5, 0.0005000000237487257);\r\n\r\n const customViewStateCreator = new CustomViewState3dCreator(imodel);\r\n const result: CustomViewState3dProps = await customViewStateCreator.getCustomViewState3dData({});\r\n const catIds = CompressedId64Set.decompressSet(result.categoryIds);\r\n const modelIds = CompressedId64Set.decompressSet(result.modelIds);\r\n assert.isTrue(setsAreEqual(expectedCatIds, catIds));\r\n assert.isTrue(setsAreEqual(expectedModelIds, modelIds));\r\n assert.isTrue(expectedModelExtents.isAlmostEqual(Range3d.fromJSON(result.modelExtents)));\r\n });\r\n it(\"should get correct data from customviewstate3dcreator when passing specific modelId\", async () => {\r\n const expectedCatIds = new Set<Id64String>().add(\"0x17\");\r\n const expectedModelIds = new Set<Id64String>().add(\"0x28\");\r\n const expectedModelExtents: Range3d = new Range3d(1e200, 1e200, 1e200, -1e200, -1e200, -1e200);\r\n\r\n const customViewStateCreator = new CustomViewState3dCreator(imodel);\r\n const result: CustomViewState3dProps = await customViewStateCreator.getCustomViewState3dData({modelIds: CompressedId64Set.compressArray([\"0x28\"])});\r\n const catIds = CompressedId64Set.decompressSet(result.categoryIds);\r\n const modelIds = CompressedId64Set.decompressSet(result.modelIds);\r\n assert.isTrue(setsAreEqual(expectedCatIds, catIds));\r\n assert.isTrue(setsAreEqual(expectedModelIds, modelIds));\r\n assert.isTrue(expectedModelExtents.isAlmostEqual(Range3d.fromJSON(result.modelExtents)));\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"CustomViewState3dCreator.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/CustomViewState3dCreator.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport { CustomViewState3dProps } from \"@itwin/core-common\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { CompressedId64Set, Id64String} from \"@itwin/core-bentley\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { CustomViewState3dCreator } from \"../../CustomViewState3dCreator\";\nimport { Range3d } from \"@itwin/core-geometry\";\n\ndescribe(\"CustomViewState3dCreator\", () => {\n let imodel: SnapshotDb;\n after(() => {\n if (imodel && imodel.isOpen)\n imodel.close();\n });\n before(() => {\n const filename = IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\");\n imodel = SnapshotDb.openFile(filename);\n });\n function setsAreEqual<T>(set1: Set<T>, set2: Set<T>): boolean {\n return set1.size === set2.size && [...set1].every((value) => set2.has(value));\n }\n\n it(\"should get correct data from customviewstate3dcreator\", async () => {\n const expectedCatIds = new Set<Id64String>().add(\"0x17\");\n const expectedModelIds = new Set<Id64String>().add(\"0x1c\").add(\"0x28\");\n const expectedModelExtents: Range3d = new Range3d(288874.09375, 3803760.75, -0.0005000000237487257, 289160.84375, 3803959.5, 0.0005000000237487257);\n\n const customViewStateCreator = new CustomViewState3dCreator(imodel);\n const result: CustomViewState3dProps = await customViewStateCreator.getCustomViewState3dData({});\n const catIds = CompressedId64Set.decompressSet(result.categoryIds);\n const modelIds = CompressedId64Set.decompressSet(result.modelIds);\n assert.isTrue(setsAreEqual(expectedCatIds, catIds));\n assert.isTrue(setsAreEqual(expectedModelIds, modelIds));\n assert.isTrue(expectedModelExtents.isAlmostEqual(Range3d.fromJSON(result.modelExtents)));\n });\n it(\"should get correct data from customviewstate3dcreator when passing specific modelId\", async () => {\n const expectedCatIds = new Set<Id64String>().add(\"0x17\");\n const expectedModelIds = new Set<Id64String>().add(\"0x28\");\n const expectedModelExtents: Range3d = new Range3d(1e200, 1e200, 1e200, -1e200, -1e200, -1e200);\n\n const customViewStateCreator = new CustomViewState3dCreator(imodel);\n const result: CustomViewState3dProps = await customViewStateCreator.getCustomViewState3dData({modelIds: CompressedId64Set.compressArray([\"0x28\"])});\n const catIds = CompressedId64Set.decompressSet(result.categoryIds);\n const modelIds = CompressedId64Set.decompressSet(result.modelIds);\n assert.isTrue(setsAreEqual(expectedCatIds, catIds));\n assert.isTrue(setsAreEqual(expectedModelIds, modelIds));\n assert.isTrue(expectedModelExtents.isAlmostEqual(Range3d.fromJSON(result.modelExtents)));\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteElements.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/DeleteElements.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAyB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAwB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAA4B,wBAAwB,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClL,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,IAAI,MAAkB,CAAC;IACvB,IAAI,QAAoB,CAAC;IACzB,IAAI,OAAmB,CAAC;IACxB,IAAI,UAAsB,CAAC;IAC3B,IAAI,UAAsB,CAAC;IAC3B,IAAI,GAAY,CAAC;IAEjB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,UAAU,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QACjF,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAEvF,MAAM,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC7D,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC3E,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;YAC/G,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC;YAChE,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;YACrE,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACpH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC/C,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,IAAI,MAAM,CAAC,MAAM;YACf,MAAM,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,CAAC,OAA8E,EAAE,EAAc,EAAE;QACrH,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAChD,MAAM,KAAK,GAAyB;YAClC,aAAa,EAAE,wBAAwB;YACvC,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YAC5G,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;YACvE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,kCAAkC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpG,CAAC;QACF,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,sCAAsC,CAAC,CAAC;QAC9D,GAAG,CAAC,WAAW,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,4EAA4E;IAC5E,MAAM,YAAY,GAAG,CAAC,EAAc,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACjH,MAAM,aAAa,GAAG,CAAC,EAAc,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEpH,0IAA0I;IAC1I,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,WAAsB,EAAE,OAAkB,EAAE,QAAmB,EAAE,iBAA4B,EAAE,EAAE,EAAE;QACzI,MAAM,YAAY,GAA6B,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;;YAEpE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;QAExK,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,KAAK,uBAAuB,CAAC,CAAC;QAEzG,KAAK,MAAM,EAAE,IAAI,OAAO;YACtB,aAAa,CAAC,EAAE,EAAE,IAAI,KAAK,KAAK,EAAE,2BAA2B,CAAC,CAAC;QAEjE,KAAK,MAAM,EAAE,IAAI,QAAQ;YACvB,YAAY,CAAC,EAAE,EAAE,IAAI,KAAK,KAAK,EAAE,4BAA4B,CAAC,CAAC;QAEjE,GAAG,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,IAAI,OAAmB,EAAE,OAAmB,EAAE,YAAwB,CAAC;QACvE,IAAI,OAAmB,EAAE,YAAwB,EAAE,OAAmB,CAAC;QACvE,IAAI,OAAmB,EAAE,OAAmB,EAAE,OAAmB,CAAC;QAClE,IAAI,UAAsB,EAAE,OAAmB,CAAC;QAChD,IAAI,GAAc,CAAC;QAEnB,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,GAAG,aAAa,EAAE,CAAC;YAC1B,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/C,YAAY,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACpD,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/C,YAAY,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACpD,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/C,OAAO,GAAG,aAAa,EAAE,CAAC;YAC1B,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/C,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/C,UAAU,GAAG,aAAa,EAAE,CAAC;YAC7B,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YAClD,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO;gBACnE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,eAAe,CAAC,eAAe,EAC7B,CAAC,OAAO,CAAC,EACT,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAChE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,eAAe,CAAC,gCAAgC,EAC9C,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EACzC,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAChE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,eAAe,CAAC,kBAAkB,EAChC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAC9B,GAAG,EACH,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,eAAe,CAAC,WAAW,EACzB,EAAE,EACF,EAAE,EACF,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAE9B,6EAA6E;YAC7E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YACjG,aAAa,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;YAChD,aAAa,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAE9B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;YACzF,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,gCAAgC,CAAC,CAAC;YAEhG,YAAY,CAAC,KAAK,EAAE,kDAAkD,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,eAAe,CAAC,sBAAsB,EACpC,CAAC,OAAO,CAAC,EACT,CAAC,OAAO,EAAE,YAAY,CAAC,EACvB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;YACnF,eAAe,CAAC,6BAA6B,EAC3C,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,EAC9C,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,eAAe,CAAC,4BAA4B,EAC1C,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAChC,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,eAAe,CAAC,wBAAwB,EACtC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EACvC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAChF,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,eAAe,CAAC,oBAAoB,EAClC,CAAC,YAAY,EAAE,YAAY,CAAC,EAC5B,CAAC,YAAY,EAAE,YAAY,CAAC,EAC5B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,eAAe,CAAC,+BAA+B,EAC7C,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,EAChC,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,EAChC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,eAAe,CAAC,kCAAkC,EAChD,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,EACzC,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACzE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,eAAe,CAAC,+BAA+B,EAC7C,CAAC,OAAO,EAAE,YAAY,CAAC,EACvB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAChE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC/C,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5E,eAAe,CAAC,kEAAkE,EAChF,CAAC,MAAM,EAAE,KAAK,CAAC,EACf,CAAC,MAAM,EAAE,KAAK,CAAC,EACf,CAAC,KAAK,CAAC,CAAC,CAAC;YAEX,eAAe,CAAC,yDAAyD,EACvE,CAAC,MAAM,CAAC,EACR,EAAE,EACF,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EACtB,CAAC,MAAM,CAAC,CAAC,CAAC;YAEZ,eAAe,CAAC,wDAAwD,EACtE,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YACjF,eAAe,CAAC,8DAA8D,EAC5E,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,EACnC,EAAE,CAAC,CAAC;YAEN,eAAe,CAAC,4EAA4E,EAC1F,CAAC,WAAW,EAAE,KAAK,CAAC,EACpB,CAAC,WAAW,EAAE,KAAK,CAAC,EACpB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAC9F,eAAe,CAAC,2CAA2C,EACzD,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EACtB,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YACtB,cAAc;YACd,kCAAkC;YAClC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,eAAe,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACrF,eAAe,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACrF,eAAe,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAE1E,eAAe,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACzF,eAAe,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1F,eAAe,CAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC/E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAE3E,+GAA+G;YAC/G,eAAe,CAAC,sCAAsC,EACpD,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EACrB,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAE3E,MAAM,YAAY,GAA6B,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAAC,CAAC;YACzH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;YAC3E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,QAAQ,CAAC,+BAA+B,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,sDAAsD;YACtD,QAAQ;YACR,SAAS;YACT,0CAA0C;YAC1C,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,eAAe,CAAC,kBAAkB,EAChC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EACrB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EACrB,EAAE,CAAC,CAAC;YAEN,eAAe,CAAC,qBAAqB,EACnC,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAC9F,eAAe,CAAC,+CAA+C,EAC7D,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,EAAE,MAAM,CAAC,EACf,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,SAAS;YACT,sCAAsC;YACtC,iCAAiC;YACjC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAEhG,qEAAqE;YACrE,eAAe,CAAC,mCAAmC,EACjD,CAAC,MAAM,CAAC,EACR,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACxB,EAAE,CAAC,CAAC;YAEN,0EAA0E;YAC1E,eAAe,CAAC,sCAAsC,EACpD,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,CAAC,CAAC,CAAC;YAEZ,0FAA0F;YAC1F,eAAe,CAAC,0CAA0C,EACxD,CAAC,MAAM,CAAC,EACR,CAAC,MAAM,CAAC,EACR,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAEpB,wEAAwE;YACxE,eAAe,CAAC,2EAA2E,EACzF,CAAC,MAAM,CAAC,EACR,EAAE,EACF,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACxB,CAAC,MAAM,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;QACxE,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,eAAe,CAAC,sBAAsB,EACpC,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,EAAE,QAAQ,CAAC,EACjB,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,eAAe,CAAC,wDAAwD,EACtE,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EACzB,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAClF,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,eAAe,CAAC,kEAAkE,EAChF,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,EACtC,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7E,eAAe,CAAC,iCAAiC,EAC/C,CAAC,MAAM,CAAC,EACR,EAAE,EACF,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EACzB,CAAC,MAAM,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;YACpF,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5E,eAAe,CAAC,qDAAqD,EACnE,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,EAAE,QAAQ,CAAC,EACjB,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YACpE,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,eAAe,CAAC,4BAA4B,EAC1C,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EACrB,CAAC,KAAK,CAAC,EACP,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAC1B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACjE,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC/E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,eAAe,CAAC,sCAAsC,EACpD,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EACzC,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,eAAe,CAAC,qDAAqD,EACnE,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EAChC,EAAE,CAAC,CAAC;YACN,iDAAiD;YACjD,eAAe,CAAC,iDAAiD,EAC/D,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EAChC,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2FAA2F,EAAE,GAAG,EAAE;YACnG,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,2DAA2D;YAC3D,eAAe,CAAC,iEAAiE,EAC/E,CAAC,OAAO,EAAE,KAAK,CAAC,EAChB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EACzB,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0GAA0G,EAAE,GAAG,EAAE;YAClH,qFAAqF;YACrF,4DAA4D;YAC5D,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,eAAe,CAAC,8CAA8C,EAC5D,CAAC,OAAO,CAAC,EACT,EAAE,EACF,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EAChC,CAAC,OAAO,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;YAClG,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;YAChG,eAAe,CAAC,+CAA+C,EAC7D,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EAChC,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wGAAwG,EAAE,GAAG,EAAE;YAChH,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;YAClG,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,eAAe,CAAC,qDAAqD,EACnE,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;YACxF,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YACjF,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,eAAe,CAAC,oDAAoD,EAClE,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,EAC3C,EAAE,CAAC,CAAC;YAEN,wEAAwE;YACxE,eAAe,CAAC,oEAAoE,EAClF,CAAC,WAAW,EAAE,KAAK,CAAC,EACpB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,EAC5B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;YACxF,yFAAyF;YACzF,uFAAuF;YACvF,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAClF,eAAe,CAAC,8DAA8D,EAC5E,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,EAC5B,CAAC,MAAM,CAAC,EACR,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,EAC7C,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC/E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7E,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACjD,eAAe,CAAC,uCAAuC,EACrD,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAC9B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,EAC9B,CAAC,KAAK,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,MAAM,cAAc,GAAG,GAAe,EAAE;YACtC,MAAM,IAAI,GAAG,qBAAqB,EAAE,gBAAgB,EAAE,CAAC;YACvD,OAAO,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC,CAAC;QAEF,MAAM,oBAAoB,GAAG,CAAC,UAAsB,EAAE,OAAkC,EAAE,EAAc,EAAE;YACxG,MAAM,KAAK,GAAyB;gBAClC,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;gBACvE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,kCAAkC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9G,CAAC;YACF,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,6CAA6C,CAAC,CAAC;YACrE,GAAG,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,kDAAkD;QAClD,MAAM,kBAAkB,GAAG,CAAC,EAAc,EAAE,GAAW,EAAE,EAAE,CACzD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAEhE,8CAA8C;QAC9C,MAAM,iBAAiB,GAAG,CAAC,EAAc,EAAE,GAAW,EAAE,EAAE,CACxD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9D,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,aAAa,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;YAClE,kBAAkB,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YAC/D,aAAa,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC;YACjE,aAAa,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC;YACjE,YAAY,CAAC,SAAS,EAAE,sCAAsC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH;;;;;;;WAOG;QACH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;YACtF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC7F,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,kBAAkB,gBAAgB,EAAE,CAAC,CAAC;YACnG,MAAM,KAAK,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAElC,mHAAmH;YACnH,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,aAAa,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;YACrD,aAAa,CAAC,gBAAgB,EAAE,2CAA2C,CAAC,CAAC;YAC7E,kBAAkB,CAAC,gBAAgB,EAAE,6CAA6C,CAAC,CAAC;YACpF,aAAa,CAAC,KAAK,EAAE,0DAA0D,CAAC,CAAC;YACjF,YAAY,CAAC,SAAS,EAAE,sCAAsC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH;;;;;;;;;WASG;QACH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5E,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;YACxF,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,aAAa,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YAC1D,kBAAkB,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YAC/D,aAAa,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;YAChD,aAAa,CAAC,YAAY,EAAE,kCAAkC,CAAC,CAAC;YAChE,aAAa,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;YAC1E,aAAa,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;YAChD,YAAY,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH;;;;;;;;WAQG;QACH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;YAC5F,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAClF,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAElC,oFAAoF;YACpF,0FAA0F;YAC1F,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;YACrE,YAAY,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC;YACpE,iBAAiB,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;YAC/D,YAAY,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;YAC5D,YAAY,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;YACxD,YAAY,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;YACtD,aAAa,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH;;;;;;;WAOG;QACH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;YAC1F,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,+FAA+F;YAC/F,kCAAkC;YAClC,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;gBACpC,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE;gBACjE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;aAChD,CAAC,CAAC;YAE3B,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,aAAa,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;YAC1C,kBAAkB,CAAC,EAAE,EAAE,mCAAmC,CAAC,CAAC;YAC5D,aAAa,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;YAC5D,aAAa,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;YAC1C,kBAAkB,CAAC,EAAE,EAAE,mCAAmC,CAAC,CAAC;YAC5D,aAAa,CAAC,aAAa,EAAE,iCAAiC,CAAC,CAAC;YAChE,aAAa,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH;;;;;;;;;WASG;QACH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;YAC/F,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACnH,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,oBAAoB,EAAE,gBAAgB,gBAAgB,EAAE,CAAC,CAAC;YACrG,MAAM,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,uBAAuB,gBAAgB,EAAE,CAAC,CAAC;YACnH,MAAM,UAAU,GAAG,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,aAAa,CAAC,oBAAoB,EAAE,uCAAuC,CAAC,CAAC;YAC7E,aAAa,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;YACjE,aAAa,CAAC,qBAAqB,EAAE,wCAAwC,CAAC,CAAC;YAC/E,kBAAkB,CAAC,qBAAqB,EAAE,wCAAwC,CAAC,CAAC;YACpF,aAAa,CAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC;YAC1D,aAAa,CAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC;YAC1D,YAAY,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH;;;;;WAKG;QACH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,aAAa,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YAC1D,kBAAkB,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;YACrE,YAAY,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH;;;;;;;;;;WAUG;QACH,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;YACrG,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACtG,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,uBAAuB,gBAAgB,EAAE,CAAC,CAAC;YACtG,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,aAAa,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YACtD,aAAa,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;YACnE,kBAAkB,CAAC,cAAc,EAAE,gDAAgD,CAAC,CAAC;YACrF,aAAa,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YACtD,aAAa,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YACtD,YAAY,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH;;;;;;;;;WASG;QACH,EAAE,CAAC,kHAAkH,EAAE,GAAG,EAAE;YAC1H,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC/F,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,gBAAgB,EAAE,CAAC,CAAC;YAChF,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,oBAAoB,gBAAgB,EAAE,CAAC,CAAC;YAChG,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAEnD,oFAAoF;YACpF,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,YAAY,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;YACtD,aAAa,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;YACpD,aAAa,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YAC1D,kBAAkB,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YAC/D,aAAa,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YACtD,aAAa,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iHAAiH,EAAE,GAAG,EAAE;YACzH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACtG,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,uBAAuB,gBAAgB,EAAE,CAAC,CAAC;YACnG,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9D,YAAY,CAAC,QAAQ,EAAE,yCAAyC,CAAC,CAAC;YAClE,aAAa,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YAC1D,kBAAkB,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;YAC/D,aAAa,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YACtD,aAAa,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { assert } from \"chai\";\r\nimport { DbResult, Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, CodeScopeSpec, IModel, PhysicalElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { BulkDeleteElementsResult, BulkDeleteElementsStatus, ChannelControl, EditTxn, IModelJsFs, PhysicalModel, SnapshotDb, SpatialCategory, Subject } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { withEditTxn } from \"../TestEditTxn\";\r\n\r\ndescribe(\"deleteElements (native bulk delete API)\", () => {\r\n let seedDb: SnapshotDb;\r\n let iModelDb: SnapshotDb;\r\n let modelId: Id64String;\r\n let categoryId: Id64String;\r\n let codeSpecId: Id64String;\r\n let txn: EditTxn;\r\n\r\n before(async () => {\r\n IModelJsFs.recursiveMkDirSync(KnownTestLocations.outputDir);\r\n const seedFile = IModelTestUtils.prepareOutputFile(\"DeleteElements\", \"seed.bim\");\r\n seedDb = SnapshotDb.createEmpty(seedFile, { rootSubject: { name: \"DeleteElements\" } });\r\n\r\n await withEditTxn(seedDb, \"create elements\", async (editTxn) => {\r\n modelId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"TestModel\");\r\n categoryId = SpatialCategory.insert(editTxn, IModel.dictionaryId, \"TestCategory\", new SubCategoryAppearance());\r\n codeSpecId = seedDb.codeSpecs.insert(editTxn, \"TestScopeSpec\", CodeScopeSpec.Type.RelatedElement);\r\n assert.isNotEmpty(modelId, \"Expected a valid PhysicalModel id\");\r\n assert.isNotEmpty(categoryId, \"Expected a valid SpatialCategory id\");\r\n assert.isNotEmpty(codeSpecId, \"Expected a valid CodeSpec id\");\r\n });\r\n });\r\n\r\n beforeEach(() => {\r\n iModelDb = SnapshotDb.createFrom(seedDb, IModelTestUtils.prepareOutputFile(\"DeleteElements\", \"DeleteElements.bim\"));\r\n assert.isTrue(iModelDb.isOpen);\r\n txn = new EditTxn(iModelDb, \"delete elements\");\r\n txn.start();\r\n iModelDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n afterEach(() => {\r\n txn.end(\"abandon\");\r\n if (iModelDb.isOpen) {\r\n iModelDb.close();\r\n }\r\n });\r\n\r\n after(() => {\r\n if (seedDb.isOpen)\r\n seedDb.close();\r\n });\r\n\r\n const insertElement = (opts: { parentId?: Id64String; codeScope?: Id64String; codeValue?: string } = {}): Id64String => {\r\n const { parentId, codeScope, codeValue } = opts;\r\n const props: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: modelId,\r\n category: categoryId,\r\n code: codeScope && codeValue ? { spec: codeSpecId, scope: codeScope, value: codeValue } : Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\r\n ...(parentId ? { parent: { id: parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\r\n };\r\n const id = txn.insertElement(props);\r\n assert.isNotEmpty(id, \"insertElement must return a valid ID\");\r\n txn.saveChanges();\r\n return id;\r\n };\r\n\r\n /** Assert that the element with the given id exists or has been deleted. */\r\n const assertExists = (id: Id64String, msg: string) => assert.isDefined(iModelDb.elements.tryGetElement(id), msg);\r\n const assertDeleted = (id: Id64String, msg: string) => assert.isUndefined(iModelDb.elements.tryGetElement(id), msg);\r\n\r\n // Run deleteElements, then verify the returned failed set, check each id in `deleted` is gone and each id in `retained` is still present.\r\n const executeTestCase = (label: string, idsToDelete: Id64Array, deleted: Id64Array, retained: Id64Array, expectedFailed: Id64Array = []) => {\r\n const resultStatus: BulkDeleteElementsResult = txn.deleteElements(idsToDelete);\r\n if (expectedFailed.length === 0)\r\n assert.equal(resultStatus.status, BulkDeleteElementsStatus.Success);\r\n else\r\n assert.equal(resultStatus.status, (expectedFailed.length === idsToDelete.length) ? BulkDeleteElementsStatus.DeletionFailed : BulkDeleteElementsStatus.PartialSuccess);\r\n\r\n assert.sameMembers(Array.from(resultStatus.failedIds), expectedFailed, `[${label}] failed set mismatch`);\r\n\r\n for (const id of deleted)\r\n assertDeleted(id, `[${label}] ${id} should have been deleted`);\r\n\r\n for (const id of retained)\r\n assertExists(id, `[${label}] ${id} should have been retained`);\r\n\r\n txn.abandonChanges();\r\n };\r\n\r\n /**\r\n * Shared hierarchy used throughout the parent-child tests:\r\n *\r\n * parentA parentB standalone\r\n * ├─ childA1 ├─ childB1 └─ childS1\r\n * │ └─ grandchildA1 └─ childB2\r\n * ├─ childA2\r\n * │ └─ grandchildA2\r\n * └─ childA3\r\n */\r\n describe(\"basic tests\", () => {\r\n let parentA: Id64String, childA1: Id64String, grandchildA1: Id64String;\r\n let childA2: Id64String, grandchildA2: Id64String, childA3: Id64String;\r\n let parentB: Id64String, childB1: Id64String, childB2: Id64String;\r\n let standalone: Id64String, childS1: Id64String;\r\n let all: Id64Array;\r\n\r\n beforeEach(() => {\r\n parentA = insertElement();\r\n childA1 = insertElement({ parentId: parentA });\r\n grandchildA1 = insertElement({ parentId: childA1 });\r\n childA2 = insertElement({ parentId: parentA });\r\n grandchildA2 = insertElement({ parentId: childA2 });\r\n childA3 = insertElement({ parentId: parentA });\r\n parentB = insertElement();\r\n childB1 = insertElement({ parentId: parentB });\r\n childB2 = insertElement({ parentId: parentB });\r\n standalone = insertElement();\r\n childS1 = insertElement({ parentId: standalone });\r\n all = [parentA, childA1, grandchildA1, childA2, grandchildA2, childA3,\r\n parentB, childB1, childB2, standalone, childS1];\r\n });\r\n\r\n it(\"delete a root element\", () => {\r\n executeTestCase(\"root cascades\",\r\n [parentA],\r\n [parentA, childA1, grandchildA1, childA2, grandchildA2, childA3],\r\n [parentB, childB1, childB2, standalone, childS1]);\r\n });\r\n\r\n it(\"explicitly delete the whole tree\", () => {\r\n executeTestCase(\"redundant descendants in input\",\r\n [parentA, childA1, grandchildA1, childA2],\r\n [parentA, childA1, grandchildA1, childA2, grandchildA2, childA3],\r\n [parentB, childB1, childB2, standalone, childS1]);\r\n });\r\n\r\n it(\"deleting all roots removes every element\", () => {\r\n executeTestCase(\"delete all roots\",\r\n [parentA, parentB, standalone],\r\n all,\r\n []);\r\n });\r\n\r\n it(\"empty input set is a no-op\", () => {\r\n executeTestCase(\"empty set\",\r\n [],\r\n [],\r\n all);\r\n });\r\n\r\n it(\"duplicate IDs should be handled\", () => {\r\n const rootA = insertElement();\r\n const rootB = insertElement();\r\n\r\n // rootA appears twice - should not throw and should be deleted exactly once.\r\n assert.equal(txn.deleteElements([rootA, rootA, rootB]).status, BulkDeleteElementsStatus.Success);\r\n assertDeleted(rootA, \"rootA should be deleted\");\r\n assertDeleted(rootB, \"rootB should be deleted\");\r\n });\r\n\r\n it(\"invalid IDs in the input throw an exception\", () => {\r\n const rootA = insertElement();\r\n\r\n assert.throws(() => txn.deleteElements([Id64.invalid, rootA]), `Invalid element ids: 0`);\r\n assert.throws(() => txn.deleteElements([\"not-an-id\", rootA]), `Invalid element ids: not-an-id`);\r\n\r\n assertExists(rootA, \"rootA should not have been deleted after a throw\");\r\n });\r\n\r\n it(\"deleting a child removes its subtree but leaves the parent\", () => {\r\n executeTestCase(\"delete depth-1 child\",\r\n [childA1],\r\n [childA1, grandchildA1],\r\n [parentA, childA2, grandchildA2, childA3, parentB, childB1, childB2, standalone, childS1]);\r\n });\r\n\r\n it(\"deleting two mid-tree siblings leaves their parent and unrelated siblings\", () => {\r\n executeTestCase(\"delete two depth-1 siblings\",\r\n [childA1, childA2],\r\n [childA1, grandchildA1, childA2, grandchildA2],\r\n [parentA, childA3, parentB, childB1, childB2, standalone, childS1]);\r\n });\r\n\r\n it(\"deleting a child from one tree and a child from another tree\", () => {\r\n executeTestCase(\"cross-tree mid-tree delete\",\r\n [childA1, childB2],\r\n [childA1, grandchildA1, childB2],\r\n [parentA, childA2, grandchildA2, childA3, parentB, childB1, standalone, childS1]);\r\n });\r\n\r\n it(\"deleting mid-tree nodes mixed with a root\", () => {\r\n executeTestCase(\"mid-tree + roots mixed\",\r\n [childA1, childA3, parentB, standalone],\r\n [childA1, grandchildA1, childA3, parentB, childB1, childB2, standalone, childS1],\r\n [parentA, childA2, grandchildA2]);\r\n });\r\n\r\n it(\"deleting only grandchildren leaves all ancestors\", () => {\r\n executeTestCase(\"delete leaves only\",\r\n [grandchildA1, grandchildA2],\r\n [grandchildA1, grandchildA2],\r\n [parentA, childA1, childA2, childA3, parentB, childB1, childB2, standalone, childS1]);\r\n });\r\n\r\n it(\"deleting leaves from different subtrees simultaneously\", () => {\r\n executeTestCase(\"leaves from multiple subtrees\",\r\n [grandchildA1, childB1, childS1],\r\n [grandchildA1, childB1, childS1],\r\n [parentA, childA1, childA2, grandchildA2, childA3, parentB, childB2, standalone]);\r\n });\r\n\r\n it(\"deleting root, mid-tree and leaf\", () => {\r\n executeTestCase(\"root + child + grandchild + leaf\",\r\n [childA1, grandchildA2, parentB, childS1],\r\n [childA1, grandchildA1, grandchildA2, parentB, childB1, childB2, childS1],\r\n [parentA, childA2, childA3, standalone]);\r\n });\r\n\r\n it(\"parent and its grandchild\", () => {\r\n executeTestCase(\"parent + grandchild redundant\",\r\n [parentA, grandchildA1],\r\n [parentA, childA1, grandchildA1, childA2, grandchildA2, childA3],\r\n [parentB, childB1, childB2, standalone, childS1]);\r\n });\r\n });\r\n\r\n describe(\"intra-set code scope dependency\", () => {\r\n it(\"child element is the code scope for an unrelated element\", () => {\r\n const rootA = insertElement();\r\n const childA = insertElement({ parentId: rootA });\r\n const rootB = insertElement({ codeScope: childA, codeValue: \"rootB-code\" });\r\n executeTestCase(\"depth-1 child scopes unrelated root - delete child+root directly\",\r\n [childA, rootB],\r\n [childA, rootB],\r\n [rootA]);\r\n\r\n executeTestCase(\"depth-1 child scopes unrelated root - delete child only\",\r\n [childA],\r\n [],\r\n [rootA, childA, rootB],\r\n [childA]);\r\n\r\n executeTestCase(\"depth-1 child scopes unrelated root - delete root only\",\r\n [rootB],\r\n [rootB],\r\n [rootA, childA]);\r\n });\r\n\r\n it(\"grandchild is the code scope for an unrelated root\", () => {\r\n const rootA = insertElement();\r\n const childA = insertElement({ parentId: rootA });\r\n const grandchildA = insertElement({ parentId: childA });\r\n const rootB = insertElement({ codeScope: grandchildA, codeValue: \"rootB-code\" });\r\n executeTestCase(\"depth-2 grandchild scopes unrelated root - delete both roots\",\r\n [rootA, rootB],\r\n [rootA, childA, grandchildA, rootB],\r\n []);\r\n\r\n executeTestCase(\"depth-2 grandchild scopes unrelated root - delete grandchild+root directly\",\r\n [grandchildA, rootB],\r\n [grandchildA, rootB],\r\n [rootA, childA]);\r\n });\r\n\r\n it(\"root element scopes a child in another subtree\", () => {\r\n const rootA = insertElement();\r\n const rootB = insertElement();\r\n const childB = insertElement({ parentId: rootB, codeScope: rootA, codeValue: \"childB-code\" });\r\n executeTestCase(\"root scopes depth-1 child in sibling tree\",\r\n [rootA, rootB],\r\n [rootA, rootB, childB],\r\n []);\r\n });\r\n\r\n it(\"scope chains\", () => {\r\n // C -> B -> A\r\n // Test all combinations of inputs\r\n const rootA = insertElement();\r\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\r\n const rootC = insertElement({ codeScope: rootB, codeValue: \"rootC-code\" });\r\n executeTestCase(\"scope chain single A\", [rootA], [], [rootA, rootB, rootC], [rootA]);\r\n executeTestCase(\"scope chain single B\", [rootB], [], [rootA, rootB, rootC], [rootB]);\r\n executeTestCase(\"scope chain single C\", [rootC], [rootC], [rootA, rootB]);\r\n\r\n executeTestCase(\"scope chain forward\", [rootA, rootB, rootC], [rootA, rootB, rootC], []);\r\n executeTestCase(\"scope chain reversed\", [rootC, rootB, rootA], [rootA, rootB, rootC], []);\r\n executeTestCase(\"scope chain middle-first\", [rootB, rootA, rootC], [rootA, rootB, rootC], []);\r\n });\r\n\r\n it(\"scope chain A -> B -> C -> D where only A and D are in the delete set\", () => {\r\n const rootA = insertElement();\r\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\r\n const rootC = insertElement({ codeScope: rootB, codeValue: \"rootC-code\" });\r\n const rootD = insertElement({ codeScope: rootC, codeValue: \"rootD-code\" });\r\n\r\n // Only A and D in the delete set. B is external -> A ignored. D's scope (C) is not being deleted -> D is safe.\r\n executeTestCase(\"deep gap chain: A ignored, D deleted\",\r\n [rootA, rootD],\r\n [rootD],\r\n [rootA, rootB, rootC],\r\n [rootA]);\r\n });\r\n\r\n it(\"scope chain delete with skipping constraint validation should fail\", () => {\r\n const rootA = insertElement();\r\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\r\n const rootC = insertElement({ codeScope: rootB, codeValue: \"rootC-code\" });\r\n const rootD = insertElement({ codeScope: rootC, codeValue: \"rootD-code\" });\r\n\r\n const resultStatus: BulkDeleteElementsResult = txn.deleteElements([rootA, rootD], { skipFKConstraintValidations: true });\r\n assert.equal(resultStatus.status, BulkDeleteElementsStatus.DeletionFailed);\r\n assert.equal(resultStatus.sqlDeleteStatus, DbResult.BE_SQLITE_CONSTRAINT_FOREIGNKEY);\r\n });\r\n\r\n it(\"two elements using the same scope\", () => {\r\n // A is the code scope for both B and C independently.\r\n // A\r\n // / \\\r\n // B C (code scope, not parent-child)\r\n const rootA = insertElement();\r\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\r\n const rootC = insertElement({ codeScope: rootA, codeValue: \"rootC-code\" });\r\n executeTestCase(\"delete all three\",\r\n [rootA, rootB, rootC],\r\n [rootA, rootB, rootC],\r\n []);\r\n\r\n executeTestCase(\"delete only B and C\",\r\n [rootB, rootC],\r\n [rootB, rootC],\r\n [rootA]);\r\n });\r\n\r\n it(\"parent is also the code scope of its own child\", () => {\r\n const rootP = insertElement();\r\n const childC = insertElement({ parentId: rootP, codeScope: rootP, codeValue: \"childC-code\" });\r\n executeTestCase(\"parent is code scope of child - delete parent\",\r\n [rootP],\r\n [rootP, childC],\r\n []);\r\n });\r\n\r\n it(\"sibling scopes it's own sibling\", () => {\r\n // parent\r\n // ├─ childA (code scope for childB)\r\n // └─ childB (scoped by childA)\r\n const parent = insertElement();\r\n const childA = insertElement({ parentId: parent });\r\n const childB = insertElement({ parentId: parent, codeScope: childA, codeValue: \"childB-code\" });\r\n\r\n // Delete via parent cascade - sibling scope must not block deletion.\r\n executeTestCase(\"sibling scope - delete via parent\",\r\n [parent],\r\n [parent, childA, childB],\r\n []);\r\n\r\n // Delete both siblings directly - intra-set scope, no external violation.\r\n executeTestCase(\"sibling scope - delete both directly\",\r\n [childA, childB],\r\n [childA, childB],\r\n [parent]);\r\n\r\n // Delete only the scoped child - its scope (childA) is not being deleted, safe to delete.\r\n executeTestCase(\"sibling scope - delete only scoped child\",\r\n [childB],\r\n [childB],\r\n [parent, childA]);\r\n\r\n // Delete only the scope element - childB is external -> childA ignored.\r\n executeTestCase(\"sibling scope - delete only scope element, ignored due to external childB\",\r\n [childA],\r\n [],\r\n [parent, childA, childB],\r\n [childA]);\r\n });\r\n });\r\n\r\n describe(\"Code scope violations to test delete set element pruning\", () => {\r\n it(\"root is code scope for an external element\", () => {\r\n const rootA = insertElement();\r\n const external = insertElement({ codeScope: rootA, codeValue: \"ext-code\" });\r\n const rootB = insertElement();\r\n executeTestCase(\"external scopes root\",\r\n [rootA, rootB],\r\n [rootB],\r\n [rootA, external],\r\n [rootA]);\r\n });\r\n\r\n it(\"depth-1 child is code scope for external\", () => {\r\n const rootA = insertElement();\r\n const childA = insertElement({ parentId: rootA });\r\n const external = insertElement({ codeScope: childA, codeValue: \"ext-code\" });\r\n const rootB = insertElement();\r\n executeTestCase(\"external scopes depth-1 child - parent subtree ignored\",\r\n [rootA, rootB],\r\n [rootB],\r\n [rootA, childA, external],\r\n [rootA]);\r\n });\r\n\r\n it(\"depth-2 grandchild is code scope for external\", () => {\r\n const rootA = insertElement();\r\n const childA = insertElement({ parentId: rootA });\r\n const grandchildA = insertElement({ parentId: childA });\r\n const external = insertElement({ codeScope: grandchildA, codeValue: \"ext-code\" });\r\n const rootB = insertElement();\r\n executeTestCase(\"external scopes depth-2 grandchild - grandparent subtree ignored\",\r\n [rootA, rootB],\r\n [rootB],\r\n [rootA, childA, grandchildA, external],\r\n [rootA]);\r\n });\r\n\r\n it(\"only the child is passed for deletion\", () => {\r\n const rootA = insertElement();\r\n const childA = insertElement({ parentId: rootA });\r\n const external = insertElement({ codeScope: childA, codeValue: \"ext-code\" });\r\n executeTestCase(\"external scopes requested child\",\r\n [childA],\r\n [],\r\n [rootA, childA, external],\r\n [childA]);\r\n });\r\n\r\n it(\"root has both an external scope dependent AND an intra-set scope dependent\", () => {\r\n const rootA = insertElement();\r\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\r\n const external = insertElement({ codeScope: rootA, codeValue: \"ext-code\" });\r\n executeTestCase(\"root ignored due to external; sibling still deleted\",\r\n [rootA, rootB],\r\n [rootB],\r\n [rootA, external],\r\n [rootA]);\r\n });\r\n\r\n it(\"two independent external scope violations\", () => {\r\n const rootA = insertElement();\r\n const rootB = insertElement();\r\n const extX = insertElement({ codeScope: rootA, codeValue: \"extX\" });\r\n const extY = insertElement({ codeScope: rootB, codeValue: \"extY\" });\r\n const rootC = insertElement();\r\n executeTestCase(\"two independent violations\",\r\n [rootA, rootB, rootC],\r\n [rootC],\r\n [rootA, rootB, extX, extY],\r\n [rootA, rootB]);\r\n });\r\n });\r\n\r\n describe(\"mixed element hierarchy and code scope violations\", () => {\r\n it(\"root scopes another root - delete both roots, all descendants removed\", () => {\r\n const rootA = insertElement();\r\n const childA1 = insertElement({ parentId: rootA });\r\n const childA2 = insertElement({ parentId: rootA });\r\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\r\n const childB1 = insertElement({ parentId: rootB });\r\n executeTestCase(\"root scopes root - delete both roots\",\r\n [rootA, rootB],\r\n [rootA, childA1, childA2, rootB, childB1],\r\n []);\r\n });\r\n\r\n it(\"depth-1 child scopes an unrelated root\", () => {\r\n const rootA = insertElement();\r\n const childA1 = insertElement({ parentId: rootA });\r\n const rootB = insertElement({ codeScope: childA1, codeValue: \"rootB-code\" });\r\n const childB1 = insertElement({ parentId: rootB });\r\n executeTestCase(\"depth-1 child scopes root - delete both via parents\",\r\n [rootA, rootB],\r\n [rootA, childA1, rootB, childB1],\r\n []);\r\n // Reverse input order - result must be identical\r\n executeTestCase(\"depth-1 child scopes root - reverse input order\",\r\n [rootB, rootA],\r\n [rootA, childA1, rootB, childB1],\r\n []);\r\n });\r\n\r\n it(\"depth-1 child scopes an unrelated root - delete child and root directly (parent survives)\", () => {\r\n const rootA = insertElement();\r\n const childA1 = insertElement({ parentId: rootA });\r\n const rootB = insertElement({ codeScope: childA1, codeValue: \"rootB-code\" });\r\n const childB1 = insertElement({ parentId: rootB });\r\n // Only childA1 and rootB - rootA is NOT in the delete set.\r\n executeTestCase(\"depth-1 child scopes root - delete child + scoped root directly\",\r\n [childA1, rootB],\r\n [childA1, rootB, childB1],\r\n [rootA]);\r\n });\r\n\r\n it(\"depth-1 child scopes an unrelated root - deleting only the child cascades into the scoped root's subtree\", () => {\r\n // childA1 is the code scope of rootB. When childA1 is deleted, rootB loses its scope\r\n // element -> rootB (and its children) must also be deleted.\r\n const rootA = insertElement();\r\n const childA1 = insertElement({ parentId: rootA });\r\n const rootB = insertElement({ codeScope: childA1, codeValue: \"rootB-code\" });\r\n const childB1 = insertElement({ parentId: rootB });\r\n executeTestCase(\"delete child only - scoped root also removed\",\r\n [childA1],\r\n [],\r\n [rootA, childA1, rootB, childB1],\r\n [childA1]);\r\n });\r\n\r\n it(\"root scopes a depth-1 child in sibling tree - delete both roots, all descendants removed\", () => {\r\n const rootA = insertElement();\r\n const childA1 = insertElement({ parentId: rootA });\r\n const rootB = insertElement();\r\n const childB1 = insertElement({ parentId: rootB, codeScope: rootA, codeValue: \"childB1-code\" });\r\n executeTestCase(\"root scopes depth-1 child - delete both roots\",\r\n [rootA, rootB],\r\n [rootA, childA1, rootB, childB1],\r\n []);\r\n });\r\n\r\n it(\"depth-1 child scopes a depth-1 child in sibling tree - delete both children directly (parents survive)\", () => {\r\n const rootA = insertElement();\r\n const childA1 = insertElement({ parentId: rootA });\r\n const rootB = insertElement();\r\n const childB1 = insertElement({ parentId: rootB, codeScope: childA1, codeValue: \"childB1-code\" });\r\n const childB2 = insertElement({ parentId: rootB });\r\n executeTestCase(\"sibling-child scope - delete both children directly\",\r\n [childA1, childB1],\r\n [childA1, childB1],\r\n [rootA, rootB, childB2]);\r\n });\r\n\r\n it(\"depth-2 grandchild scopes an unrelated root - delete grandparent + scoped root\", () => {\r\n const rootA = insertElement();\r\n const childA = insertElement({ parentId: rootA });\r\n const grandchildA = insertElement({ parentId: childA });\r\n const rootB = insertElement({ codeScope: grandchildA, codeValue: \"rootB-code\" });\r\n const childB = insertElement({ parentId: rootB });\r\n executeTestCase(\"depth-2 grandchild scopes root - delete both roots\",\r\n [rootA, rootB],\r\n [rootA, childA, grandchildA, rootB, childB],\r\n []);\r\n\r\n // Delete grandchild and scoped root directly (rootA and childA survive)\r\n executeTestCase(\"depth-2 grandchild scopes root - delete grandchild + root directly\",\r\n [grandchildA, rootB],\r\n [grandchildA, rootB, childB],\r\n [rootA, childA]);\r\n });\r\n\r\n it(\"external element scopes a depth-2 grandchild, mixed with an unrelated deletion\", () => {\r\n // Unique case: grandchild has an external scope violation, but an unrelated element from\r\n // another tree (childB) is also requested and has no violation - it should be deleted.\r\n const rootA = insertElement();\r\n const childA = insertElement({ parentId: rootA });\r\n const grandchildA = insertElement({ parentId: childA });\r\n const rootB = insertElement();\r\n const childB = insertElement({ parentId: rootB });\r\n const external = insertElement({ codeScope: grandchildA, codeValue: \"ext-code\" });\r\n executeTestCase(\"external scopes depth-2 grandchild, unrelated childB deleted\",\r\n [grandchildA, rootA, childB],\r\n [childB],\r\n [rootA, childA, grandchildA, rootB, external],\r\n [rootA, grandchildA]);\r\n });\r\n\r\n it(\"two trees: one has external scope violation, other is deleted cleanly\", () => {\r\n const rootA = insertElement();\r\n const childA = insertElement({ parentId: rootA });\r\n const gcA = insertElement({ parentId: childA });\r\n const external = insertElement({ codeScope: childA, codeValue: \"ext-code\" });\r\n const rootB = insertElement();\r\n const childB1 = insertElement({ parentId: rootB });\r\n const childB2 = insertElement({ parentId: rootB });\r\n const gcB = insertElement({ parentId: childB1 });\r\n executeTestCase(\"one tree ignored, other fully deleted\",\r\n [rootA, rootB],\r\n [rootB, childB1, childB2, gcB],\r\n [rootA, childA, gcA, external],\r\n [rootA]);\r\n });\r\n });\r\n\r\n describe(\"sub-model hierarchy\", () => {\r\n let partitionCounter = 0;\r\n\r\n const insertSubModel = (): Id64String => {\r\n const name = `SubModelPartition-${++partitionCounter}`;\r\n return PhysicalModel.insert(txn, IModel.rootSubjectId, name);\r\n };\r\n\r\n const insertElementInModel = (subModelId: Id64String, opts: { parentId?: Id64String } = {}): Id64String => {\r\n const props: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: subModelId,\r\n category: categoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\r\n ...(opts.parentId ? { parent: { id: opts.parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\r\n };\r\n const id = txn.insertElement(props);\r\n assert.isNotEmpty(id, \"insertElementInModel must return a valid ID\");\r\n txn.saveChanges();\r\n return id;\r\n };\r\n\r\n /** Assert that the sub-model has been deleted. */\r\n const assertModelDeleted = (id: Id64String, msg: string) =>\r\n assert.isUndefined(iModelDb.models.tryGetModelProps(id), msg);\r\n\r\n /** Assert that the sub-model still exists. */\r\n const assertModelExists = (id: Id64String, msg: string) =>\r\n assert.isDefined(iModelDb.models.tryGetModelProps(id), msg);\r\n\r\n it(\"delete a modeled element cascades into its sub-model\", () => {\r\n const partitionId = insertSubModel();\r\n const elem1 = insertElementInModel(partitionId);\r\n const elem2 = insertElementInModel(partitionId);\r\n const unrelated = insertElement();\r\n\r\n const result = txn.deleteElements([partitionId]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assert.isEmpty(result.failedIds);\r\n assertDeleted(partitionId, \"partition element should be deleted\");\r\n assertModelDeleted(partitionId, \"sub-model should be deleted\");\r\n assertDeleted(elem1, \"elem1 inside sub-model should be deleted\");\r\n assertDeleted(elem2, \"elem2 inside sub-model should be deleted\");\r\n assertExists(unrelated, \"unrelated element should be retained\");\r\n });\r\n\r\n /**\r\n * Scenario: Subject -> partition (parent-child) -> modeled-element.\r\n *\r\n * subjectA\r\n * └─ [P:childPartition]\r\n * [M:childPartition] -> elem1\r\n * unrelated\r\n */\r\n it(\"delete a parent whose child is a modeled element cascades into the sub-model\", () => {\r\n const subjectA = Subject.insert(txn, IModel.rootSubjectId, `SubjectA-${++partitionCounter}`);\r\n const childPartitionId = PhysicalModel.insert(txn, subjectA, `ChildPartition-${partitionCounter}`);\r\n const elem1 = insertElementInModel(childPartitionId);\r\n const unrelated = insertElement();\r\n\r\n // Deleting subjectA cascades (parent-child) to childPartitionId, which then cascades (modeled-element) into elem1.\r\n const result = txn.deleteElements([subjectA]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assertDeleted(subjectA, \"subject should be deleted\");\r\n assertDeleted(childPartitionId, \"child partition element should be deleted\");\r\n assertModelDeleted(childPartitionId, \"child partition sub-model should be deleted\");\r\n assertDeleted(elem1, \"elem1 inside child partition sub-model should be deleted\");\r\n assertExists(unrelated, \"unrelated element should be retained\");\r\n });\r\n\r\n /**\r\n * Scenario: sub-model elements have their own children; all should be removed transitively.\r\n *\r\n * [P:partition]\r\n * [M:partition] -> elem1\r\n * └─ childOfElem1\r\n * └─ grandchildOfElem1\r\n * elem2\r\n * unrelated element\r\n */\r\n it(\"delete a modeled element whose sub-model elements have children\", () => {\r\n const partitionId = insertSubModel();\r\n const elem1 = insertElementInModel(partitionId);\r\n const childOfElem1 = insertElementInModel(partitionId, { parentId: elem1 });\r\n const grandchildOfElem1 = insertElementInModel(partitionId, { parentId: childOfElem1 });\r\n const elem2 = insertElementInModel(partitionId);\r\n const unrelated = insertElement();\r\n\r\n const result = txn.deleteElements([partitionId]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assertDeleted(partitionId, \"partition should be deleted\");\r\n assertModelDeleted(partitionId, \"sub-model should be deleted\");\r\n assertDeleted(elem1, \"elem1 should be deleted\");\r\n assertDeleted(childOfElem1, \"child of elem1 should be deleted\");\r\n assertDeleted(grandchildOfElem1, \"grandchild of elem1 should be deleted\");\r\n assertDeleted(elem2, \"elem2 should be deleted\");\r\n assertExists(unrelated, \"unrelated should be retained\");\r\n });\r\n\r\n /**\r\n * Scenario: element inside a sub-model is a code scope for an element outside the delete set. The whole partition subtree must be ignored from the delete set.\r\n *\r\n * [P:partition]\r\n * [M:partition] -> scopingElem <- code scope for `external`\r\n * otherElem\r\n * external (not in delete set)\r\n * unrelated\r\n */\r\n it(\"partition ignored when a sub-model element is a code scope for an external element\", () => {\r\n const partitionId = insertSubModel();\r\n const scopingElem = insertElementInModel(partitionId);\r\n const otherElem = insertElementInModel(partitionId);\r\n const external = insertElement({ codeScope: scopingElem, codeValue: \"ext-code\" });\r\n const unrelated = insertElement();\r\n\r\n // `external` is NOT in the delete set and uses scopingElem as its code scope -> the\r\n // entire partition subtree (including the sub-model) must be ignored from the delete set.\r\n const result = txn.deleteElements([partitionId, unrelated]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.PartialSuccess);\r\n assertExists(partitionId, \"partition should be ignored (retained)\");\r\n assertModelExists(partitionId, \"sub-model should be retained\");\r\n assertExists(scopingElem, \"scopingElem should be retained\");\r\n assertExists(otherElem, \"otherElem should be retained\");\r\n assertExists(external, \"external should be retained\");\r\n assertDeleted(unrelated, \"unrelated should still be deleted\");\r\n });\r\n\r\n /**\r\n * Scenario: the sub-model element of one partition is used as a code scope for an element\r\n * inside a *different* partition's sub-model that is also in the delete set.\r\n * Both partitions and all contents should be deleted.\r\n *\r\n * [P:p1] [M:p1] -> scopingElem\r\n * [P:p2] [M:p2] -> dependentElem (codeScope = scopingElem)\r\n */\r\n it(\"cross-sub-model intra-set code scope dependency: both partitions deleted cleanly\", () => {\r\n const p1 = insertSubModel();\r\n const scopingElem = insertElementInModel(p1);\r\n const p2 = insertSubModel();\r\n const dependentElem = insertElementInModel(p2, {});\r\n // Manually assign the code scope after insertion is not possible through insertElementInModel,\r\n // so use a dedicated insert call.\r\n const dependentId = txn.insertElement({\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: p2,\r\n category: categoryId,\r\n code: { spec: codeSpecId, scope: scopingElem, value: \"dep-code\" },\r\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\r\n } as PhysicalElementProps);\r\n\r\n const result = txn.deleteElements([p1, p2]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assertDeleted(p1, \"p1 should be deleted\");\r\n assertModelDeleted(p1, \"sub-model of p1 should be deleted\");\r\n assertDeleted(scopingElem, \"scopingElem should be deleted\");\r\n assertDeleted(p2, \"p2 should be deleted\");\r\n assertModelDeleted(p2, \"sub-model of p2 should be deleted\");\r\n assertDeleted(dependentElem, \"dependentElem should be deleted\");\r\n assertDeleted(dependentId, \"dependentId should be deleted\");\r\n });\r\n\r\n /**\r\n * Scenario: three-level Subject cascade: deleting a grandparent Subject removes a child\r\n * Subject, which removes a partition (parent-child), which cascades into the sub-model.\r\n *\r\n * grandparentSubject\r\n * └─ childSubject\r\n * └─ [P:grandchildPartition]\r\n * [M:grandchildPartition] -> innerElem1, innerElem2\r\n * unrelated\r\n */\r\n it(\"deep cascade: grandparent Subject -> child Subject -> partition -> sub-model elements\", () => {\r\n const grandparentSubjectId = Subject.insert(txn, IModel.rootSubjectId, `GrandparentSubject-${++partitionCounter}`);\r\n const childSubjectId = Subject.insert(txn, grandparentSubjectId, `ChildSubject-${partitionCounter}`);\r\n const grandchildPartitionId = PhysicalModel.insert(txn, childSubjectId, `GrandchildPartition-${partitionCounter}`);\r\n const innerElem1 = insertElementInModel(grandchildPartitionId);\r\n const innerElem2 = insertElementInModel(grandchildPartitionId);\r\n const unrelated = insertElement();\r\n\r\n const result = txn.deleteElements([grandparentSubjectId]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assertDeleted(grandparentSubjectId, \"grandparent subject should be deleted\");\r\n assertDeleted(childSubjectId, \"child subject should be deleted\");\r\n assertDeleted(grandchildPartitionId, \"grandchild partition should be deleted\");\r\n assertModelDeleted(grandchildPartitionId, \"grandchild sub-model should be deleted\");\r\n assertDeleted(innerElem1, \"innerElem1 should be deleted\");\r\n assertDeleted(innerElem2, \"innerElem2 should be deleted\");\r\n assertExists(unrelated, \"unrelated should be retained\");\r\n });\r\n\r\n /**\r\n * Scenario: empty sub-model: partition with no elements in its sub-model.\r\n *\r\n * [P:partition] [M:partition] (empty)\r\n * unrelated\r\n */\r\n it(\"delete a modeled element whose sub-model is empty\", () => {\r\n const partitionId = insertSubModel();\r\n const unrelated = insertElement();\r\n\r\n const result = txn.deleteElements([partitionId]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assertDeleted(partitionId, \"partition should be deleted\");\r\n assertModelDeleted(partitionId, \"empty sub-model should be deleted\");\r\n assertExists(unrelated, \"unrelated should be retained\");\r\n });\r\n\r\n /**\r\n * Scenario: a regular element has two children, one of which is a partition with a\r\n * sub-model, while the other is an ordinary element. Deleting the regular parent\r\n * removes both children and all sub-model contents.\r\n *\r\n * regularParent (lives in modelId)\r\n * ├─ ordinaryChild\r\n * └─ [P:partitionChild]\r\n * [M:partitionChild] -> subElem1, subElem2\r\n * unrelated\r\n */\r\n it(\"deleting a regular element with a mix of ordinary and partition children cascades correctly\", () => {\r\n const subjectA = Subject.insert(txn, IModel.rootSubjectId, `MixedChildSubject-${++partitionCounter}`);\r\n const partitionChild = PhysicalModel.insert(txn, subjectA, `MixedChildPartition-${partitionCounter}`);\r\n const subElem1 = insertElementInModel(partitionChild);\r\n const subElem2 = insertElementInModel(partitionChild);\r\n const unrelated = insertElement();\r\n\r\n const result = txn.deleteElements([subjectA]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assertDeleted(subjectA, \"subjectA should be deleted\");\r\n assertDeleted(partitionChild, \"partition child should be deleted\");\r\n assertModelDeleted(partitionChild, \"sub-model of partition child should be deleted\");\r\n assertDeleted(subElem1, \"subElem1 should be deleted\");\r\n assertDeleted(subElem2, \"subElem2 should be deleted\");\r\n assertExists(unrelated, \"unrelated should be retained\");\r\n });\r\n\r\n /**\r\n * Scenario: a regular element's grandchild is a partition. Passing the partition's\r\n * direct parent (not the grandparent root) for deletion cascades into the sub-model while\r\n * the grandparent survives.\r\n *\r\n * grandparent (lives in modelId)\r\n * └─ parent <- passed for deletion\r\n * └─ [P:partition]\r\n * [M:partition] -> subElem1, subElem2\r\n */\r\n it(\"deleting a mid-tree regular element whose child is a partition cascades into the sub-model; grandparent survives\", () => {\r\n const subjectGP = Subject.insert(txn, IModel.rootSubjectId, `MidTreeGP-${++partitionCounter}`);\r\n const subjectP = Subject.insert(txn, subjectGP, `MidTreeP-${partitionCounter}`);\r\n const partitionId = PhysicalModel.insert(txn, subjectP, `MidTreePartition-${partitionCounter}`);\r\n const subElem1 = insertElementInModel(partitionId);\r\n const subElem2 = insertElementInModel(partitionId);\r\n\r\n // Only pass subjectP - grandparent must survive, everything below subjectP must go.\r\n const result = txn.deleteElements([subjectP]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assertExists(subjectGP, \"grandparent should survive\");\r\n assertDeleted(subjectP, \"parent should be deleted\");\r\n assertDeleted(partitionId, \"partition should be deleted\");\r\n assertModelDeleted(partitionId, \"sub-model should be deleted\");\r\n assertDeleted(subElem1, \"subElem1 should be deleted\");\r\n assertDeleted(subElem2, \"subElem2 should be deleted\");\r\n });\r\n\r\n it(\"deleting a partition element directly (not via its regular parent) cascades into the sub-model; parent survives\", () => {\r\n const subjectA = Subject.insert(txn, IModel.rootSubjectId, `DirectPartSubject-${++partitionCounter}`);\r\n const partitionId = PhysicalModel.insert(txn, subjectA, `DirectPartPartition-${partitionCounter}`);\r\n const subElem1 = insertElementInModel(partitionId);\r\n const subElem2 = insertElementInModel(partitionId);\r\n\r\n const result = txn.deleteElements([partitionId]);\r\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\r\n assertExists(subjectA, \"subject (regular parent) should survive\");\r\n assertDeleted(partitionId, \"partition should be deleted\");\r\n assertModelDeleted(partitionId, \"sub-model should be deleted\");\r\n assertDeleted(subElem1, \"subElem1 should be deleted\");\r\n assertDeleted(subElem2, \"subElem2 should be deleted\");\r\n });\r\n });\r\n});"]}
1
+ {"version":3,"file":"DeleteElements.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/DeleteElements.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert } from \"chai\";\nimport { DbResult, Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { Code, CodeScopeSpec, IModel, PhysicalElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { BulkDeleteElementsResult, BulkDeleteElementsStatus, ChannelControl, EditTxn, IModelJsFs, PhysicalModel, SnapshotDb, SpatialCategory, Subject } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { withEditTxn } from \"../TestEditTxn\";\n\ndescribe(\"deleteElements (native bulk delete API)\", () => {\n let seedDb: SnapshotDb;\n let iModelDb: SnapshotDb;\n let modelId: Id64String;\n let categoryId: Id64String;\n let codeSpecId: Id64String;\n let txn: EditTxn;\n\n before(async () => {\n IModelJsFs.recursiveMkDirSync(KnownTestLocations.outputDir);\n const seedFile = IModelTestUtils.prepareOutputFile(\"DeleteElements\", \"seed.bim\");\n seedDb = SnapshotDb.createEmpty(seedFile, { rootSubject: { name: \"DeleteElements\" } });\n\n await withEditTxn(seedDb, \"create elements\", async (editTxn) => {\n modelId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"TestModel\");\n categoryId = SpatialCategory.insert(editTxn, IModel.dictionaryId, \"TestCategory\", new SubCategoryAppearance());\n codeSpecId = seedDb.codeSpecs.insert(editTxn, \"TestScopeSpec\", CodeScopeSpec.Type.RelatedElement);\n assert.isNotEmpty(modelId, \"Expected a valid PhysicalModel id\");\n assert.isNotEmpty(categoryId, \"Expected a valid SpatialCategory id\");\n assert.isNotEmpty(codeSpecId, \"Expected a valid CodeSpec id\");\n });\n });\n\n beforeEach(() => {\n iModelDb = SnapshotDb.createFrom(seedDb, IModelTestUtils.prepareOutputFile(\"DeleteElements\", \"DeleteElements.bim\"));\n assert.isTrue(iModelDb.isOpen);\n txn = new EditTxn(iModelDb, \"delete elements\");\n txn.start();\n iModelDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n afterEach(() => {\n txn.end(\"abandon\");\n if (iModelDb.isOpen) {\n iModelDb.close();\n }\n });\n\n after(() => {\n if (seedDb.isOpen)\n seedDb.close();\n });\n\n const insertElement = (opts: { parentId?: Id64String; codeScope?: Id64String; codeValue?: string } = {}): Id64String => {\n const { parentId, codeScope, codeValue } = opts;\n const props: PhysicalElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n model: modelId,\n category: categoryId,\n code: codeScope && codeValue ? { spec: codeSpecId, scope: codeScope, value: codeValue } : Code.createEmpty(),\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\n ...(parentId ? { parent: { id: parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\n };\n const id = txn.insertElement(props);\n assert.isNotEmpty(id, \"insertElement must return a valid ID\");\n txn.saveChanges();\n return id;\n };\n\n /** Assert that the element with the given id exists or has been deleted. */\n const assertExists = (id: Id64String, msg: string) => assert.isDefined(iModelDb.elements.tryGetElement(id), msg);\n const assertDeleted = (id: Id64String, msg: string) => assert.isUndefined(iModelDb.elements.tryGetElement(id), msg);\n\n // Run deleteElements, then verify the returned failed set, check each id in `deleted` is gone and each id in `retained` is still present.\n const executeTestCase = (label: string, idsToDelete: Id64Array, deleted: Id64Array, retained: Id64Array, expectedFailed: Id64Array = []) => {\n const resultStatus: BulkDeleteElementsResult = txn.deleteElements(idsToDelete);\n if (expectedFailed.length === 0)\n assert.equal(resultStatus.status, BulkDeleteElementsStatus.Success);\n else\n assert.equal(resultStatus.status, (expectedFailed.length === idsToDelete.length) ? BulkDeleteElementsStatus.DeletionFailed : BulkDeleteElementsStatus.PartialSuccess);\n\n assert.sameMembers(Array.from(resultStatus.failedIds), expectedFailed, `[${label}] failed set mismatch`);\n\n for (const id of deleted)\n assertDeleted(id, `[${label}] ${id} should have been deleted`);\n\n for (const id of retained)\n assertExists(id, `[${label}] ${id} should have been retained`);\n\n txn.abandonChanges();\n };\n\n /**\n * Shared hierarchy used throughout the parent-child tests:\n *\n * parentA parentB standalone\n * ├─ childA1 ├─ childB1 └─ childS1\n * │ └─ grandchildA1 └─ childB2\n * ├─ childA2\n * │ └─ grandchildA2\n * └─ childA3\n */\n describe(\"basic tests\", () => {\n let parentA: Id64String, childA1: Id64String, grandchildA1: Id64String;\n let childA2: Id64String, grandchildA2: Id64String, childA3: Id64String;\n let parentB: Id64String, childB1: Id64String, childB2: Id64String;\n let standalone: Id64String, childS1: Id64String;\n let all: Id64Array;\n\n beforeEach(() => {\n parentA = insertElement();\n childA1 = insertElement({ parentId: parentA });\n grandchildA1 = insertElement({ parentId: childA1 });\n childA2 = insertElement({ parentId: parentA });\n grandchildA2 = insertElement({ parentId: childA2 });\n childA3 = insertElement({ parentId: parentA });\n parentB = insertElement();\n childB1 = insertElement({ parentId: parentB });\n childB2 = insertElement({ parentId: parentB });\n standalone = insertElement();\n childS1 = insertElement({ parentId: standalone });\n all = [parentA, childA1, grandchildA1, childA2, grandchildA2, childA3,\n parentB, childB1, childB2, standalone, childS1];\n });\n\n it(\"delete a root element\", () => {\n executeTestCase(\"root cascades\",\n [parentA],\n [parentA, childA1, grandchildA1, childA2, grandchildA2, childA3],\n [parentB, childB1, childB2, standalone, childS1]);\n });\n\n it(\"explicitly delete the whole tree\", () => {\n executeTestCase(\"redundant descendants in input\",\n [parentA, childA1, grandchildA1, childA2],\n [parentA, childA1, grandchildA1, childA2, grandchildA2, childA3],\n [parentB, childB1, childB2, standalone, childS1]);\n });\n\n it(\"deleting all roots removes every element\", () => {\n executeTestCase(\"delete all roots\",\n [parentA, parentB, standalone],\n all,\n []);\n });\n\n it(\"empty input set is a no-op\", () => {\n executeTestCase(\"empty set\",\n [],\n [],\n all);\n });\n\n it(\"duplicate IDs should be handled\", () => {\n const rootA = insertElement();\n const rootB = insertElement();\n\n // rootA appears twice - should not throw and should be deleted exactly once.\n assert.equal(txn.deleteElements([rootA, rootA, rootB]).status, BulkDeleteElementsStatus.Success);\n assertDeleted(rootA, \"rootA should be deleted\");\n assertDeleted(rootB, \"rootB should be deleted\");\n });\n\n it(\"invalid IDs in the input throw an exception\", () => {\n const rootA = insertElement();\n\n assert.throws(() => txn.deleteElements([Id64.invalid, rootA]), `Invalid element ids: 0`);\n assert.throws(() => txn.deleteElements([\"not-an-id\", rootA]), `Invalid element ids: not-an-id`);\n\n assertExists(rootA, \"rootA should not have been deleted after a throw\");\n });\n\n it(\"deleting a child removes its subtree but leaves the parent\", () => {\n executeTestCase(\"delete depth-1 child\",\n [childA1],\n [childA1, grandchildA1],\n [parentA, childA2, grandchildA2, childA3, parentB, childB1, childB2, standalone, childS1]);\n });\n\n it(\"deleting two mid-tree siblings leaves their parent and unrelated siblings\", () => {\n executeTestCase(\"delete two depth-1 siblings\",\n [childA1, childA2],\n [childA1, grandchildA1, childA2, grandchildA2],\n [parentA, childA3, parentB, childB1, childB2, standalone, childS1]);\n });\n\n it(\"deleting a child from one tree and a child from another tree\", () => {\n executeTestCase(\"cross-tree mid-tree delete\",\n [childA1, childB2],\n [childA1, grandchildA1, childB2],\n [parentA, childA2, grandchildA2, childA3, parentB, childB1, standalone, childS1]);\n });\n\n it(\"deleting mid-tree nodes mixed with a root\", () => {\n executeTestCase(\"mid-tree + roots mixed\",\n [childA1, childA3, parentB, standalone],\n [childA1, grandchildA1, childA3, parentB, childB1, childB2, standalone, childS1],\n [parentA, childA2, grandchildA2]);\n });\n\n it(\"deleting only grandchildren leaves all ancestors\", () => {\n executeTestCase(\"delete leaves only\",\n [grandchildA1, grandchildA2],\n [grandchildA1, grandchildA2],\n [parentA, childA1, childA2, childA3, parentB, childB1, childB2, standalone, childS1]);\n });\n\n it(\"deleting leaves from different subtrees simultaneously\", () => {\n executeTestCase(\"leaves from multiple subtrees\",\n [grandchildA1, childB1, childS1],\n [grandchildA1, childB1, childS1],\n [parentA, childA1, childA2, grandchildA2, childA3, parentB, childB2, standalone]);\n });\n\n it(\"deleting root, mid-tree and leaf\", () => {\n executeTestCase(\"root + child + grandchild + leaf\",\n [childA1, grandchildA2, parentB, childS1],\n [childA1, grandchildA1, grandchildA2, parentB, childB1, childB2, childS1],\n [parentA, childA2, childA3, standalone]);\n });\n\n it(\"parent and its grandchild\", () => {\n executeTestCase(\"parent + grandchild redundant\",\n [parentA, grandchildA1],\n [parentA, childA1, grandchildA1, childA2, grandchildA2, childA3],\n [parentB, childB1, childB2, standalone, childS1]);\n });\n });\n\n describe(\"intra-set code scope dependency\", () => {\n it(\"child element is the code scope for an unrelated element\", () => {\n const rootA = insertElement();\n const childA = insertElement({ parentId: rootA });\n const rootB = insertElement({ codeScope: childA, codeValue: \"rootB-code\" });\n executeTestCase(\"depth-1 child scopes unrelated root - delete child+root directly\",\n [childA, rootB],\n [childA, rootB],\n [rootA]);\n\n executeTestCase(\"depth-1 child scopes unrelated root - delete child only\",\n [childA],\n [],\n [rootA, childA, rootB],\n [childA]);\n\n executeTestCase(\"depth-1 child scopes unrelated root - delete root only\",\n [rootB],\n [rootB],\n [rootA, childA]);\n });\n\n it(\"grandchild is the code scope for an unrelated root\", () => {\n const rootA = insertElement();\n const childA = insertElement({ parentId: rootA });\n const grandchildA = insertElement({ parentId: childA });\n const rootB = insertElement({ codeScope: grandchildA, codeValue: \"rootB-code\" });\n executeTestCase(\"depth-2 grandchild scopes unrelated root - delete both roots\",\n [rootA, rootB],\n [rootA, childA, grandchildA, rootB],\n []);\n\n executeTestCase(\"depth-2 grandchild scopes unrelated root - delete grandchild+root directly\",\n [grandchildA, rootB],\n [grandchildA, rootB],\n [rootA, childA]);\n });\n\n it(\"root element scopes a child in another subtree\", () => {\n const rootA = insertElement();\n const rootB = insertElement();\n const childB = insertElement({ parentId: rootB, codeScope: rootA, codeValue: \"childB-code\" });\n executeTestCase(\"root scopes depth-1 child in sibling tree\",\n [rootA, rootB],\n [rootA, rootB, childB],\n []);\n });\n\n it(\"scope chains\", () => {\n // C -> B -> A\n // Test all combinations of inputs\n const rootA = insertElement();\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\n const rootC = insertElement({ codeScope: rootB, codeValue: \"rootC-code\" });\n executeTestCase(\"scope chain single A\", [rootA], [], [rootA, rootB, rootC], [rootA]);\n executeTestCase(\"scope chain single B\", [rootB], [], [rootA, rootB, rootC], [rootB]);\n executeTestCase(\"scope chain single C\", [rootC], [rootC], [rootA, rootB]);\n\n executeTestCase(\"scope chain forward\", [rootA, rootB, rootC], [rootA, rootB, rootC], []);\n executeTestCase(\"scope chain reversed\", [rootC, rootB, rootA], [rootA, rootB, rootC], []);\n executeTestCase(\"scope chain middle-first\", [rootB, rootA, rootC], [rootA, rootB, rootC], []);\n });\n\n it(\"scope chain A -> B -> C -> D where only A and D are in the delete set\", () => {\n const rootA = insertElement();\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\n const rootC = insertElement({ codeScope: rootB, codeValue: \"rootC-code\" });\n const rootD = insertElement({ codeScope: rootC, codeValue: \"rootD-code\" });\n\n // Only A and D in the delete set. B is external -> A ignored. D's scope (C) is not being deleted -> D is safe.\n executeTestCase(\"deep gap chain: A ignored, D deleted\",\n [rootA, rootD],\n [rootD],\n [rootA, rootB, rootC],\n [rootA]);\n });\n\n it(\"scope chain delete with skipping constraint validation should fail\", () => {\n const rootA = insertElement();\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\n const rootC = insertElement({ codeScope: rootB, codeValue: \"rootC-code\" });\n const rootD = insertElement({ codeScope: rootC, codeValue: \"rootD-code\" });\n\n const resultStatus: BulkDeleteElementsResult = txn.deleteElements([rootA, rootD], { skipFKConstraintValidations: true });\n assert.equal(resultStatus.status, BulkDeleteElementsStatus.DeletionFailed);\n assert.equal(resultStatus.sqlDeleteStatus, DbResult.BE_SQLITE_CONSTRAINT_FOREIGNKEY);\n });\n\n it(\"two elements using the same scope\", () => {\n // A is the code scope for both B and C independently.\n // A\n // / \\\n // B C (code scope, not parent-child)\n const rootA = insertElement();\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\n const rootC = insertElement({ codeScope: rootA, codeValue: \"rootC-code\" });\n executeTestCase(\"delete all three\",\n [rootA, rootB, rootC],\n [rootA, rootB, rootC],\n []);\n\n executeTestCase(\"delete only B and C\",\n [rootB, rootC],\n [rootB, rootC],\n [rootA]);\n });\n\n it(\"parent is also the code scope of its own child\", () => {\n const rootP = insertElement();\n const childC = insertElement({ parentId: rootP, codeScope: rootP, codeValue: \"childC-code\" });\n executeTestCase(\"parent is code scope of child - delete parent\",\n [rootP],\n [rootP, childC],\n []);\n });\n\n it(\"sibling scopes it's own sibling\", () => {\n // parent\n // ├─ childA (code scope for childB)\n // └─ childB (scoped by childA)\n const parent = insertElement();\n const childA = insertElement({ parentId: parent });\n const childB = insertElement({ parentId: parent, codeScope: childA, codeValue: \"childB-code\" });\n\n // Delete via parent cascade - sibling scope must not block deletion.\n executeTestCase(\"sibling scope - delete via parent\",\n [parent],\n [parent, childA, childB],\n []);\n\n // Delete both siblings directly - intra-set scope, no external violation.\n executeTestCase(\"sibling scope - delete both directly\",\n [childA, childB],\n [childA, childB],\n [parent]);\n\n // Delete only the scoped child - its scope (childA) is not being deleted, safe to delete.\n executeTestCase(\"sibling scope - delete only scoped child\",\n [childB],\n [childB],\n [parent, childA]);\n\n // Delete only the scope element - childB is external -> childA ignored.\n executeTestCase(\"sibling scope - delete only scope element, ignored due to external childB\",\n [childA],\n [],\n [parent, childA, childB],\n [childA]);\n });\n });\n\n describe(\"Code scope violations to test delete set element pruning\", () => {\n it(\"root is code scope for an external element\", () => {\n const rootA = insertElement();\n const external = insertElement({ codeScope: rootA, codeValue: \"ext-code\" });\n const rootB = insertElement();\n executeTestCase(\"external scopes root\",\n [rootA, rootB],\n [rootB],\n [rootA, external],\n [rootA]);\n });\n\n it(\"depth-1 child is code scope for external\", () => {\n const rootA = insertElement();\n const childA = insertElement({ parentId: rootA });\n const external = insertElement({ codeScope: childA, codeValue: \"ext-code\" });\n const rootB = insertElement();\n executeTestCase(\"external scopes depth-1 child - parent subtree ignored\",\n [rootA, rootB],\n [rootB],\n [rootA, childA, external],\n [rootA]);\n });\n\n it(\"depth-2 grandchild is code scope for external\", () => {\n const rootA = insertElement();\n const childA = insertElement({ parentId: rootA });\n const grandchildA = insertElement({ parentId: childA });\n const external = insertElement({ codeScope: grandchildA, codeValue: \"ext-code\" });\n const rootB = insertElement();\n executeTestCase(\"external scopes depth-2 grandchild - grandparent subtree ignored\",\n [rootA, rootB],\n [rootB],\n [rootA, childA, grandchildA, external],\n [rootA]);\n });\n\n it(\"only the child is passed for deletion\", () => {\n const rootA = insertElement();\n const childA = insertElement({ parentId: rootA });\n const external = insertElement({ codeScope: childA, codeValue: \"ext-code\" });\n executeTestCase(\"external scopes requested child\",\n [childA],\n [],\n [rootA, childA, external],\n [childA]);\n });\n\n it(\"root has both an external scope dependent AND an intra-set scope dependent\", () => {\n const rootA = insertElement();\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\n const external = insertElement({ codeScope: rootA, codeValue: \"ext-code\" });\n executeTestCase(\"root ignored due to external; sibling still deleted\",\n [rootA, rootB],\n [rootB],\n [rootA, external],\n [rootA]);\n });\n\n it(\"two independent external scope violations\", () => {\n const rootA = insertElement();\n const rootB = insertElement();\n const extX = insertElement({ codeScope: rootA, codeValue: \"extX\" });\n const extY = insertElement({ codeScope: rootB, codeValue: \"extY\" });\n const rootC = insertElement();\n executeTestCase(\"two independent violations\",\n [rootA, rootB, rootC],\n [rootC],\n [rootA, rootB, extX, extY],\n [rootA, rootB]);\n });\n });\n\n describe(\"mixed element hierarchy and code scope violations\", () => {\n it(\"root scopes another root - delete both roots, all descendants removed\", () => {\n const rootA = insertElement();\n const childA1 = insertElement({ parentId: rootA });\n const childA2 = insertElement({ parentId: rootA });\n const rootB = insertElement({ codeScope: rootA, codeValue: \"rootB-code\" });\n const childB1 = insertElement({ parentId: rootB });\n executeTestCase(\"root scopes root - delete both roots\",\n [rootA, rootB],\n [rootA, childA1, childA2, rootB, childB1],\n []);\n });\n\n it(\"depth-1 child scopes an unrelated root\", () => {\n const rootA = insertElement();\n const childA1 = insertElement({ parentId: rootA });\n const rootB = insertElement({ codeScope: childA1, codeValue: \"rootB-code\" });\n const childB1 = insertElement({ parentId: rootB });\n executeTestCase(\"depth-1 child scopes root - delete both via parents\",\n [rootA, rootB],\n [rootA, childA1, rootB, childB1],\n []);\n // Reverse input order - result must be identical\n executeTestCase(\"depth-1 child scopes root - reverse input order\",\n [rootB, rootA],\n [rootA, childA1, rootB, childB1],\n []);\n });\n\n it(\"depth-1 child scopes an unrelated root - delete child and root directly (parent survives)\", () => {\n const rootA = insertElement();\n const childA1 = insertElement({ parentId: rootA });\n const rootB = insertElement({ codeScope: childA1, codeValue: \"rootB-code\" });\n const childB1 = insertElement({ parentId: rootB });\n // Only childA1 and rootB - rootA is NOT in the delete set.\n executeTestCase(\"depth-1 child scopes root - delete child + scoped root directly\",\n [childA1, rootB],\n [childA1, rootB, childB1],\n [rootA]);\n });\n\n it(\"depth-1 child scopes an unrelated root - deleting only the child cascades into the scoped root's subtree\", () => {\n // childA1 is the code scope of rootB. When childA1 is deleted, rootB loses its scope\n // element -> rootB (and its children) must also be deleted.\n const rootA = insertElement();\n const childA1 = insertElement({ parentId: rootA });\n const rootB = insertElement({ codeScope: childA1, codeValue: \"rootB-code\" });\n const childB1 = insertElement({ parentId: rootB });\n executeTestCase(\"delete child only - scoped root also removed\",\n [childA1],\n [],\n [rootA, childA1, rootB, childB1],\n [childA1]);\n });\n\n it(\"root scopes a depth-1 child in sibling tree - delete both roots, all descendants removed\", () => {\n const rootA = insertElement();\n const childA1 = insertElement({ parentId: rootA });\n const rootB = insertElement();\n const childB1 = insertElement({ parentId: rootB, codeScope: rootA, codeValue: \"childB1-code\" });\n executeTestCase(\"root scopes depth-1 child - delete both roots\",\n [rootA, rootB],\n [rootA, childA1, rootB, childB1],\n []);\n });\n\n it(\"depth-1 child scopes a depth-1 child in sibling tree - delete both children directly (parents survive)\", () => {\n const rootA = insertElement();\n const childA1 = insertElement({ parentId: rootA });\n const rootB = insertElement();\n const childB1 = insertElement({ parentId: rootB, codeScope: childA1, codeValue: \"childB1-code\" });\n const childB2 = insertElement({ parentId: rootB });\n executeTestCase(\"sibling-child scope - delete both children directly\",\n [childA1, childB1],\n [childA1, childB1],\n [rootA, rootB, childB2]);\n });\n\n it(\"depth-2 grandchild scopes an unrelated root - delete grandparent + scoped root\", () => {\n const rootA = insertElement();\n const childA = insertElement({ parentId: rootA });\n const grandchildA = insertElement({ parentId: childA });\n const rootB = insertElement({ codeScope: grandchildA, codeValue: \"rootB-code\" });\n const childB = insertElement({ parentId: rootB });\n executeTestCase(\"depth-2 grandchild scopes root - delete both roots\",\n [rootA, rootB],\n [rootA, childA, grandchildA, rootB, childB],\n []);\n\n // Delete grandchild and scoped root directly (rootA and childA survive)\n executeTestCase(\"depth-2 grandchild scopes root - delete grandchild + root directly\",\n [grandchildA, rootB],\n [grandchildA, rootB, childB],\n [rootA, childA]);\n });\n\n it(\"external element scopes a depth-2 grandchild, mixed with an unrelated deletion\", () => {\n // Unique case: grandchild has an external scope violation, but an unrelated element from\n // another tree (childB) is also requested and has no violation - it should be deleted.\n const rootA = insertElement();\n const childA = insertElement({ parentId: rootA });\n const grandchildA = insertElement({ parentId: childA });\n const rootB = insertElement();\n const childB = insertElement({ parentId: rootB });\n const external = insertElement({ codeScope: grandchildA, codeValue: \"ext-code\" });\n executeTestCase(\"external scopes depth-2 grandchild, unrelated childB deleted\",\n [grandchildA, rootA, childB],\n [childB],\n [rootA, childA, grandchildA, rootB, external],\n [rootA, grandchildA]);\n });\n\n it(\"two trees: one has external scope violation, other is deleted cleanly\", () => {\n const rootA = insertElement();\n const childA = insertElement({ parentId: rootA });\n const gcA = insertElement({ parentId: childA });\n const external = insertElement({ codeScope: childA, codeValue: \"ext-code\" });\n const rootB = insertElement();\n const childB1 = insertElement({ parentId: rootB });\n const childB2 = insertElement({ parentId: rootB });\n const gcB = insertElement({ parentId: childB1 });\n executeTestCase(\"one tree ignored, other fully deleted\",\n [rootA, rootB],\n [rootB, childB1, childB2, gcB],\n [rootA, childA, gcA, external],\n [rootA]);\n });\n });\n\n describe(\"sub-model hierarchy\", () => {\n let partitionCounter = 0;\n\n const insertSubModel = (): Id64String => {\n const name = `SubModelPartition-${++partitionCounter}`;\n return PhysicalModel.insert(txn, IModel.rootSubjectId, name);\n };\n\n const insertElementInModel = (subModelId: Id64String, opts: { parentId?: Id64String } = {}): Id64String => {\n const props: PhysicalElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n model: subModelId,\n category: categoryId,\n code: Code.createEmpty(),\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\n ...(opts.parentId ? { parent: { id: opts.parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\n };\n const id = txn.insertElement(props);\n assert.isNotEmpty(id, \"insertElementInModel must return a valid ID\");\n txn.saveChanges();\n return id;\n };\n\n /** Assert that the sub-model has been deleted. */\n const assertModelDeleted = (id: Id64String, msg: string) =>\n assert.isUndefined(iModelDb.models.tryGetModelProps(id), msg);\n\n /** Assert that the sub-model still exists. */\n const assertModelExists = (id: Id64String, msg: string) =>\n assert.isDefined(iModelDb.models.tryGetModelProps(id), msg);\n\n it(\"delete a modeled element cascades into its sub-model\", () => {\n const partitionId = insertSubModel();\n const elem1 = insertElementInModel(partitionId);\n const elem2 = insertElementInModel(partitionId);\n const unrelated = insertElement();\n\n const result = txn.deleteElements([partitionId]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assert.isEmpty(result.failedIds);\n assertDeleted(partitionId, \"partition element should be deleted\");\n assertModelDeleted(partitionId, \"sub-model should be deleted\");\n assertDeleted(elem1, \"elem1 inside sub-model should be deleted\");\n assertDeleted(elem2, \"elem2 inside sub-model should be deleted\");\n assertExists(unrelated, \"unrelated element should be retained\");\n });\n\n /**\n * Scenario: Subject -> partition (parent-child) -> modeled-element.\n *\n * subjectA\n * └─ [P:childPartition]\n * [M:childPartition] -> elem1\n * unrelated\n */\n it(\"delete a parent whose child is a modeled element cascades into the sub-model\", () => {\n const subjectA = Subject.insert(txn, IModel.rootSubjectId, `SubjectA-${++partitionCounter}`);\n const childPartitionId = PhysicalModel.insert(txn, subjectA, `ChildPartition-${partitionCounter}`);\n const elem1 = insertElementInModel(childPartitionId);\n const unrelated = insertElement();\n\n // Deleting subjectA cascades (parent-child) to childPartitionId, which then cascades (modeled-element) into elem1.\n const result = txn.deleteElements([subjectA]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assertDeleted(subjectA, \"subject should be deleted\");\n assertDeleted(childPartitionId, \"child partition element should be deleted\");\n assertModelDeleted(childPartitionId, \"child partition sub-model should be deleted\");\n assertDeleted(elem1, \"elem1 inside child partition sub-model should be deleted\");\n assertExists(unrelated, \"unrelated element should be retained\");\n });\n\n /**\n * Scenario: sub-model elements have their own children; all should be removed transitively.\n *\n * [P:partition]\n * [M:partition] -> elem1\n * └─ childOfElem1\n * └─ grandchildOfElem1\n * elem2\n * unrelated element\n */\n it(\"delete a modeled element whose sub-model elements have children\", () => {\n const partitionId = insertSubModel();\n const elem1 = insertElementInModel(partitionId);\n const childOfElem1 = insertElementInModel(partitionId, { parentId: elem1 });\n const grandchildOfElem1 = insertElementInModel(partitionId, { parentId: childOfElem1 });\n const elem2 = insertElementInModel(partitionId);\n const unrelated = insertElement();\n\n const result = txn.deleteElements([partitionId]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assertDeleted(partitionId, \"partition should be deleted\");\n assertModelDeleted(partitionId, \"sub-model should be deleted\");\n assertDeleted(elem1, \"elem1 should be deleted\");\n assertDeleted(childOfElem1, \"child of elem1 should be deleted\");\n assertDeleted(grandchildOfElem1, \"grandchild of elem1 should be deleted\");\n assertDeleted(elem2, \"elem2 should be deleted\");\n assertExists(unrelated, \"unrelated should be retained\");\n });\n\n /**\n * Scenario: element inside a sub-model is a code scope for an element outside the delete set. The whole partition subtree must be ignored from the delete set.\n *\n * [P:partition]\n * [M:partition] -> scopingElem <- code scope for `external`\n * otherElem\n * external (not in delete set)\n * unrelated\n */\n it(\"partition ignored when a sub-model element is a code scope for an external element\", () => {\n const partitionId = insertSubModel();\n const scopingElem = insertElementInModel(partitionId);\n const otherElem = insertElementInModel(partitionId);\n const external = insertElement({ codeScope: scopingElem, codeValue: \"ext-code\" });\n const unrelated = insertElement();\n\n // `external` is NOT in the delete set and uses scopingElem as its code scope -> the\n // entire partition subtree (including the sub-model) must be ignored from the delete set.\n const result = txn.deleteElements([partitionId, unrelated]);\n assert.equal(result.status, BulkDeleteElementsStatus.PartialSuccess);\n assertExists(partitionId, \"partition should be ignored (retained)\");\n assertModelExists(partitionId, \"sub-model should be retained\");\n assertExists(scopingElem, \"scopingElem should be retained\");\n assertExists(otherElem, \"otherElem should be retained\");\n assertExists(external, \"external should be retained\");\n assertDeleted(unrelated, \"unrelated should still be deleted\");\n });\n\n /**\n * Scenario: the sub-model element of one partition is used as a code scope for an element\n * inside a *different* partition's sub-model that is also in the delete set.\n * Both partitions and all contents should be deleted.\n *\n * [P:p1] [M:p1] -> scopingElem\n * [P:p2] [M:p2] -> dependentElem (codeScope = scopingElem)\n */\n it(\"cross-sub-model intra-set code scope dependency: both partitions deleted cleanly\", () => {\n const p1 = insertSubModel();\n const scopingElem = insertElementInModel(p1);\n const p2 = insertSubModel();\n const dependentElem = insertElementInModel(p2, {});\n // Manually assign the code scope after insertion is not possible through insertElementInModel,\n // so use a dedicated insert call.\n const dependentId = txn.insertElement({\n classFullName: \"Generic:PhysicalObject\",\n model: p2,\n category: categoryId,\n code: { spec: codeSpecId, scope: scopingElem, value: \"dep-code\" },\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\n } as PhysicalElementProps);\n\n const result = txn.deleteElements([p1, p2]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assertDeleted(p1, \"p1 should be deleted\");\n assertModelDeleted(p1, \"sub-model of p1 should be deleted\");\n assertDeleted(scopingElem, \"scopingElem should be deleted\");\n assertDeleted(p2, \"p2 should be deleted\");\n assertModelDeleted(p2, \"sub-model of p2 should be deleted\");\n assertDeleted(dependentElem, \"dependentElem should be deleted\");\n assertDeleted(dependentId, \"dependentId should be deleted\");\n });\n\n /**\n * Scenario: three-level Subject cascade: deleting a grandparent Subject removes a child\n * Subject, which removes a partition (parent-child), which cascades into the sub-model.\n *\n * grandparentSubject\n * └─ childSubject\n * └─ [P:grandchildPartition]\n * [M:grandchildPartition] -> innerElem1, innerElem2\n * unrelated\n */\n it(\"deep cascade: grandparent Subject -> child Subject -> partition -> sub-model elements\", () => {\n const grandparentSubjectId = Subject.insert(txn, IModel.rootSubjectId, `GrandparentSubject-${++partitionCounter}`);\n const childSubjectId = Subject.insert(txn, grandparentSubjectId, `ChildSubject-${partitionCounter}`);\n const grandchildPartitionId = PhysicalModel.insert(txn, childSubjectId, `GrandchildPartition-${partitionCounter}`);\n const innerElem1 = insertElementInModel(grandchildPartitionId);\n const innerElem2 = insertElementInModel(grandchildPartitionId);\n const unrelated = insertElement();\n\n const result = txn.deleteElements([grandparentSubjectId]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assertDeleted(grandparentSubjectId, \"grandparent subject should be deleted\");\n assertDeleted(childSubjectId, \"child subject should be deleted\");\n assertDeleted(grandchildPartitionId, \"grandchild partition should be deleted\");\n assertModelDeleted(grandchildPartitionId, \"grandchild sub-model should be deleted\");\n assertDeleted(innerElem1, \"innerElem1 should be deleted\");\n assertDeleted(innerElem2, \"innerElem2 should be deleted\");\n assertExists(unrelated, \"unrelated should be retained\");\n });\n\n /**\n * Scenario: empty sub-model: partition with no elements in its sub-model.\n *\n * [P:partition] [M:partition] (empty)\n * unrelated\n */\n it(\"delete a modeled element whose sub-model is empty\", () => {\n const partitionId = insertSubModel();\n const unrelated = insertElement();\n\n const result = txn.deleteElements([partitionId]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assertDeleted(partitionId, \"partition should be deleted\");\n assertModelDeleted(partitionId, \"empty sub-model should be deleted\");\n assertExists(unrelated, \"unrelated should be retained\");\n });\n\n /**\n * Scenario: a regular element has two children, one of which is a partition with a\n * sub-model, while the other is an ordinary element. Deleting the regular parent\n * removes both children and all sub-model contents.\n *\n * regularParent (lives in modelId)\n * ├─ ordinaryChild\n * └─ [P:partitionChild]\n * [M:partitionChild] -> subElem1, subElem2\n * unrelated\n */\n it(\"deleting a regular element with a mix of ordinary and partition children cascades correctly\", () => {\n const subjectA = Subject.insert(txn, IModel.rootSubjectId, `MixedChildSubject-${++partitionCounter}`);\n const partitionChild = PhysicalModel.insert(txn, subjectA, `MixedChildPartition-${partitionCounter}`);\n const subElem1 = insertElementInModel(partitionChild);\n const subElem2 = insertElementInModel(partitionChild);\n const unrelated = insertElement();\n\n const result = txn.deleteElements([subjectA]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assertDeleted(subjectA, \"subjectA should be deleted\");\n assertDeleted(partitionChild, \"partition child should be deleted\");\n assertModelDeleted(partitionChild, \"sub-model of partition child should be deleted\");\n assertDeleted(subElem1, \"subElem1 should be deleted\");\n assertDeleted(subElem2, \"subElem2 should be deleted\");\n assertExists(unrelated, \"unrelated should be retained\");\n });\n\n /**\n * Scenario: a regular element's grandchild is a partition. Passing the partition's\n * direct parent (not the grandparent root) for deletion cascades into the sub-model while\n * the grandparent survives.\n *\n * grandparent (lives in modelId)\n * └─ parent <- passed for deletion\n * └─ [P:partition]\n * [M:partition] -> subElem1, subElem2\n */\n it(\"deleting a mid-tree regular element whose child is a partition cascades into the sub-model; grandparent survives\", () => {\n const subjectGP = Subject.insert(txn, IModel.rootSubjectId, `MidTreeGP-${++partitionCounter}`);\n const subjectP = Subject.insert(txn, subjectGP, `MidTreeP-${partitionCounter}`);\n const partitionId = PhysicalModel.insert(txn, subjectP, `MidTreePartition-${partitionCounter}`);\n const subElem1 = insertElementInModel(partitionId);\n const subElem2 = insertElementInModel(partitionId);\n\n // Only pass subjectP - grandparent must survive, everything below subjectP must go.\n const result = txn.deleteElements([subjectP]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assertExists(subjectGP, \"grandparent should survive\");\n assertDeleted(subjectP, \"parent should be deleted\");\n assertDeleted(partitionId, \"partition should be deleted\");\n assertModelDeleted(partitionId, \"sub-model should be deleted\");\n assertDeleted(subElem1, \"subElem1 should be deleted\");\n assertDeleted(subElem2, \"subElem2 should be deleted\");\n });\n\n it(\"deleting a partition element directly (not via its regular parent) cascades into the sub-model; parent survives\", () => {\n const subjectA = Subject.insert(txn, IModel.rootSubjectId, `DirectPartSubject-${++partitionCounter}`);\n const partitionId = PhysicalModel.insert(txn, subjectA, `DirectPartPartition-${partitionCounter}`);\n const subElem1 = insertElementInModel(partitionId);\n const subElem2 = insertElementInModel(partitionId);\n\n const result = txn.deleteElements([partitionId]);\n assert.equal(result.status, BulkDeleteElementsStatus.Success);\n assertExists(subjectA, \"subject (regular parent) should survive\");\n assertDeleted(partitionId, \"partition should be deleted\");\n assertModelDeleted(partitionId, \"sub-model should be deleted\");\n assertDeleted(subElem1, \"subElem1 should be deleted\");\n assertDeleted(subElem2, \"subElem2 should be deleted\");\n });\n });\n});"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayStyle.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/DisplayStyle.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\n\r\nimport { expect } from \"chai\";\r\nimport { CompressedId64Set, Guid } from \"@itwin/core-bentley\";\r\nimport { DisplayStyle3dSettingsProps, DisplayStyleSettingsProps, IModel, SkyBoxImageType, SkyBoxProps } from \"@itwin/core-common\";\r\nimport { DisplayStyle3d, IModelElementCloneContext, SnapshotDb, SpatialCategory, StandaloneDb, SubCategory } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"DisplayStyle\", () => {\r\n it(\"preserves skybox\", () => {\r\n const localDb = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DisplayStyle\", \"DisplayStyleSkybox.bim\"), {\r\n rootSubject: { name: \"DisplayStyle tests\", description: \"DisplayStyle tests\" },\r\n client: \"DisplayStyle\",\r\n globalOrigin: { x: 0, y: 0 },\r\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\r\n guid: Guid.createValue(),\r\n });\r\n\r\n withEditTxn(localDb, (txn) => {\r\n function roundTrip(sky: SkyBoxProps): void {\r\n const props = { environment: { sky } };\r\n const name = Guid.createValue();\r\n const id = DisplayStyle3d.insert(txn, IModel.dictionaryId, name, props);\r\n expect(id).not.to.equal(\"0\");\r\n\r\n const style = localDb.elements.getElement<DisplayStyle3d>(id);\r\n const sky2 = style.jsonProperties.styles.environment.sky!;\r\n expect(sky2).not.to.be.undefined;\r\n for (const key of Object.keys(sky)) {\r\n const propName = key as keyof SkyBoxProps;\r\n expect(sky2[propName]).to.deep.equal(sky[propName]);\r\n }\r\n }\r\n\r\n roundTrip({ display: true });\r\n roundTrip({ display: false });\r\n\r\n roundTrip({ twoColor: true });\r\n roundTrip({ twoColor: false });\r\n\r\n roundTrip({ skyColor: 0x123456 });\r\n roundTrip({ groundColor: 42 });\r\n roundTrip({ zenithColor: 0x43 });\r\n roundTrip({ nadirColor: 0 });\r\n\r\n roundTrip({ skyExponent: 0.2 });\r\n roundTrip({ groundExponent: -2.2 });\r\n\r\n roundTrip({ image: { type: SkyBoxImageType.None } });\r\n\r\n roundTrip({ image: { type: SkyBoxImageType.Spherical, texture: \"0x123\" } });\r\n roundTrip({ image: { type: SkyBoxImageType.Spherical, texture: \"images/sky.jpg\" } });\r\n\r\n roundTrip({ image: { type: SkyBoxImageType.Cube, textures: { front: \"0x1\", back: \"0x2\", left: \"0x3\", right: \"0x4\", top: \"0x5\", bottom: \"0x6\" } } });\r\n roundTrip({ image: { type: SkyBoxImageType.Cube, textures: { front: \"front.jpg\", back: \"back.png\", left: \"left.jpeg\", right: \"right.jpg\", top: \"top.png\", bottom: \"bottom.png\" } } });\r\n txn.abandonChanges();\r\n });\r\n\r\n localDb.close();\r\n });\r\n\r\n describe(\"onClone\", () => {\r\n let db: StandaloneDb;\r\n let db2: StandaloneDb;\r\n\r\n before(() => {\r\n db = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DisplayStyle\", \"DisplayStyle.bim\"), {\r\n rootSubject: { name: \"DisplayStyle tests\", description: \"DisplayStyle tests\" },\r\n client: \"DisplayStyle\",\r\n globalOrigin: { x: 0, y: 0 },\r\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\r\n guid: Guid.createValue(),\r\n });\r\n\r\n db2 = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DisplayStyle2\", \"DisplayStyle2.bim\"), {\r\n rootSubject: { name: \"DisplayStyle tests\", description: \"DisplayStyle tests\" },\r\n client: \"DisplayStyle\",\r\n globalOrigin: { x: 0, y: 0 },\r\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\r\n guid: Guid.createValue(),\r\n });\r\n });\r\n\r\n afterEach(() => {\r\n });\r\n\r\n after(() => {\r\n db.close();\r\n db2.close();\r\n });\r\n\r\n it(\"remaps contour display subCategories when cloning\", async () => {\r\n const cloneContext = new IModelElementCloneContext(db, db2);\r\n const displayStyleJsonProps: DisplayStyle3dSettingsProps = {\r\n contours: {\r\n groups: [\r\n {\r\n subCategories: CompressedId64Set.sortAndCompress([\"0x1\", \"0x2\", \"0x3\", \"0x4\"]),\r\n },\r\n ],\r\n },\r\n };\r\n const displayStyleId = withEditTxn(db, (txn) => DisplayStyle3d.insert(txn, IModel.dictionaryId, Guid.createValue(), displayStyleJsonProps));\r\n\r\n cloneContext.remapElement(\"0x1\", \"0xa\");\r\n cloneContext.remapElement(\"0x3\", \"0xc\");\r\n const displayStyle = db.elements.getElement<DisplayStyle3d>(displayStyleId);\r\n const displayStyleClone = await cloneContext.cloneElement(displayStyle);\r\n\r\n const contourSubCatsClone = CompressedId64Set.decompressArray(displayStyleClone.jsonProperties.styles.contours.groups[0].subCategories);\r\n expect(contourSubCatsClone.length).to.equal(2);\r\n expect(contourSubCatsClone).to.contain.members([\"0xa\", \"0xc\"]);\r\n });\r\n\r\n it(\"remaps excludedElements when cloning\", async () => {\r\n const cloneContext = new IModelElementCloneContext(db, db2);\r\n const displayStyleJsonProps: DisplayStyleSettingsProps = { excludedElements: [\"0x1\", \"0x2\", \"0x3\", \"0x4\"] };\r\n const displayStyleId = withEditTxn(db, (txn) => DisplayStyle3d.insert(txn, IModel.dictionaryId, Guid.createValue(), displayStyleJsonProps));\r\n\r\n cloneContext.remapElement(\"0x1\", \"0xa\");\r\n cloneContext.remapElement(\"0x3\", \"0xc\");\r\n const displayStyle = db.elements.getElement<DisplayStyle3d>(displayStyleId);\r\n const displayStyleClone = await cloneContext.cloneElement(displayStyle);\r\n\r\n const excludedElementsClone = CompressedId64Set.decompressArray(displayStyleClone.jsonProperties.styles.excludedElements);\r\n expect(excludedElementsClone.length).to.equal(2);\r\n expect(excludedElementsClone).to.contain.members([\"0xa\", \"0xc\"]);\r\n });\r\n\r\n it(\"remaps subCategory overrides when cloning\", async () => {\r\n const cloneContext = new IModelElementCloneContext(db, db2);\r\n const categoryId = withEditTxn(db, (txn) => SpatialCategory.insert(txn, IModel.dictionaryId, \"testCat\", {}));\r\n const subCategoryId1 = withEditTxn(db, (txn) => SubCategory.insert(txn, categoryId, \"subC1\", {}));\r\n const subCategoryId2 = withEditTxn(db, (txn) => SubCategory.insert(txn, categoryId, \"subC2\", {}));\r\n const subCategoryId3 = withEditTxn(db, (txn) => SubCategory.insert(txn, categoryId, \"subC3\", {}));\r\n const subCategoryId4 = withEditTxn(db, (txn) => SubCategory.insert(txn, categoryId, \"subC4\", {}));\r\n const displayStyleJsonProps: DisplayStyleSettingsProps = {\r\n subCategoryOvr: [\r\n { subCategory: subCategoryId1, weight: 5 },\r\n { subCategory: subCategoryId2, weight: 3 },\r\n { subCategory: subCategoryId3, invisible: false },\r\n { subCategory: subCategoryId4, invisible: true },\r\n ]\r\n };\r\n const displayStyleId = withEditTxn(db, (txn) => DisplayStyle3d.insert(txn, IModel.dictionaryId, Guid.createValue(), displayStyleJsonProps));\r\n\r\n cloneContext.remapElement(subCategoryId1, \"0xa\");\r\n cloneContext.remapElement(subCategoryId4, \"0xd\");\r\n const displayStyle = db.elements.getElement<DisplayStyle3d>(displayStyleId);\r\n const displayStyleClone = await cloneContext.cloneElement(displayStyle);\r\n\r\n const subCategoryOvrClone = displayStyleClone.jsonProperties.styles.subCategoryOvr;\r\n expect(subCategoryOvrClone.length).to.equal(2);\r\n expect(subCategoryOvrClone).to.deep.contain.members([\r\n { subCategory: \"0xa\", weight: 5 },\r\n { subCategory: \"0xd\", invisible: true },\r\n ]);\r\n });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"DisplayStyle.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/DisplayStyle.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAA0D,MAAM,EAAE,eAAe,EAAe,MAAM,oBAAoB,CAAC;AAClI,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvI,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,iBAAiB,CAAC,cAAc,EAAE,wBAAwB,CAAC,EAAE;YAClH,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,EAAE;YAC9E,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YAC5B,cAAc,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;YACtF,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACzB,CAAC,CAAC;QAEH,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,SAAS,SAAS,CAAC,GAAgB;gBACjC,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAChC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAE7B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB,EAAE,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,GAAI,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,QAAQ,GAAG,GAAwB,CAAC;oBAC1C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7B,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAE9B,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9B,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAE/B,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClC,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACjC,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;YAE7B,SAAS,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;YAChC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YAEpC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAErD,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YAC5E,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;YAErF,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACpJ,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;YACtL,GAAG,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,IAAI,EAAgB,CAAC;QACrB,IAAI,GAAiB,CAAC;QAEtB,MAAM,CAAC,GAAG,EAAE;YACV,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,CAAC,EAAE;gBACnG,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,EAAE;gBAC9E,MAAM,EAAE,cAAc;gBACtB,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBAC5B,cAAc,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;gBACtF,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;aACzB,CAAC,CAAC;YAEH,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,iBAAiB,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE;gBACtG,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,EAAE;gBAC9E,MAAM,EAAE,cAAc;gBACtB,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBAC5B,cAAc,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;gBACtF,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;aACzB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;QACf,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,GAAG,EAAE;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,qBAAqB,GAAgC;gBACzD,QAAQ,EAAE;oBACR,MAAM,EAAE;wBACN;4BACE,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;yBAC/E;qBACF;iBACF;aACF,CAAC;YACF,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;YAE5I,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxC,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAiB,cAAc,CAAC,CAAC;YAC5E,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAExE,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,eAAe,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YACxI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,qBAAqB,GAA8B,EAAE,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5G,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;YAE5I,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxC,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAiB,cAAc,CAAC,CAAC;YAC5E,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAExE,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,eAAe,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC1H,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7G,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAClG,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAClG,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAClG,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAClG,MAAM,qBAAqB,GAA8B;gBACvD,cAAc,EAAE;oBACd,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE;oBAC1C,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE;oBAC1C,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE;oBACjD,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE;iBACjD;aACF,CAAC;YACF,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;YAE5I,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACjD,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAiB,cAAc,CAAC,CAAC;YAC5E,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAExE,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC;YACnF,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBAClD,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE;gBACjC,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;aACxC,CAAC,CAAC;QACL,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 { CompressedId64Set, Guid } from \"@itwin/core-bentley\";\nimport { DisplayStyle3dSettingsProps, DisplayStyleSettingsProps, IModel, SkyBoxImageType, SkyBoxProps } from \"@itwin/core-common\";\nimport { DisplayStyle3d, IModelElementCloneContext, SnapshotDb, SpatialCategory, StandaloneDb, SubCategory } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"DisplayStyle\", () => {\n it(\"preserves skybox\", () => {\n const localDb = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DisplayStyle\", \"DisplayStyleSkybox.bim\"), {\n rootSubject: { name: \"DisplayStyle tests\", description: \"DisplayStyle tests\" },\n client: \"DisplayStyle\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n\n withEditTxn(localDb, (txn) => {\n function roundTrip(sky: SkyBoxProps): void {\n const props = { environment: { sky } };\n const name = Guid.createValue();\n const id = DisplayStyle3d.insert(txn, IModel.dictionaryId, name, props);\n expect(id).not.to.equal(\"0\");\n\n const style = localDb.elements.getElement<DisplayStyle3d>(id);\n const sky2 = style.jsonProperties.styles.environment.sky!;\n expect(sky2).not.to.be.undefined;\n for (const key of Object.keys(sky)) {\n const propName = key as keyof SkyBoxProps;\n expect(sky2[propName]).to.deep.equal(sky[propName]);\n }\n }\n\n roundTrip({ display: true });\n roundTrip({ display: false });\n\n roundTrip({ twoColor: true });\n roundTrip({ twoColor: false });\n\n roundTrip({ skyColor: 0x123456 });\n roundTrip({ groundColor: 42 });\n roundTrip({ zenithColor: 0x43 });\n roundTrip({ nadirColor: 0 });\n\n roundTrip({ skyExponent: 0.2 });\n roundTrip({ groundExponent: -2.2 });\n\n roundTrip({ image: { type: SkyBoxImageType.None } });\n\n roundTrip({ image: { type: SkyBoxImageType.Spherical, texture: \"0x123\" } });\n roundTrip({ image: { type: SkyBoxImageType.Spherical, texture: \"images/sky.jpg\" } });\n\n roundTrip({ image: { type: SkyBoxImageType.Cube, textures: { front: \"0x1\", back: \"0x2\", left: \"0x3\", right: \"0x4\", top: \"0x5\", bottom: \"0x6\" } } });\n roundTrip({ image: { type: SkyBoxImageType.Cube, textures: { front: \"front.jpg\", back: \"back.png\", left: \"left.jpeg\", right: \"right.jpg\", top: \"top.png\", bottom: \"bottom.png\" } } });\n txn.abandonChanges();\n });\n\n localDb.close();\n });\n\n describe(\"onClone\", () => {\n let db: StandaloneDb;\n let db2: StandaloneDb;\n\n before(() => {\n db = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DisplayStyle\", \"DisplayStyle.bim\"), {\n rootSubject: { name: \"DisplayStyle tests\", description: \"DisplayStyle tests\" },\n client: \"DisplayStyle\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n\n db2 = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DisplayStyle2\", \"DisplayStyle2.bim\"), {\n rootSubject: { name: \"DisplayStyle tests\", description: \"DisplayStyle tests\" },\n client: \"DisplayStyle\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n });\n\n afterEach(() => {\n });\n\n after(() => {\n db.close();\n db2.close();\n });\n\n it(\"remaps contour display subCategories when cloning\", async () => {\n const cloneContext = new IModelElementCloneContext(db, db2);\n const displayStyleJsonProps: DisplayStyle3dSettingsProps = {\n contours: {\n groups: [\n {\n subCategories: CompressedId64Set.sortAndCompress([\"0x1\", \"0x2\", \"0x3\", \"0x4\"]),\n },\n ],\n },\n };\n const displayStyleId = withEditTxn(db, (txn) => DisplayStyle3d.insert(txn, IModel.dictionaryId, Guid.createValue(), displayStyleJsonProps));\n\n cloneContext.remapElement(\"0x1\", \"0xa\");\n cloneContext.remapElement(\"0x3\", \"0xc\");\n const displayStyle = db.elements.getElement<DisplayStyle3d>(displayStyleId);\n const displayStyleClone = await cloneContext.cloneElement(displayStyle);\n\n const contourSubCatsClone = CompressedId64Set.decompressArray(displayStyleClone.jsonProperties.styles.contours.groups[0].subCategories);\n expect(contourSubCatsClone.length).to.equal(2);\n expect(contourSubCatsClone).to.contain.members([\"0xa\", \"0xc\"]);\n });\n\n it(\"remaps excludedElements when cloning\", async () => {\n const cloneContext = new IModelElementCloneContext(db, db2);\n const displayStyleJsonProps: DisplayStyleSettingsProps = { excludedElements: [\"0x1\", \"0x2\", \"0x3\", \"0x4\"] };\n const displayStyleId = withEditTxn(db, (txn) => DisplayStyle3d.insert(txn, IModel.dictionaryId, Guid.createValue(), displayStyleJsonProps));\n\n cloneContext.remapElement(\"0x1\", \"0xa\");\n cloneContext.remapElement(\"0x3\", \"0xc\");\n const displayStyle = db.elements.getElement<DisplayStyle3d>(displayStyleId);\n const displayStyleClone = await cloneContext.cloneElement(displayStyle);\n\n const excludedElementsClone = CompressedId64Set.decompressArray(displayStyleClone.jsonProperties.styles.excludedElements);\n expect(excludedElementsClone.length).to.equal(2);\n expect(excludedElementsClone).to.contain.members([\"0xa\", \"0xc\"]);\n });\n\n it(\"remaps subCategory overrides when cloning\", async () => {\n const cloneContext = new IModelElementCloneContext(db, db2);\n const categoryId = withEditTxn(db, (txn) => SpatialCategory.insert(txn, IModel.dictionaryId, \"testCat\", {}));\n const subCategoryId1 = withEditTxn(db, (txn) => SubCategory.insert(txn, categoryId, \"subC1\", {}));\n const subCategoryId2 = withEditTxn(db, (txn) => SubCategory.insert(txn, categoryId, \"subC2\", {}));\n const subCategoryId3 = withEditTxn(db, (txn) => SubCategory.insert(txn, categoryId, \"subC3\", {}));\n const subCategoryId4 = withEditTxn(db, (txn) => SubCategory.insert(txn, categoryId, \"subC4\", {}));\n const displayStyleJsonProps: DisplayStyleSettingsProps = {\n subCategoryOvr: [\n { subCategory: subCategoryId1, weight: 5 },\n { subCategory: subCategoryId2, weight: 3 },\n { subCategory: subCategoryId3, invisible: false },\n { subCategory: subCategoryId4, invisible: true },\n ]\n };\n const displayStyleId = withEditTxn(db, (txn) => DisplayStyle3d.insert(txn, IModel.dictionaryId, Guid.createValue(), displayStyleJsonProps));\n\n cloneContext.remapElement(subCategoryId1, \"0xa\");\n cloneContext.remapElement(subCategoryId4, \"0xd\");\n const displayStyle = db.elements.getElement<DisplayStyle3d>(displayStyleId);\n const displayStyleClone = await cloneContext.cloneElement(displayStyle);\n\n const subCategoryOvrClone = displayStyleClone.jsonProperties.styles.subCategoryOvr;\n expect(subCategoryOvrClone.length).to.equal(2);\n expect(subCategoryOvrClone).to.deep.contain.members([\n { subCategory: \"0xa\", weight: 5 },\n { subCategory: \"0xd\", invisible: true },\n ]);\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Drawing.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/Drawing.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 { expect } from \"chai\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { DrawingProps } from \"@itwin/core-common\";\r\nimport { Drawing } from \"../../Element\";\r\nimport { DocumentListModel } from \"../../Model\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"Drawing\", () => {\r\n let imodel: SnapshotDb;\r\n let documentListModelId: string;\r\n\r\n before(() => {\r\n const iModelPath = IModelTestUtils.prepareOutputFile(\"Drawing\", \"Drawing.bim\");\r\n imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"DrawingTest\" } });\r\n documentListModelId = withEditTxn(imodel, (txn) => DocumentListModel.insert(txn, SnapshotDb.rootSubjectId, \"DocumentList\"));\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n class TestDrawing extends Drawing {\r\n public constructor(props: DrawingProps) {\r\n super(props, imodel);\r\n }\r\n }\r\n\r\n describe(\"scaleFactor\", () => {\r\n function makeDrawingProps(scaleFactor: any): DrawingProps {\r\n const props: DrawingProps = {\r\n classFullName: Drawing.classFullName,\r\n model: documentListModelId,\r\n code: Drawing.createCode(imodel, documentListModelId, Guid.createValue()),\r\n };\r\n\r\n if (undefined !== scaleFactor) {\r\n props.scaleFactor = scaleFactor;\r\n }\r\n\r\n return props;\r\n }\r\n\r\n function makeDrawing(scaleFactor: any): Drawing {\r\n return new TestDrawing(makeDrawingProps(scaleFactor));\r\n }\r\n\r\n function expectScaleFactor(scaleFactor: any, expected: number): void {\r\n const drawing = makeDrawing(scaleFactor);\r\n expect(drawing.scaleFactor).to.equal(expected);\r\n }\r\n\r\n it(\"defaults to 1\", () => {\r\n expectScaleFactor(undefined, 1);\r\n expectScaleFactor(null, 1);\r\n expectScaleFactor(0, 1);\r\n expectScaleFactor(-123, 1);\r\n expectScaleFactor(false, 1);\r\n expectScaleFactor(true, 1);\r\n expectScaleFactor(\"\", 1);\r\n expectScaleFactor(\"abcdef\", 1);\r\n });\r\n\r\n it(\"throws when attempting to set to zero or negative value\", () => {\r\n const drawing = makeDrawing(undefined);\r\n expect(drawing.scaleFactor).to.equal(1);\r\n expect(() => drawing.scaleFactor = 0).to.throw(\"Drawing.scaleFactor must be greater than zero\");\r\n expect(drawing.scaleFactor).to.equal(1);\r\n expect(() => drawing.scaleFactor = -123).to.throw(\"Drawing.scaleFactor must be greater than zero\");\r\n expect(drawing.scaleFactor).to.equal(1);\r\n });\r\n\r\n it(\"is included in JSON IFF not equal to 1\", () => {\r\n function expectFactor(scaleFactor: any, expected: number | undefined): void {\r\n const drawing = makeDrawing(scaleFactor);\r\n expect(drawing.scaleFactor === 1).to.equal(expected === undefined);\r\n const props = drawing.toJSON();\r\n expect(props.scaleFactor).to.equal(expected);\r\n }\r\n\r\n expectFactor(undefined, undefined);\r\n expectFactor(null, undefined);\r\n expectFactor(0, undefined);\r\n expectFactor(1, undefined);\r\n expectFactor(-123, undefined);\r\n expectFactor(false, undefined);\r\n expectFactor(true, undefined);\r\n expectFactor(\"\", undefined);\r\n expectFactor(\"abcdef\", undefined);\r\n\r\n expectFactor(2, 2);\r\n expectFactor(123, 123);\r\n expectFactor(0.05, 0.05);\r\n });\r\n\r\n it(\"is preserved when round-tripped through persistence layer\", () => {\r\n function test(scaleFactor: number | undefined): void {\r\n const insertProps = makeDrawingProps(scaleFactor);\r\n expect(insertProps.scaleFactor).to.equal(scaleFactor);\r\n const elemId = withEditTxn(imodel, (txn) => txn.insertElement(insertProps));\r\n const readProps = imodel.elements.getElementProps<DrawingProps>(elemId);\r\n expect(readProps.scaleFactor).to.equal(scaleFactor);\r\n }\r\n\r\n test(undefined);\r\n test(1);\r\n test(2);\r\n test(123);\r\n test(0.05);\r\n test(0);\r\n test(-123);\r\n });\r\n });\r\n\r\n describe(\"insert\", () => {\r\n function insertDrawing(scaleFactor: number | undefined): Drawing {\r\n const drawingId = withEditTxn(imodel, (txn) => Drawing.insert(txn, documentListModelId, Guid.createValue(), scaleFactor));\r\n return imodel.elements.getElement<Drawing>(drawingId);\r\n }\r\n\r\n it(\"throws if scaleFactor is not positive\", () => {\r\n expect(() => insertDrawing(0)).to.throw(\"Drawing.scaleFactor must be greater than zero\");\r\n expect(() => insertDrawing(-123)).to.throw(\"Drawing.scaleFactor must be greater than zero\");\r\n });\r\n\r\n it(\"defaults scaleFactor to 1\", () => {\r\n expect(insertDrawing(undefined).scaleFactor).to.equal(1);\r\n });\r\n\r\n it(\"preserves scaleFactor\", () => {\r\n expect(insertDrawing(2).scaleFactor).to.equal(2);\r\n expect(insertDrawing(123).scaleFactor).to.equal(123);\r\n expect(insertDrawing(0.05).scaleFactor).to.equal(0.05);\r\n });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"Drawing.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/Drawing.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 { expect } from \"chai\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { DrawingProps } from \"@itwin/core-common\";\nimport { Drawing } from \"../../Element\";\nimport { DocumentListModel } from \"../../Model\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"Drawing\", () => {\n let imodel: SnapshotDb;\n let documentListModelId: string;\n\n before(() => {\n const iModelPath = IModelTestUtils.prepareOutputFile(\"Drawing\", \"Drawing.bim\");\n imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"DrawingTest\" } });\n documentListModelId = withEditTxn(imodel, (txn) => DocumentListModel.insert(txn, SnapshotDb.rootSubjectId, \"DocumentList\"));\n });\n\n after(() => {\n imodel.close();\n });\n\n class TestDrawing extends Drawing {\n public constructor(props: DrawingProps) {\n super(props, imodel);\n }\n }\n\n describe(\"scaleFactor\", () => {\n function makeDrawingProps(scaleFactor: any): DrawingProps {\n const props: DrawingProps = {\n classFullName: Drawing.classFullName,\n model: documentListModelId,\n code: Drawing.createCode(imodel, documentListModelId, Guid.createValue()),\n };\n\n if (undefined !== scaleFactor) {\n props.scaleFactor = scaleFactor;\n }\n\n return props;\n }\n\n function makeDrawing(scaleFactor: any): Drawing {\n return new TestDrawing(makeDrawingProps(scaleFactor));\n }\n\n function expectScaleFactor(scaleFactor: any, expected: number): void {\n const drawing = makeDrawing(scaleFactor);\n expect(drawing.scaleFactor).to.equal(expected);\n }\n\n it(\"defaults to 1\", () => {\n expectScaleFactor(undefined, 1);\n expectScaleFactor(null, 1);\n expectScaleFactor(0, 1);\n expectScaleFactor(-123, 1);\n expectScaleFactor(false, 1);\n expectScaleFactor(true, 1);\n expectScaleFactor(\"\", 1);\n expectScaleFactor(\"abcdef\", 1);\n });\n\n it(\"throws when attempting to set to zero or negative value\", () => {\n const drawing = makeDrawing(undefined);\n expect(drawing.scaleFactor).to.equal(1);\n expect(() => drawing.scaleFactor = 0).to.throw(\"Drawing.scaleFactor must be greater than zero\");\n expect(drawing.scaleFactor).to.equal(1);\n expect(() => drawing.scaleFactor = -123).to.throw(\"Drawing.scaleFactor must be greater than zero\");\n expect(drawing.scaleFactor).to.equal(1);\n });\n\n it(\"is included in JSON IFF not equal to 1\", () => {\n function expectFactor(scaleFactor: any, expected: number | undefined): void {\n const drawing = makeDrawing(scaleFactor);\n expect(drawing.scaleFactor === 1).to.equal(expected === undefined);\n const props = drawing.toJSON();\n expect(props.scaleFactor).to.equal(expected);\n }\n\n expectFactor(undefined, undefined);\n expectFactor(null, undefined);\n expectFactor(0, undefined);\n expectFactor(1, undefined);\n expectFactor(-123, undefined);\n expectFactor(false, undefined);\n expectFactor(true, undefined);\n expectFactor(\"\", undefined);\n expectFactor(\"abcdef\", undefined);\n\n expectFactor(2, 2);\n expectFactor(123, 123);\n expectFactor(0.05, 0.05);\n });\n\n it(\"is preserved when round-tripped through persistence layer\", () => {\n function test(scaleFactor: number | undefined): void {\n const insertProps = makeDrawingProps(scaleFactor);\n expect(insertProps.scaleFactor).to.equal(scaleFactor);\n const elemId = withEditTxn(imodel, (txn) => txn.insertElement(insertProps));\n const readProps = imodel.elements.getElementProps<DrawingProps>(elemId);\n expect(readProps.scaleFactor).to.equal(scaleFactor);\n }\n\n test(undefined);\n test(1);\n test(2);\n test(123);\n test(0.05);\n test(0);\n test(-123);\n });\n });\n\n describe(\"insert\", () => {\n function insertDrawing(scaleFactor: number | undefined): Drawing {\n const drawingId = withEditTxn(imodel, (txn) => Drawing.insert(txn, documentListModelId, Guid.createValue(), scaleFactor));\n return imodel.elements.getElement<Drawing>(drawingId);\n }\n\n it(\"throws if scaleFactor is not positive\", () => {\n expect(() => insertDrawing(0)).to.throw(\"Drawing.scaleFactor must be greater than zero\");\n expect(() => insertDrawing(-123)).to.throw(\"Drawing.scaleFactor must be greater than zero\");\n });\n\n it(\"defaults scaleFactor to 1\", () => {\n expect(insertDrawing(undefined).scaleFactor).to.equal(1);\n });\n\n it(\"preserves scaleFactor\", () => {\n expect(insertDrawing(2).scaleFactor).to.equal(2);\n expect(insertDrawing(123).scaleFactor).to.equal(123);\n expect(insertDrawing(0.05).scaleFactor).to.equal(0.05);\n });\n });\n});\n"]}