@itwin/core-backend 5.13.0-dev.7 → 5.13.0-dev.9

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 (451) 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 +3 -3
  14. package/lib/cjs/ChangesetReader.js.map +1 -1
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  16. package/lib/cjs/ChannelControl.js.map +1 -1
  17. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  18. package/lib/cjs/CheckpointManager.js +5 -1
  19. package/lib/cjs/CheckpointManager.js.map +1 -1
  20. package/lib/cjs/ClassRegistry.js +5 -5
  21. package/lib/cjs/ClassRegistry.js.map +1 -1
  22. package/lib/cjs/CloudSqlite.js.map +1 -1
  23. package/lib/cjs/CodeService.js.map +1 -1
  24. package/lib/cjs/CodeSpecs.js.map +1 -1
  25. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  26. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  27. package/lib/cjs/DevTools.js.map +1 -1
  28. package/lib/cjs/DisplayStyle.js.map +1 -1
  29. package/lib/cjs/ECDb.js.map +1 -1
  30. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  31. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  32. package/lib/cjs/ECSqlStatement.js.map +1 -1
  33. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  34. package/lib/cjs/EditTxn.js.map +1 -1
  35. package/lib/cjs/Element.js.map +1 -1
  36. package/lib/cjs/ElementAspect.js.map +1 -1
  37. package/lib/cjs/ElementGraphics.js.map +1 -1
  38. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  39. package/lib/cjs/Entity.js.map +1 -1
  40. package/lib/cjs/EntityReferences.js.map +1 -1
  41. package/lib/cjs/ExportGraphics.js.map +1 -1
  42. package/lib/cjs/ExternalSource.js.map +1 -1
  43. package/lib/cjs/FontFile.js.map +1 -1
  44. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  45. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  46. package/lib/cjs/GeometrySummary.js +47 -47
  47. package/lib/cjs/GeometrySummary.js.map +1 -1
  48. package/lib/cjs/IModelDb.js +25 -25
  49. package/lib/cjs/IModelDb.js.map +1 -1
  50. package/lib/cjs/IModelDbFonts.js.map +1 -1
  51. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  52. package/lib/cjs/IModelHost.js.map +1 -1
  53. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  54. package/lib/cjs/IModelJsFs.js.map +1 -1
  55. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  56. package/lib/cjs/IpcHost.js.map +1 -1
  57. package/lib/cjs/LineStyle.js.map +1 -1
  58. package/lib/cjs/LocalHub.js +1 -1
  59. package/lib/cjs/LocalHub.js.map +1 -1
  60. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  61. package/lib/cjs/LockControl.js.map +1 -1
  62. package/lib/cjs/Material.js.map +1 -1
  63. package/lib/cjs/Model.js.map +1 -1
  64. package/lib/cjs/NativeAppStorage.js.map +1 -1
  65. package/lib/cjs/NativeHost.js.map +1 -1
  66. package/lib/cjs/NavigationRelationship.js.map +1 -1
  67. package/lib/cjs/PartialChangeUnifier.js +7 -7
  68. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  69. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  70. package/lib/cjs/PropertyStore.js.map +1 -1
  71. package/lib/cjs/Relationship.js.map +1 -1
  72. package/lib/cjs/RpcBackend.js.map +1 -1
  73. package/lib/cjs/SQLiteDb.js.map +1 -1
  74. package/lib/cjs/Schema.js.map +1 -1
  75. package/lib/cjs/SchemaSync.js.map +1 -1
  76. package/lib/cjs/SchemaUtils.js.map +1 -1
  77. package/lib/cjs/SheetIndex.js.map +1 -1
  78. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  79. package/lib/cjs/SqliteStatement.js.map +1 -1
  80. package/lib/cjs/StashManager.js.map +1 -1
  81. package/lib/cjs/Texture.js.map +1 -1
  82. package/lib/cjs/TileStorage.js.map +1 -1
  83. package/lib/cjs/TxnManager.js.map +1 -1
  84. package/lib/cjs/ViewDefinition.js.map +1 -1
  85. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  86. package/lib/cjs/ViewStore.js.map +1 -1
  87. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  88. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  89. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  91. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  92. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  93. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  94. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  95. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
  96. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
  97. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  98. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  99. package/lib/cjs/core-backend.js.map +1 -1
  100. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  101. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  102. package/lib/cjs/domains/GenericElements.js.map +1 -1
  103. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  104. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  105. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  106. package/lib/cjs/internal/ECSqlInstanceReshaper.js.map +1 -1
  107. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  108. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  109. package/lib/cjs/internal/HubMock.js.map +1 -1
  110. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  111. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  112. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  113. package/lib/cjs/internal/NoLocks.js.map +1 -1
  114. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  115. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  116. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  117. package/lib/cjs/internal/Symbols.js.map +1 -1
  118. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  119. package/lib/cjs/internal/cross-package.js.map +1 -1
  120. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  121. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  122. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  123. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  124. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  125. package/lib/cjs/rpc/multipart.js.map +1 -1
  126. package/lib/cjs/rpc/tracing.js.map +1 -1
  127. package/lib/cjs/rpc/web/logging.js.map +1 -1
  128. package/lib/cjs/rpc/web/request.js.map +1 -1
  129. package/lib/cjs/rpc/web/response.js.map +1 -1
  130. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  131. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  132. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  133. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  134. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  135. package/lib/cjs/workspace/Settings.js.map +1 -1
  136. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  137. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  138. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  139. package/lib/cjs/workspace/Workspace.js.map +1 -1
  140. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  141. package/lib/esm/BackendHubAccess.js.map +1 -1
  142. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  143. package/lib/esm/BisCoreSchema.js.map +1 -1
  144. package/lib/esm/BlobContainerService.js.map +1 -1
  145. package/lib/esm/BriefcaseManager.js.map +1 -1
  146. package/lib/esm/CatalogDb.js.map +1 -1
  147. package/lib/esm/Category.js.map +1 -1
  148. package/lib/esm/ChangeSummaryManager.js +2 -2
  149. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  150. package/lib/esm/ChangedElementsDb.js.map +1 -1
  151. package/lib/esm/ChangesetECAdaptor.js +248 -248
  152. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  153. package/lib/esm/ChangesetReader.js +3 -3
  154. package/lib/esm/ChangesetReader.js.map +1 -1
  155. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  156. package/lib/esm/ChannelControl.js.map +1 -1
  157. package/lib/esm/CheckpointManager.d.ts.map +1 -1
  158. package/lib/esm/CheckpointManager.js +5 -1
  159. package/lib/esm/CheckpointManager.js.map +1 -1
  160. package/lib/esm/ClassRegistry.js +5 -5
  161. package/lib/esm/ClassRegistry.js.map +1 -1
  162. package/lib/esm/CloudSqlite.js.map +1 -1
  163. package/lib/esm/CodeService.js.map +1 -1
  164. package/lib/esm/CodeSpecs.js.map +1 -1
  165. package/lib/esm/ConcurrentQuery.js.map +1 -1
  166. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  167. package/lib/esm/DevTools.js.map +1 -1
  168. package/lib/esm/DisplayStyle.js.map +1 -1
  169. package/lib/esm/ECDb.js.map +1 -1
  170. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  171. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  172. package/lib/esm/ECSqlStatement.js.map +1 -1
  173. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  174. package/lib/esm/EditTxn.js.map +1 -1
  175. package/lib/esm/Element.js.map +1 -1
  176. package/lib/esm/ElementAspect.js.map +1 -1
  177. package/lib/esm/ElementGraphics.js.map +1 -1
  178. package/lib/esm/ElementTreeWalker.js.map +1 -1
  179. package/lib/esm/Entity.js.map +1 -1
  180. package/lib/esm/EntityReferences.js.map +1 -1
  181. package/lib/esm/ExportGraphics.js.map +1 -1
  182. package/lib/esm/ExternalSource.js.map +1 -1
  183. package/lib/esm/FontFile.js.map +1 -1
  184. package/lib/esm/GeoCoordConfig.js.map +1 -1
  185. package/lib/esm/GeographicCRSServices.js.map +1 -1
  186. package/lib/esm/GeometrySummary.js +47 -47
  187. package/lib/esm/GeometrySummary.js.map +1 -1
  188. package/lib/esm/IModelDb.js +25 -25
  189. package/lib/esm/IModelDb.js.map +1 -1
  190. package/lib/esm/IModelDbFonts.js.map +1 -1
  191. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  192. package/lib/esm/IModelHost.js.map +1 -1
  193. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  194. package/lib/esm/IModelJsFs.js.map +1 -1
  195. package/lib/esm/ImageSourceConversion.js.map +1 -1
  196. package/lib/esm/IpcHost.js.map +1 -1
  197. package/lib/esm/LineStyle.js.map +1 -1
  198. package/lib/esm/LocalHub.js +1 -1
  199. package/lib/esm/LocalHub.js.map +1 -1
  200. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  201. package/lib/esm/LockControl.js.map +1 -1
  202. package/lib/esm/Material.js.map +1 -1
  203. package/lib/esm/Model.js.map +1 -1
  204. package/lib/esm/NativeAppStorage.js.map +1 -1
  205. package/lib/esm/NativeHost.js.map +1 -1
  206. package/lib/esm/NavigationRelationship.js.map +1 -1
  207. package/lib/esm/PartialChangeUnifier.js +7 -7
  208. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  209. package/lib/esm/PromiseMemoizer.js.map +1 -1
  210. package/lib/esm/PropertyStore.js.map +1 -1
  211. package/lib/esm/Relationship.js.map +1 -1
  212. package/lib/esm/RpcBackend.js.map +1 -1
  213. package/lib/esm/SQLiteDb.js.map +1 -1
  214. package/lib/esm/Schema.js.map +1 -1
  215. package/lib/esm/SchemaSync.js.map +1 -1
  216. package/lib/esm/SchemaUtils.js.map +1 -1
  217. package/lib/esm/SheetIndex.js.map +1 -1
  218. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  219. package/lib/esm/SqliteStatement.js.map +1 -1
  220. package/lib/esm/StashManager.js.map +1 -1
  221. package/lib/esm/Texture.js.map +1 -1
  222. package/lib/esm/TileStorage.js.map +1 -1
  223. package/lib/esm/TxnManager.js.map +1 -1
  224. package/lib/esm/ViewDefinition.js.map +1 -1
  225. package/lib/esm/ViewStateHydrator.js.map +1 -1
  226. package/lib/esm/ViewStore.js.map +1 -1
  227. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  228. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  229. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  230. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  231. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  232. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  233. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  234. package/lib/esm/core-backend.js.map +1 -1
  235. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  236. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  237. package/lib/esm/domains/GenericElements.js.map +1 -1
  238. package/lib/esm/domains/GenericSchema.js.map +1 -1
  239. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  240. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  241. package/lib/esm/internal/ECSqlInstanceReshaper.js.map +1 -1
  242. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  243. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  244. package/lib/esm/internal/HubMock.js.map +1 -1
  245. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  246. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  247. package/lib/esm/internal/NativePlatform.js.map +1 -1
  248. package/lib/esm/internal/NoLocks.js.map +1 -1
  249. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  250. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  251. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  252. package/lib/esm/internal/Symbols.js.map +1 -1
  253. package/lib/esm/internal/annotations/fields.js.map +1 -1
  254. package/lib/esm/internal/cross-package.js.map +1 -1
  255. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  256. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  257. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  258. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  259. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  260. package/lib/esm/rpc/multipart.js.map +1 -1
  261. package/lib/esm/rpc/tracing.js.map +1 -1
  262. package/lib/esm/rpc/web/logging.js.map +1 -1
  263. package/lib/esm/rpc/web/request.js.map +1 -1
  264. package/lib/esm/rpc/web/response.js.map +1 -1
  265. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  266. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  267. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  268. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  269. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  270. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  271. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  272. package/lib/esm/test/AttachDb.test.js +11 -11
  273. package/lib/esm/test/AttachDb.test.js.map +1 -1
  274. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  275. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  276. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  277. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  278. package/lib/esm/test/IModelHost.test.js.map +1 -1
  279. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  280. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  281. package/lib/esm/test/IpcHost.test.js.map +1 -1
  282. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  283. package/lib/esm/test/PrintElementTree.js.map +1 -1
  284. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  285. package/lib/esm/test/RevisionUtility.js.map +1 -1
  286. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  287. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  288. package/lib/esm/test/SchemaUtils.test.js +25 -25
  289. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  290. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  291. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  292. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  293. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  294. package/lib/esm/test/TestEditTxn.js.map +1 -1
  295. package/lib/esm/test/TestUtils.js.map +1 -1
  296. package/lib/esm/test/annotations/Fields.test.js +53 -53
  297. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  298. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  299. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  300. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  301. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  302. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  303. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  304. package/lib/esm/test/categories/Category.test.js.map +1 -1
  305. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  306. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  307. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  308. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  309. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  310. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  311. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  312. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  313. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  314. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  315. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  316. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  317. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  318. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  319. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  320. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  321. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  322. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +4 -4
  323. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  324. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  325. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  326. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  327. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  328. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  329. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  330. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  331. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  332. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  333. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  334. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  335. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  336. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  337. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  338. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  339. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  340. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  341. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  342. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  343. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  344. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  345. package/lib/esm/test/example-code/EditTxn.test.js.map +1 -1
  346. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  347. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  348. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  349. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  350. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  351. package/lib/esm/test/hubaccess/CheckpointManager.test.js +43 -1
  352. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  353. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  354. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  355. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  356. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  357. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  358. package/lib/esm/test/imageData.js.map +1 -1
  359. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  360. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  361. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  362. package/lib/esm/test/imodel/IModel.test.js +44 -44
  363. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  364. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  365. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  366. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  367. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  368. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  369. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  370. package/lib/esm/test/index.js.map +1 -1
  371. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js +32 -32
  372. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js.map +1 -1
  373. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  374. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  375. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  376. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  377. package/lib/esm/test/rpc/response.test.js.map +1 -1
  378. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  379. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  380. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  381. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  382. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  383. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  384. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  385. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  386. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js +21 -21
  387. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js.map +1 -1
  388. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  389. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  390. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  391. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  392. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
  393. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  394. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  395. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  396. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  397. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  398. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  399. package/lib/esm/test/standalone/ChangesetReader.test.js +313 -313
  400. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  401. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  402. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  403. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  404. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  405. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  406. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  407. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  408. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  409. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  410. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  411. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  412. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  413. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  414. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  415. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  416. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  417. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  418. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  419. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  420. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  421. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  422. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  423. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  424. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  425. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  426. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  427. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  428. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  429. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  430. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  431. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  432. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  433. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  434. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  435. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  436. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  437. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  438. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  439. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  440. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  441. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  442. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  443. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  444. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  445. package/lib/esm/workspace/Settings.js.map +1 -1
  446. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  447. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  448. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  449. package/lib/esm/workspace/Workspace.js.map +1 -1
  450. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  451. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaViewHidden.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewHidden.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 { IModelHost, SnapshotDb } from \"../../core-backend\";\nimport type { SchemaView } from \"@itwin/ecschema-metadata\";\nimport { expect } from \"chai\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { TestUtils } from \"../TestUtils\";\n\n/**\n * Tests for the Hidden* custom attributes from CoreCustomAttributes, verifying that SchemaView\n * correctly exposes the tri-state `isHidden` (true/false/undefined) on classes and the boolean\n * `isHidden` on schemas and properties. Also tests `isEffectivelyHidden` which walks the base\n * class chain (not mixins) and stops at explicit `isHidden === false` overrides.\n *\n * Class `isHidden` values:\n * - `true`: hidden via `HiddenClass(Show!=true)` or schema-level `HiddenSchema(ShowClasses!=true)`\n * - `false`: explicitly shown via `HiddenClass(Show=true)` - breaks inheritance chain\n * - `undefined`: no `HiddenClass` CA, schema doesn't hide classes - neutral, defers to base class\n *\n * Binary format: classes serialize this as a single byte (0=undefined, 1=true, 2=false).\n * Schema-level class propagation from `HiddenSchema(ShowClasses!=true)` is pre-resolved\n * into each class's isHidden at serialization time.\n */\ndescribe(\"SchemaView hidden flags\", () => {\n before(async () => {\n if (!IModelHost.isValid)\n await TestUtils.startBackend();\n });\n\n // Schema with HiddenSchema(ShowClasses=false) - schema AND all classes should be hidden\n const hiddenSchemaDefault = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"HiddenSchemaDefault\" alias=\"hsd\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.00\" alias=\"CoreCA\"/>\n <ECCustomAttributes>\n <HiddenSchema xmlns=\"CoreCustomAttributes.01.00.00\">\n <ShowClasses>false</ShowClasses>\n </HiddenSchema>\n </ECCustomAttributes>\n <ECEntityClass typeName=\"InheritedHiddenElement\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"SomeProp\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n // Schema with HiddenSchema(ShowClasses=true) - schema hidden, classes are NOT\n const hiddenSchemaShowClasses = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"HiddenSchemaShowClasses\" alias=\"hssc\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.00\" alias=\"CoreCA\"/>\n <ECCustomAttributes>\n <HiddenSchema xmlns=\"CoreCustomAttributes.01.00.00\">\n <ShowClasses>true</ShowClasses>\n </HiddenSchema>\n </ECCustomAttributes>\n <ECEntityClass typeName=\"ShownElement\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"SomeProp\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n // Schema with HiddenSchema(ShowClasses=false) + class with HiddenClass(Show=true) override\n const hiddenSchemaWithClassOverride = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"HiddenSchemaClassOverride\" alias=\"hsco\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.00\" alias=\"CoreCA\"/>\n <ECCustomAttributes>\n <HiddenSchema xmlns=\"CoreCustomAttributes.01.00.00\">\n <ShowClasses>false</ShowClasses>\n </HiddenSchema>\n </ECCustomAttributes>\n <ECEntityClass typeName=\"OverriddenShownElement\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECCustomAttributes>\n <HiddenClass xmlns=\"CoreCustomAttributes.01.00.00\">\n <Show>true</Show>\n </HiddenClass>\n </ECCustomAttributes>\n <ECProperty propertyName=\"SomeProp\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"StillHiddenElement\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"SomeProp\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n // Schema with class-level and property-level hidden flags and Show overrides.\n // Also includes a non-sealed hidden base class to test derived class inheritance.\n const hiddenClassAndPropertySchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"HiddenClassPropSchema\" alias=\"hcps\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.00\" alias=\"CoreCA\"/>\n <ECEntityClass typeName=\"HiddenBase\" modifier=\"Abstract\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECCustomAttributes>\n <HiddenClass xmlns=\"CoreCustomAttributes.01.00.00\">\n <Show>false</Show>\n </HiddenClass>\n </ECCustomAttributes>\n <ECProperty propertyName=\"HiddenProp\" typeName=\"string\">\n <ECCustomAttributes>\n <HiddenProperty xmlns=\"CoreCustomAttributes.01.00.00\">\n <Show>false</Show>\n </HiddenProperty>\n </ECCustomAttributes>\n </ECProperty>\n <ECProperty propertyName=\"ShownProp\" typeName=\"string\">\n <ECCustomAttributes>\n <HiddenProperty xmlns=\"CoreCustomAttributes.01.00.00\">\n <Show>true</Show>\n </HiddenProperty>\n </ECCustomAttributes>\n </ECProperty>\n <ECProperty propertyName=\"NormalProp\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"DerivedNoCA\" modifier=\"Sealed\" description=\"Derived from hidden base, no HiddenClass CA - should inherit hidden via isEffectivelyHidden\">\n <BaseClass>HiddenBase</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"DerivedShown\" description=\"Derived from hidden base, HiddenClass(Show=true) breaks the chain\">\n <BaseClass>HiddenBase</BaseClass>\n <ECCustomAttributes>\n <HiddenClass xmlns=\"CoreCustomAttributes.01.00.00\">\n <Show>true</Show>\n </HiddenClass>\n </ECCustomAttributes>\n </ECEntityClass>\n <ECEntityClass typeName=\"DerivedFromShown\" modifier=\"Sealed\" description=\"Derived from explicitly shown class, no CA - should NOT be effectively hidden\">\n <BaseClass>DerivedShown</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"ShownClassElement\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECCustomAttributes>\n <HiddenClass xmlns=\"CoreCustomAttributes.01.00.00\">\n <Show>true</Show>\n </HiddenClass>\n </ECCustomAttributes>\n <ECProperty propertyName=\"SomeProp\" typeName=\"int\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"VisibleElement\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"SomeProp\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n // Visible schema for baseline comparison\n const visibleTestSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"VisibleTestSchema\" alias=\"vts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"NormalElement\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"NormalProp\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n let iModel: SnapshotDb;\n let view: SchemaView;\n\n before(async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaViewHidden\", \"HiddenFlags.bim\");\n iModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"HiddenFlagsTest\" } });\n await iModel.importSchemaStrings([\n hiddenSchemaDefault,\n hiddenSchemaShowClasses,\n hiddenSchemaWithClassOverride,\n hiddenClassAndPropertySchema,\n visibleTestSchema,\n ]);\n view = await iModel.getSchemaView();\n });\n\n after(() => {\n if (iModel?.isOpen)\n iModel.close();\n });\n\n describe(\"HiddenSchema\", () => {\n it(\"schema without HiddenSchema CA is not hidden\", () => {\n const schema = view.getSchema(\"VisibleTestSchema\");\n expect(schema).to.not.be.undefined;\n expect(schema!.isHidden).to.equal(false);\n\n const bisCore = view.getSchema(\"BisCore\");\n expect(bisCore).to.not.be.undefined;\n expect(bisCore!.isHidden).to.equal(false);\n });\n\n it(\"schema with HiddenSchema(ShowClasses=false) is hidden\", () => {\n const schema = view.getSchema(\"HiddenSchemaDefault\");\n expect(schema).to.not.be.undefined;\n expect(schema!.isHidden).to.equal(true);\n });\n\n it(\"schema with HiddenSchema(ShowClasses=true) is still hidden\", () => {\n const schema = view.getSchema(\"HiddenSchemaShowClasses\");\n expect(schema).to.not.be.undefined;\n expect(schema!.isHidden).to.equal(true, \"ShowClasses does not affect the schema's own isHidden\");\n });\n });\n\n describe(\"HiddenClass - tri-state isHidden\", () => {\n it(\"class in HiddenSchema(ShowClasses=false) without own CA has isHidden=true\", () => {\n const cls = view.findClass(\"HiddenSchemaDefault:InheritedHiddenElement\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(true, \"schema-level propagation bakes into true\");\n expect(cls!.isEffectivelyHidden).to.equal(true);\n });\n\n it(\"class in HiddenSchema(ShowClasses=true) without own CA has isHidden=undefined\", () => {\n const cls = view.findClass(\"HiddenSchemaShowClasses:ShownElement\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(undefined, \"ShowClasses=true means no schema propagation\");\n expect(cls!.isEffectivelyHidden).to.equal(false);\n });\n\n it(\"class with HiddenClass(Show=false) has isHidden=true\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:HiddenBase\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(true);\n expect(cls!.isEffectivelyHidden).to.equal(true);\n });\n\n it(\"class with HiddenClass(Show=true) has isHidden=false (explicitly shown)\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:ShownClassElement\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(false, \"explicit Show=true produces false\");\n expect(cls!.isEffectivelyHidden).to.equal(false);\n });\n\n it(\"class without any HiddenClass CA in visible schema has isHidden=undefined\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:VisibleElement\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(undefined);\n expect(cls!.isEffectivelyHidden).to.equal(false);\n });\n\n it(\"HiddenClass(Show=true) in HiddenSchema(ShowClasses=false) produces isHidden=false\", () => {\n const cls = view.findClass(\"HiddenSchemaClassOverride:OverriddenShownElement\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(false, \"explicit Show=true overrides schema propagation\");\n expect(cls!.isEffectivelyHidden).to.equal(false);\n });\n\n it(\"class without HiddenClass in HiddenSchema(ShowClasses=false) has isHidden=true\", () => {\n const cls = view.findClass(\"HiddenSchemaClassOverride:StillHiddenElement\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(true);\n expect(cls!.isEffectivelyHidden).to.equal(true);\n });\n });\n\n describe(\"isEffectivelyHidden - base class inheritance\", () => {\n it(\"derived class with no CA inherits effectively hidden from hidden base\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:DerivedNoCA\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(undefined, \"no own CA\");\n expect(cls!.isEffectivelyHidden).to.equal(true, \"walks up to hidden base\");\n });\n\n it(\"derived class with HiddenClass(Show=true) breaks the inheritance chain\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:DerivedShown\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(false);\n expect(cls!.isEffectivelyHidden).to.equal(false, \"Show=true breaks the chain\");\n });\n\n it(\"class derived from explicitly shown class is NOT effectively hidden\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:DerivedFromShown\");\n expect(cls).to.not.be.undefined;\n expect(cls!.isHidden).to.equal(undefined, \"no own CA\");\n expect(cls!.isEffectivelyHidden).to.equal(false, \"Show=true on ancestor breaks the chain\");\n });\n });\n\n describe(\"HiddenProperty\", () => {\n it(\"property with HiddenProperty(Show=false) is hidden\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:HiddenBase\");\n expect(cls).to.not.be.undefined;\n const prop = cls!.getProperty(\"HiddenProp\");\n expect(prop).to.not.be.undefined;\n expect(prop!.isHidden).to.equal(true);\n });\n\n it(\"property with HiddenProperty(Show=true) is NOT hidden\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:HiddenBase\");\n expect(cls).to.not.be.undefined;\n const prop = cls!.getProperty(\"ShownProp\");\n expect(prop).to.not.be.undefined;\n expect(prop!.isHidden).to.equal(false, \"HiddenProperty with Show=true should override\");\n });\n\n it(\"property without HiddenProperty CA is not hidden\", () => {\n const cls = view.findClass(\"HiddenClassPropSchema:HiddenBase\");\n expect(cls).to.not.be.undefined;\n const prop = cls!.getProperty(\"NormalProp\");\n expect(prop).to.not.be.undefined;\n expect(prop!.isHidden).to.equal(false);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"SchemaViewHidden.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewHidden.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 { IModelHost, SnapshotDb } from \"../../core-backend\";\r\nimport type { SchemaView } from \"@itwin/ecschema-metadata\";\r\nimport { expect } from \"chai\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\n\r\n/**\r\n * Tests for the Hidden* custom attributes from CoreCustomAttributes, verifying that SchemaView\r\n * correctly exposes the tri-state `isHidden` (true/false/undefined) on classes and the boolean\r\n * `isHidden` on schemas and properties. Also tests `isEffectivelyHidden` which walks the base\r\n * class chain (not mixins) and stops at explicit `isHidden === false` overrides.\r\n *\r\n * Class `isHidden` values:\r\n * - `true`: hidden via `HiddenClass(Show!=true)` or schema-level `HiddenSchema(ShowClasses!=true)`\r\n * - `false`: explicitly shown via `HiddenClass(Show=true)` - breaks inheritance chain\r\n * - `undefined`: no `HiddenClass` CA, schema doesn't hide classes - neutral, defers to base class\r\n *\r\n * Binary format: classes serialize this as a single byte (0=undefined, 1=true, 2=false).\r\n * Schema-level class propagation from `HiddenSchema(ShowClasses!=true)` is pre-resolved\r\n * into each class's isHidden at serialization time.\r\n */\r\ndescribe(\"SchemaView hidden flags\", () => {\r\n before(async () => {\r\n if (!IModelHost.isValid)\r\n await TestUtils.startBackend();\r\n });\r\n\r\n // Schema with HiddenSchema(ShowClasses=false) - schema AND all classes should be hidden\r\n const hiddenSchemaDefault = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"HiddenSchemaDefault\" alias=\"hsd\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.00\" alias=\"CoreCA\"/>\r\n <ECCustomAttributes>\r\n <HiddenSchema xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <ShowClasses>false</ShowClasses>\r\n </HiddenSchema>\r\n </ECCustomAttributes>\r\n <ECEntityClass typeName=\"InheritedHiddenElement\" modifier=\"Sealed\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"SomeProp\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n // Schema with HiddenSchema(ShowClasses=true) - schema hidden, classes are NOT\r\n const hiddenSchemaShowClasses = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"HiddenSchemaShowClasses\" alias=\"hssc\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.00\" alias=\"CoreCA\"/>\r\n <ECCustomAttributes>\r\n <HiddenSchema xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <ShowClasses>true</ShowClasses>\r\n </HiddenSchema>\r\n </ECCustomAttributes>\r\n <ECEntityClass typeName=\"ShownElement\" modifier=\"Sealed\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"SomeProp\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n // Schema with HiddenSchema(ShowClasses=false) + class with HiddenClass(Show=true) override\r\n const hiddenSchemaWithClassOverride = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"HiddenSchemaClassOverride\" alias=\"hsco\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.00\" alias=\"CoreCA\"/>\r\n <ECCustomAttributes>\r\n <HiddenSchema xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <ShowClasses>false</ShowClasses>\r\n </HiddenSchema>\r\n </ECCustomAttributes>\r\n <ECEntityClass typeName=\"OverriddenShownElement\" modifier=\"Sealed\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECCustomAttributes>\r\n <HiddenClass xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <Show>true</Show>\r\n </HiddenClass>\r\n </ECCustomAttributes>\r\n <ECProperty propertyName=\"SomeProp\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"StillHiddenElement\" modifier=\"Sealed\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"SomeProp\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n // Schema with class-level and property-level hidden flags and Show overrides.\r\n // Also includes a non-sealed hidden base class to test derived class inheritance.\r\n const hiddenClassAndPropertySchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"HiddenClassPropSchema\" alias=\"hcps\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.00\" alias=\"CoreCA\"/>\r\n <ECEntityClass typeName=\"HiddenBase\" modifier=\"Abstract\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECCustomAttributes>\r\n <HiddenClass xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <Show>false</Show>\r\n </HiddenClass>\r\n </ECCustomAttributes>\r\n <ECProperty propertyName=\"HiddenProp\" typeName=\"string\">\r\n <ECCustomAttributes>\r\n <HiddenProperty xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <Show>false</Show>\r\n </HiddenProperty>\r\n </ECCustomAttributes>\r\n </ECProperty>\r\n <ECProperty propertyName=\"ShownProp\" typeName=\"string\">\r\n <ECCustomAttributes>\r\n <HiddenProperty xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <Show>true</Show>\r\n </HiddenProperty>\r\n </ECCustomAttributes>\r\n </ECProperty>\r\n <ECProperty propertyName=\"NormalProp\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"DerivedNoCA\" modifier=\"Sealed\" description=\"Derived from hidden base, no HiddenClass CA - should inherit hidden via isEffectivelyHidden\">\r\n <BaseClass>HiddenBase</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"DerivedShown\" description=\"Derived from hidden base, HiddenClass(Show=true) breaks the chain\">\r\n <BaseClass>HiddenBase</BaseClass>\r\n <ECCustomAttributes>\r\n <HiddenClass xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <Show>true</Show>\r\n </HiddenClass>\r\n </ECCustomAttributes>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"DerivedFromShown\" modifier=\"Sealed\" description=\"Derived from explicitly shown class, no CA - should NOT be effectively hidden\">\r\n <BaseClass>DerivedShown</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"ShownClassElement\" modifier=\"Sealed\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECCustomAttributes>\r\n <HiddenClass xmlns=\"CoreCustomAttributes.01.00.00\">\r\n <Show>true</Show>\r\n </HiddenClass>\r\n </ECCustomAttributes>\r\n <ECProperty propertyName=\"SomeProp\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"VisibleElement\" modifier=\"Sealed\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"SomeProp\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n // Visible schema for baseline comparison\r\n const visibleTestSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"VisibleTestSchema\" alias=\"vts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"NormalElement\" modifier=\"Sealed\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"NormalProp\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n let iModel: SnapshotDb;\r\n let view: SchemaView;\r\n\r\n before(async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaViewHidden\", \"HiddenFlags.bim\");\r\n iModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"HiddenFlagsTest\" } });\r\n await iModel.importSchemaStrings([\r\n hiddenSchemaDefault,\r\n hiddenSchemaShowClasses,\r\n hiddenSchemaWithClassOverride,\r\n hiddenClassAndPropertySchema,\r\n visibleTestSchema,\r\n ]);\r\n view = await iModel.getSchemaView();\r\n });\r\n\r\n after(() => {\r\n if (iModel?.isOpen)\r\n iModel.close();\r\n });\r\n\r\n describe(\"HiddenSchema\", () => {\r\n it(\"schema without HiddenSchema CA is not hidden\", () => {\r\n const schema = view.getSchema(\"VisibleTestSchema\");\r\n expect(schema).to.not.be.undefined;\r\n expect(schema!.isHidden).to.equal(false);\r\n\r\n const bisCore = view.getSchema(\"BisCore\");\r\n expect(bisCore).to.not.be.undefined;\r\n expect(bisCore!.isHidden).to.equal(false);\r\n });\r\n\r\n it(\"schema with HiddenSchema(ShowClasses=false) is hidden\", () => {\r\n const schema = view.getSchema(\"HiddenSchemaDefault\");\r\n expect(schema).to.not.be.undefined;\r\n expect(schema!.isHidden).to.equal(true);\r\n });\r\n\r\n it(\"schema with HiddenSchema(ShowClasses=true) is still hidden\", () => {\r\n const schema = view.getSchema(\"HiddenSchemaShowClasses\");\r\n expect(schema).to.not.be.undefined;\r\n expect(schema!.isHidden).to.equal(true, \"ShowClasses does not affect the schema's own isHidden\");\r\n });\r\n });\r\n\r\n describe(\"HiddenClass - tri-state isHidden\", () => {\r\n it(\"class in HiddenSchema(ShowClasses=false) without own CA has isHidden=true\", () => {\r\n const cls = view.findClass(\"HiddenSchemaDefault:InheritedHiddenElement\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(true, \"schema-level propagation bakes into true\");\r\n expect(cls!.isEffectivelyHidden).to.equal(true);\r\n });\r\n\r\n it(\"class in HiddenSchema(ShowClasses=true) without own CA has isHidden=undefined\", () => {\r\n const cls = view.findClass(\"HiddenSchemaShowClasses:ShownElement\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(undefined, \"ShowClasses=true means no schema propagation\");\r\n expect(cls!.isEffectivelyHidden).to.equal(false);\r\n });\r\n\r\n it(\"class with HiddenClass(Show=false) has isHidden=true\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:HiddenBase\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(true);\r\n expect(cls!.isEffectivelyHidden).to.equal(true);\r\n });\r\n\r\n it(\"class with HiddenClass(Show=true) has isHidden=false (explicitly shown)\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:ShownClassElement\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(false, \"explicit Show=true produces false\");\r\n expect(cls!.isEffectivelyHidden).to.equal(false);\r\n });\r\n\r\n it(\"class without any HiddenClass CA in visible schema has isHidden=undefined\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:VisibleElement\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(undefined);\r\n expect(cls!.isEffectivelyHidden).to.equal(false);\r\n });\r\n\r\n it(\"HiddenClass(Show=true) in HiddenSchema(ShowClasses=false) produces isHidden=false\", () => {\r\n const cls = view.findClass(\"HiddenSchemaClassOverride:OverriddenShownElement\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(false, \"explicit Show=true overrides schema propagation\");\r\n expect(cls!.isEffectivelyHidden).to.equal(false);\r\n });\r\n\r\n it(\"class without HiddenClass in HiddenSchema(ShowClasses=false) has isHidden=true\", () => {\r\n const cls = view.findClass(\"HiddenSchemaClassOverride:StillHiddenElement\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(true);\r\n expect(cls!.isEffectivelyHidden).to.equal(true);\r\n });\r\n });\r\n\r\n describe(\"isEffectivelyHidden - base class inheritance\", () => {\r\n it(\"derived class with no CA inherits effectively hidden from hidden base\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:DerivedNoCA\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(undefined, \"no own CA\");\r\n expect(cls!.isEffectivelyHidden).to.equal(true, \"walks up to hidden base\");\r\n });\r\n\r\n it(\"derived class with HiddenClass(Show=true) breaks the inheritance chain\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:DerivedShown\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(false);\r\n expect(cls!.isEffectivelyHidden).to.equal(false, \"Show=true breaks the chain\");\r\n });\r\n\r\n it(\"class derived from explicitly shown class is NOT effectively hidden\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:DerivedFromShown\");\r\n expect(cls).to.not.be.undefined;\r\n expect(cls!.isHidden).to.equal(undefined, \"no own CA\");\r\n expect(cls!.isEffectivelyHidden).to.equal(false, \"Show=true on ancestor breaks the chain\");\r\n });\r\n });\r\n\r\n describe(\"HiddenProperty\", () => {\r\n it(\"property with HiddenProperty(Show=false) is hidden\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:HiddenBase\");\r\n expect(cls).to.not.be.undefined;\r\n const prop = cls!.getProperty(\"HiddenProp\");\r\n expect(prop).to.not.be.undefined;\r\n expect(prop!.isHidden).to.equal(true);\r\n });\r\n\r\n it(\"property with HiddenProperty(Show=true) is NOT hidden\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:HiddenBase\");\r\n expect(cls).to.not.be.undefined;\r\n const prop = cls!.getProperty(\"ShownProp\");\r\n expect(prop).to.not.be.undefined;\r\n expect(prop!.isHidden).to.equal(false, \"HiddenProperty with Show=true should override\");\r\n });\r\n\r\n it(\"property without HiddenProperty CA is not hidden\", () => {\r\n const cls = view.findClass(\"HiddenClassPropSchema:HiddenBase\");\r\n expect(cls).to.not.be.undefined;\r\n const prop = cls!.getProperty(\"NormalProp\");\r\n expect(prop).to.not.be.undefined;\r\n expect(prop!.isHidden).to.equal(false);\r\n });\r\n });\r\n});\r\n"]}
@@ -117,9 +117,9 @@ describe("SchemaView KindOfQuantity presentation formats", () => {
117
117
  const formatItemName = first.name.split(":")[1]; // "DefaultRealU"
118
118
  // Query FormatDef to get the format's NumericSpec (= FormatProps JSON)
119
119
  let formatNumericSpec;
120
- for await (const row of iModel.createQueryReader(`SELECT f.NumericSpec, f.CompositeSpec
121
- FROM meta.FormatDef f
122
- JOIN meta.ECSchemaDef s USING meta.SchemaOwnsFormats
120
+ for await (const row of iModel.createQueryReader(`SELECT f.NumericSpec, f.CompositeSpec
121
+ FROM meta.FormatDef f
122
+ JOIN meta.ECSchemaDef s USING meta.SchemaOwnsFormats
123
123
  WHERE f.Name = ? AND s.Name = 'Formats'`, QueryBinder.from([formatItemName]), {
124
124
  // eslint-disable-next-line @typescript-eslint/no-deprecated
125
125
  rowFormat: QueryRowFormat.UseJsPropertyNames,
@@ -138,10 +138,10 @@ describe("SchemaView KindOfQuantity presentation formats", () => {
138
138
  // "u:M" -> unit name is "M" in the "Units" schema
139
139
  const unitItemName = first.unitAndLabels[0][0].split(":")[1]; // "M"
140
140
  let unitRow;
141
- for await (const row of iModel.createQueryReader(`SELECT u.Name, u.DisplayLabel, us.Name AS unitSystemName
142
- FROM meta.UnitDef u
143
- JOIN meta.ECSchemaDef s USING meta.SchemaOwnsUnits
144
- JOIN meta.UnitSystemDef us USING meta.UnitSystemHasUnits
141
+ for await (const row of iModel.createQueryReader(`SELECT u.Name, u.DisplayLabel, us.Name AS unitSystemName
142
+ FROM meta.UnitDef u
143
+ JOIN meta.ECSchemaDef s USING meta.SchemaOwnsUnits
144
+ JOIN meta.UnitSystemDef us USING meta.UnitSystemHasUnits
145
145
  WHERE u.Name = ? AND s.Name = 'Units'`, QueryBinder.from([unitItemName]), {
146
146
  // eslint-disable-next-line @typescript-eslint/no-deprecated
147
147
  rowFormat: QueryRowFormat.UseJsPropertyNames,
@@ -161,12 +161,12 @@ describe("SchemaView KindOfQuantity presentation formats", () => {
161
161
  const dmsFormat = angleFormats.find((f) => f.name.split(":")[1] === "AngleDMS");
162
162
  if (dmsFormat) {
163
163
  const compositeUnits = [];
164
- for await (const row of iModel.createQueryReader(`SELECT cu.Ordinal, u.Name AS unitName, cu.Label
165
- FROM meta.FormatCompositeUnitDef cu
166
- JOIN meta.FormatDef f USING meta.FormatOwnsCompositeUnits
167
- JOIN meta.ECSchemaDef s USING meta.SchemaOwnsFormats
168
- JOIN meta.UnitDef u USING meta.CompositeUnitRefersToUnit
169
- WHERE f.Name = 'AngleDMS' AND s.Name = 'Formats'
164
+ for await (const row of iModel.createQueryReader(`SELECT cu.Ordinal, u.Name AS unitName, cu.Label
165
+ FROM meta.FormatCompositeUnitDef cu
166
+ JOIN meta.FormatDef f USING meta.FormatOwnsCompositeUnits
167
+ JOIN meta.ECSchemaDef s USING meta.SchemaOwnsFormats
168
+ JOIN meta.UnitDef u USING meta.CompositeUnitRefersToUnit
169
+ WHERE f.Name = 'AngleDMS' AND s.Name = 'Formats'
170
170
  ORDER BY cu.Ordinal`, undefined, {
171
171
  // eslint-disable-next-line @typescript-eslint/no-deprecated
172
172
  rowFormat: QueryRowFormat.UseJsPropertyNames,
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaViewKoQ.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewKoQ.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 { IModelHost, SnapshotDb } from \"../../core-backend\";\nimport { Format, KindOfQuantity, SchemaUnitProvider, type SchemaView, Unit } from \"@itwin/ecschema-metadata\";\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { assert, expect } from \"chai\";\nimport * as path from \"path\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { TestUtils } from \"../TestUtils\";\n\n/**\n * Example-style tests showing how to access KindOfQuantity presentation formats\n * through SchemaView and resolve the alias-qualified format/unit names\n * into full schema items via ecschema-metadata or ECSQL.\n *\n * Uses sim-master.bim which contains schemas with rich KoQ definitions\n * (AecUnits, RoadRailUnits, LinearReferencing, etc.).\n */\ndescribe(\"SchemaView KindOfQuantity presentation formats\", () => {\n let iModel: SnapshotDb;\n let schemaView: SchemaView;\n\n before(async () => {\n if (!IModelHost.isValid)\n await TestUtils.startBackend();\n iModel = SnapshotDb.openFile(path.join(KnownTestLocations.assetsDir, \"sim-master.bim\"));\n schemaView = await iModel.getSchemaView();\n });\n\n after(() => {\n iModel.close();\n });\n\n /**\n * Example: get a property's KoQ from SchemaView, then resolve the\n * alias-qualified format and unit names to full ecschema-metadata objects via\n * IModelDb.schemaContext.\n *\n * SchemaView uses alias-qualified names (e.g. \"f:DefaultRealU\", \"u:M\")\n * because the Units and Formats schemas are excluded from the SchemaView blob.\n * The alias (\"f\" -> \"Formats\", \"u\" -> \"Units\") is stored in ec_Schema, so we\n * can resolve it using the schema context that has the full schema set.\n */\n it(\"should resolve KoQ format and unit names via ecschema-metadata\", async () => {\n // --- Step 1: find a property with a KoQ via SchemaView ---\n const rClass = schemaView.findClass(\"LinearReferencing:DistanceExpression\");\n assert.isDefined(rClass, \"DistanceExpression class not found\");\n\n const rProp = rClass!.getProperty(\"DistanceAlongFromStart\");\n assert.isDefined(rProp, \"DistanceAlongFromStart property not found\");\n\n const prop = rProp!;\n if (!prop.isPrimitive())\n throw new Error(\"expected primitive\");\n const rKoq = prop.kindOfQuantity;\n assert.isDefined(rKoq, \"property should have a KoQ\");\n\n // --- Step 2: inspect parsed presentation formats ---\n const formats: readonly SchemaView.PresentationFormat[] = rKoq!.presentationFormats;\n expect(formats.length).to.be.greaterThan(0, \"KoQ should have presentation formats\");\n\n // LinearReferencing:LENGTH has: f:DefaultRealU(2)[u:M], f:DefaultRealU(2)[u:FT]\n const first = formats[0];\n expect(first.name).to.equal(\"f:DefaultRealU\");\n expect(first.precision).to.equal(2);\n expect(first.unitAndLabels).to.have.length(1);\n expect(first.unitAndLabels![0][0]).to.equal(\"u:M\");\n\n // --- Step 3: resolve alias names to full schema items via schemaContext ---\n // The Formats and Units schemas are excluded from SchemaView,\n // but IModelDb.schemaContext (ecschema-metadata) has the full set.\n // Alias \"f\" -> \"Formats\", alias \"u\" -> \"Units\" - these are standard BIS aliases.\n\n // Resolve the format: \"f:DefaultRealU\" -> \"Formats.DefaultRealU\"\n const formatFullName = `Formats.${first.name.split(\":\")[1]}`;\n const metaFormat = iModel.schemaContext.getSchemaItemSync(formatFullName, Format);\n assert.isDefined(metaFormat, `Format '${formatFullName}' not found in ecschema-metadata`);\n expect(metaFormat!.precision).to.be.a(\"number\");\n\n // Resolve the unit: \"u:M\" -> \"Units.M\"\n const unitFullName = `Units.${first.unitAndLabels![0][0].split(\":\")[1]}`;\n const metaUnit = iModel.schemaContext.getSchemaItemSync(unitFullName, Unit);\n assert.isDefined(metaUnit, `Unit '${unitFullName}' not found in ecschema-metadata`);\n expect(metaUnit!.fullName).to.equal(\"Units.M\");\n\n // Access unit details like label and unit system\n const unitSystem = await metaUnit!.unitSystem;\n assert.isDefined(unitSystem, \"unit should have a unit system\");\n expect(unitSystem!.name).to.equal(\"SI\");\n\n // --- Step 4: cross-validate against the KoQ in ecschema-metadata ---\n const metaKoq = iModel.schemaContext.getSchemaItemSync(\"LinearReferencing\", \"LENGTH\", KindOfQuantity);\n assert.isDefined(metaKoq, \"KoQ not found in ecschema-metadata\");\n expect(metaKoq!.relativeError).to.equal(rKoq!.relativeError);\n\n const metaFormats = metaKoq!.presentationFormats;\n expect(metaFormats.length).to.equal(formats.length);\n\n // ecschema-metadata resolves the formats fully - cross-check the format names.\n // OverrideFormat.fullName includes override syntax (e.g. \"Formats.DefaultRealU(2)[Units.M]\"),\n // so strip the override portion before extracting the base name.\n for (let i = 0; i < formats.length; i++) {\n const rtItemName = formats[i].name.split(\":\")[1];\n const metaBaseFullName = metaFormats[i].fullName.split(/[([]/)[0];\n const metaItemName = metaBaseFullName.split(\".\").pop();\n expect(rtItemName).to.equal(metaItemName, `format name mismatch at index ${i}`);\n }\n\n // The SchemaUnitProvider bridges ecschema-metadata units to the @itwin/core-quantity package.\n // Use it to build a FormatterSpec for quantity formatting:\n const unitsProvider = new SchemaUnitProvider(iModel.schemaContext);\n const persistenceUnitProps = await unitsProvider.findUnitByName(\"Units.M\");\n expect(persistenceUnitProps.name).to.equal(\"Units.M\");\n });\n\n /**\n * Example: get a KoQ from SchemaView, then query ECDbMeta via ECSQL\n * to resolve the referenced format and unit definitions.\n *\n * This approach avoids loading the full ecschema-metadata schema set and works\n * well for targeted lookups - e.g. \"I have a format name, give me its NumericSpec.\"\n */\n it(\"should resolve KoQ format and unit names via ECSQL\", async () => {\n // --- Step 1: find a KoQ via SchemaView ---\n const rKoq = schemaView.findKindOfQuantity(\"LinearReferencing:LENGTH\");\n assert.isDefined(rKoq, \"KoQ not found in SchemaView\");\n\n const formats = rKoq!.presentationFormats;\n expect(formats.length).to.be.greaterThan(0);\n\n // --- Step 2: resolve the format name via meta.FormatDef ---\n // \"f:DefaultRealU\" -> format name is \"DefaultRealU\" in the \"Formats\" schema\n const first = formats[0];\n const formatItemName = first.name.split(\":\")[1]; // \"DefaultRealU\"\n\n // Query FormatDef to get the format's NumericSpec (= FormatProps JSON)\n let formatNumericSpec: any;\n for await (const row of iModel.createQueryReader(\n `SELECT f.NumericSpec, f.CompositeSpec\n FROM meta.FormatDef f\n JOIN meta.ECSchemaDef s USING meta.SchemaOwnsFormats\n WHERE f.Name = ? AND s.Name = 'Formats'`,\n QueryBinder.from([formatItemName]),\n {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rowFormat: QueryRowFormat.UseJsPropertyNames,\n },\n )) {\n formatNumericSpec = row.toRow();\n }\n assert.isDefined(formatNumericSpec, `FormatDef '${formatItemName}' not found via ECSQL`);\n\n // NumericSpec is a JSON string with the format properties (type, precision, traits, etc.)\n const numericSpec = JSON.parse(formatNumericSpec.numericSpec);\n expect(numericSpec.type).to.equal(\"Decimal\");\n expect(numericSpec.precision).to.be.a(\"number\");\n\n // The presentation format can override precision - e.g. the override \"(2)\" means precision 2\n if (first.precision !== undefined)\n expect(first.precision).to.equal(2); // our override\n\n // --- Step 3: resolve the unit name via meta.UnitDef ---\n // \"u:M\" -> unit name is \"M\" in the \"Units\" schema\n const unitItemName = first.unitAndLabels![0][0].split(\":\")[1]; // \"M\"\n\n let unitRow: any;\n for await (const row of iModel.createQueryReader(\n `SELECT u.Name, u.DisplayLabel, us.Name AS unitSystemName\n FROM meta.UnitDef u\n JOIN meta.ECSchemaDef s USING meta.SchemaOwnsUnits\n JOIN meta.UnitSystemDef us USING meta.UnitSystemHasUnits\n WHERE u.Name = ? AND s.Name = 'Units'`,\n QueryBinder.from([unitItemName]),\n {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rowFormat: QueryRowFormat.UseJsPropertyNames,\n },\n )) {\n unitRow = row.toRow();\n }\n assert.isDefined(unitRow, `UnitDef '${unitItemName}' not found via ECSQL`);\n expect(unitRow.name).to.equal(\"M\");\n expect(unitRow.unitSystemName).to.equal(\"SI\");\n\n // --- Step 4: query the format's composite units (base format units, before overrides) ---\n // DefaultRealU has no composite units (it's a single-unit format), but AngleDMS does.\n // Let's also check the second KoQ format which might have composite units.\n const angleKoq = schemaView.findKindOfQuantity(\"RoadRailUnits:ANGLE\");\n if (angleKoq) {\n const angleFormats = angleKoq.presentationFormats;\n // The AngleDMS format has composite units: ARC_DEG, ARC_MINUTE, ARC_SECOND\n const dmsFormat = angleFormats.find((f) => f.name.split(\":\")[1] === \"AngleDMS\");\n if (dmsFormat) {\n const compositeUnits: Array<{ ordinal: number; unitName: string; label: string }> = [];\n for await (const row of iModel.createQueryReader(\n `SELECT cu.Ordinal, u.Name AS unitName, cu.Label\n FROM meta.FormatCompositeUnitDef cu\n JOIN meta.FormatDef f USING meta.FormatOwnsCompositeUnits\n JOIN meta.ECSchemaDef s USING meta.SchemaOwnsFormats\n JOIN meta.UnitDef u USING meta.CompositeUnitRefersToUnit\n WHERE f.Name = 'AngleDMS' AND s.Name = 'Formats'\n ORDER BY cu.Ordinal`,\n undefined,\n {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n rowFormat: QueryRowFormat.UseJsPropertyNames,\n },\n )) {\n compositeUnits.push(row.toRow());\n }\n expect(compositeUnits.length).to.equal(3, \"AngleDMS should have 3 composite units\");\n expect(compositeUnits[0].unitName).to.equal(\"ARC_DEG\");\n expect(compositeUnits[1].unitName).to.equal(\"ARC_MINUTE\");\n expect(compositeUnits[2].unitName).to.equal(\"ARC_SECOND\");\n }\n }\n });\n});\n"]}
1
+ {"version":3,"file":"SchemaViewKoQ.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewKoQ.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 { IModelHost, SnapshotDb } from \"../../core-backend\";\r\nimport { Format, KindOfQuantity, SchemaUnitProvider, type SchemaView, Unit } from \"@itwin/ecschema-metadata\";\r\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { TestUtils } from \"../TestUtils\";\r\n\r\n/**\r\n * Example-style tests showing how to access KindOfQuantity presentation formats\r\n * through SchemaView and resolve the alias-qualified format/unit names\r\n * into full schema items via ecschema-metadata or ECSQL.\r\n *\r\n * Uses sim-master.bim which contains schemas with rich KoQ definitions\r\n * (AecUnits, RoadRailUnits, LinearReferencing, etc.).\r\n */\r\ndescribe(\"SchemaView KindOfQuantity presentation formats\", () => {\r\n let iModel: SnapshotDb;\r\n let schemaView: SchemaView;\r\n\r\n before(async () => {\r\n if (!IModelHost.isValid)\r\n await TestUtils.startBackend();\r\n iModel = SnapshotDb.openFile(path.join(KnownTestLocations.assetsDir, \"sim-master.bim\"));\r\n schemaView = await iModel.getSchemaView();\r\n });\r\n\r\n after(() => {\r\n iModel.close();\r\n });\r\n\r\n /**\r\n * Example: get a property's KoQ from SchemaView, then resolve the\r\n * alias-qualified format and unit names to full ecschema-metadata objects via\r\n * IModelDb.schemaContext.\r\n *\r\n * SchemaView uses alias-qualified names (e.g. \"f:DefaultRealU\", \"u:M\")\r\n * because the Units and Formats schemas are excluded from the SchemaView blob.\r\n * The alias (\"f\" -> \"Formats\", \"u\" -> \"Units\") is stored in ec_Schema, so we\r\n * can resolve it using the schema context that has the full schema set.\r\n */\r\n it(\"should resolve KoQ format and unit names via ecschema-metadata\", async () => {\r\n // --- Step 1: find a property with a KoQ via SchemaView ---\r\n const rClass = schemaView.findClass(\"LinearReferencing:DistanceExpression\");\r\n assert.isDefined(rClass, \"DistanceExpression class not found\");\r\n\r\n const rProp = rClass!.getProperty(\"DistanceAlongFromStart\");\r\n assert.isDefined(rProp, \"DistanceAlongFromStart property not found\");\r\n\r\n const prop = rProp!;\r\n if (!prop.isPrimitive())\r\n throw new Error(\"expected primitive\");\r\n const rKoq = prop.kindOfQuantity;\r\n assert.isDefined(rKoq, \"property should have a KoQ\");\r\n\r\n // --- Step 2: inspect parsed presentation formats ---\r\n const formats: readonly SchemaView.PresentationFormat[] = rKoq!.presentationFormats;\r\n expect(formats.length).to.be.greaterThan(0, \"KoQ should have presentation formats\");\r\n\r\n // LinearReferencing:LENGTH has: f:DefaultRealU(2)[u:M], f:DefaultRealU(2)[u:FT]\r\n const first = formats[0];\r\n expect(first.name).to.equal(\"f:DefaultRealU\");\r\n expect(first.precision).to.equal(2);\r\n expect(first.unitAndLabels).to.have.length(1);\r\n expect(first.unitAndLabels![0][0]).to.equal(\"u:M\");\r\n\r\n // --- Step 3: resolve alias names to full schema items via schemaContext ---\r\n // The Formats and Units schemas are excluded from SchemaView,\r\n // but IModelDb.schemaContext (ecschema-metadata) has the full set.\r\n // Alias \"f\" -> \"Formats\", alias \"u\" -> \"Units\" - these are standard BIS aliases.\r\n\r\n // Resolve the format: \"f:DefaultRealU\" -> \"Formats.DefaultRealU\"\r\n const formatFullName = `Formats.${first.name.split(\":\")[1]}`;\r\n const metaFormat = iModel.schemaContext.getSchemaItemSync(formatFullName, Format);\r\n assert.isDefined(metaFormat, `Format '${formatFullName}' not found in ecschema-metadata`);\r\n expect(metaFormat!.precision).to.be.a(\"number\");\r\n\r\n // Resolve the unit: \"u:M\" -> \"Units.M\"\r\n const unitFullName = `Units.${first.unitAndLabels![0][0].split(\":\")[1]}`;\r\n const metaUnit = iModel.schemaContext.getSchemaItemSync(unitFullName, Unit);\r\n assert.isDefined(metaUnit, `Unit '${unitFullName}' not found in ecschema-metadata`);\r\n expect(metaUnit!.fullName).to.equal(\"Units.M\");\r\n\r\n // Access unit details like label and unit system\r\n const unitSystem = await metaUnit!.unitSystem;\r\n assert.isDefined(unitSystem, \"unit should have a unit system\");\r\n expect(unitSystem!.name).to.equal(\"SI\");\r\n\r\n // --- Step 4: cross-validate against the KoQ in ecschema-metadata ---\r\n const metaKoq = iModel.schemaContext.getSchemaItemSync(\"LinearReferencing\", \"LENGTH\", KindOfQuantity);\r\n assert.isDefined(metaKoq, \"KoQ not found in ecschema-metadata\");\r\n expect(metaKoq!.relativeError).to.equal(rKoq!.relativeError);\r\n\r\n const metaFormats = metaKoq!.presentationFormats;\r\n expect(metaFormats.length).to.equal(formats.length);\r\n\r\n // ecschema-metadata resolves the formats fully - cross-check the format names.\r\n // OverrideFormat.fullName includes override syntax (e.g. \"Formats.DefaultRealU(2)[Units.M]\"),\r\n // so strip the override portion before extracting the base name.\r\n for (let i = 0; i < formats.length; i++) {\r\n const rtItemName = formats[i].name.split(\":\")[1];\r\n const metaBaseFullName = metaFormats[i].fullName.split(/[([]/)[0];\r\n const metaItemName = metaBaseFullName.split(\".\").pop();\r\n expect(rtItemName).to.equal(metaItemName, `format name mismatch at index ${i}`);\r\n }\r\n\r\n // The SchemaUnitProvider bridges ecschema-metadata units to the @itwin/core-quantity package.\r\n // Use it to build a FormatterSpec for quantity formatting:\r\n const unitsProvider = new SchemaUnitProvider(iModel.schemaContext);\r\n const persistenceUnitProps = await unitsProvider.findUnitByName(\"Units.M\");\r\n expect(persistenceUnitProps.name).to.equal(\"Units.M\");\r\n });\r\n\r\n /**\r\n * Example: get a KoQ from SchemaView, then query ECDbMeta via ECSQL\r\n * to resolve the referenced format and unit definitions.\r\n *\r\n * This approach avoids loading the full ecschema-metadata schema set and works\r\n * well for targeted lookups - e.g. \"I have a format name, give me its NumericSpec.\"\r\n */\r\n it(\"should resolve KoQ format and unit names via ECSQL\", async () => {\r\n // --- Step 1: find a KoQ via SchemaView ---\r\n const rKoq = schemaView.findKindOfQuantity(\"LinearReferencing:LENGTH\");\r\n assert.isDefined(rKoq, \"KoQ not found in SchemaView\");\r\n\r\n const formats = rKoq!.presentationFormats;\r\n expect(formats.length).to.be.greaterThan(0);\r\n\r\n // --- Step 2: resolve the format name via meta.FormatDef ---\r\n // \"f:DefaultRealU\" -> format name is \"DefaultRealU\" in the \"Formats\" schema\r\n const first = formats[0];\r\n const formatItemName = first.name.split(\":\")[1]; // \"DefaultRealU\"\r\n\r\n // Query FormatDef to get the format's NumericSpec (= FormatProps JSON)\r\n let formatNumericSpec: any;\r\n for await (const row of iModel.createQueryReader(\r\n `SELECT f.NumericSpec, f.CompositeSpec\r\n FROM meta.FormatDef f\r\n JOIN meta.ECSchemaDef s USING meta.SchemaOwnsFormats\r\n WHERE f.Name = ? AND s.Name = 'Formats'`,\r\n QueryBinder.from([formatItemName]),\r\n {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rowFormat: QueryRowFormat.UseJsPropertyNames,\r\n },\r\n )) {\r\n formatNumericSpec = row.toRow();\r\n }\r\n assert.isDefined(formatNumericSpec, `FormatDef '${formatItemName}' not found via ECSQL`);\r\n\r\n // NumericSpec is a JSON string with the format properties (type, precision, traits, etc.)\r\n const numericSpec = JSON.parse(formatNumericSpec.numericSpec);\r\n expect(numericSpec.type).to.equal(\"Decimal\");\r\n expect(numericSpec.precision).to.be.a(\"number\");\r\n\r\n // The presentation format can override precision - e.g. the override \"(2)\" means precision 2\r\n if (first.precision !== undefined)\r\n expect(first.precision).to.equal(2); // our override\r\n\r\n // --- Step 3: resolve the unit name via meta.UnitDef ---\r\n // \"u:M\" -> unit name is \"M\" in the \"Units\" schema\r\n const unitItemName = first.unitAndLabels![0][0].split(\":\")[1]; // \"M\"\r\n\r\n let unitRow: any;\r\n for await (const row of iModel.createQueryReader(\r\n `SELECT u.Name, u.DisplayLabel, us.Name AS unitSystemName\r\n FROM meta.UnitDef u\r\n JOIN meta.ECSchemaDef s USING meta.SchemaOwnsUnits\r\n JOIN meta.UnitSystemDef us USING meta.UnitSystemHasUnits\r\n WHERE u.Name = ? AND s.Name = 'Units'`,\r\n QueryBinder.from([unitItemName]),\r\n {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rowFormat: QueryRowFormat.UseJsPropertyNames,\r\n },\r\n )) {\r\n unitRow = row.toRow();\r\n }\r\n assert.isDefined(unitRow, `UnitDef '${unitItemName}' not found via ECSQL`);\r\n expect(unitRow.name).to.equal(\"M\");\r\n expect(unitRow.unitSystemName).to.equal(\"SI\");\r\n\r\n // --- Step 4: query the format's composite units (base format units, before overrides) ---\r\n // DefaultRealU has no composite units (it's a single-unit format), but AngleDMS does.\r\n // Let's also check the second KoQ format which might have composite units.\r\n const angleKoq = schemaView.findKindOfQuantity(\"RoadRailUnits:ANGLE\");\r\n if (angleKoq) {\r\n const angleFormats = angleKoq.presentationFormats;\r\n // The AngleDMS format has composite units: ARC_DEG, ARC_MINUTE, ARC_SECOND\r\n const dmsFormat = angleFormats.find((f) => f.name.split(\":\")[1] === \"AngleDMS\");\r\n if (dmsFormat) {\r\n const compositeUnits: Array<{ ordinal: number; unitName: string; label: string }> = [];\r\n for await (const row of iModel.createQueryReader(\r\n `SELECT cu.Ordinal, u.Name AS unitName, cu.Label\r\n FROM meta.FormatCompositeUnitDef cu\r\n JOIN meta.FormatDef f USING meta.FormatOwnsCompositeUnits\r\n JOIN meta.ECSchemaDef s USING meta.SchemaOwnsFormats\r\n JOIN meta.UnitDef u USING meta.CompositeUnitRefersToUnit\r\n WHERE f.Name = 'AngleDMS' AND s.Name = 'Formats'\r\n ORDER BY cu.Ordinal`,\r\n undefined,\r\n {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n rowFormat: QueryRowFormat.UseJsPropertyNames,\r\n },\r\n )) {\r\n compositeUnits.push(row.toRow());\r\n }\r\n expect(compositeUnits.length).to.equal(3, \"AngleDMS should have 3 composite units\");\r\n expect(compositeUnits[0].unitName).to.equal(\"ARC_DEG\");\r\n expect(compositeUnits[1].unitName).to.equal(\"ARC_MINUTE\");\r\n expect(compositeUnits[2].unitName).to.equal(\"ARC_SECOND\");\r\n }\r\n }\r\n });\r\n});\r\n"]}
@@ -10,23 +10,23 @@ import { HubWrappers } from "../IModelTestUtils";
10
10
  import { KnownTestLocations } from "../KnownTestLocations";
11
11
  import { TestUtils } from "../TestUtils";
12
12
  /** Simple test schema that will be imported to test cache lifecycle. */
13
- const testSchemaV1 = `<?xml version="1.0" encoding="UTF-8"?>
14
- <ECSchema schemaName="SchemaViewLifecycleTest" alias="rslt" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
15
- <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
16
- <ECEntityClass typeName="TestElement">
17
- <BaseClass>bis:PhysicalElement</BaseClass>
18
- <ECProperty propertyName="PropA" typeName="string"/>
19
- </ECEntityClass>
13
+ const testSchemaV1 = `<?xml version="1.0" encoding="UTF-8"?>
14
+ <ECSchema schemaName="SchemaViewLifecycleTest" alias="rslt" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
15
+ <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
16
+ <ECEntityClass typeName="TestElement">
17
+ <BaseClass>bis:PhysicalElement</BaseClass>
18
+ <ECProperty propertyName="PropA" typeName="string"/>
19
+ </ECEntityClass>
20
20
  </ECSchema>`;
21
21
  /** Updated schema with an additional property. */
22
- const testSchemaV2 = `<?xml version="1.0" encoding="UTF-8"?>
23
- <ECSchema schemaName="SchemaViewLifecycleTest" alias="rslt" version="01.00.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
24
- <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
25
- <ECEntityClass typeName="TestElement">
26
- <BaseClass>bis:PhysicalElement</BaseClass>
27
- <ECProperty propertyName="PropA" typeName="string"/>
28
- <ECProperty propertyName="PropB" typeName="int"/>
29
- </ECEntityClass>
22
+ const testSchemaV2 = `<?xml version="1.0" encoding="UTF-8"?>
23
+ <ECSchema schemaName="SchemaViewLifecycleTest" alias="rslt" version="01.00.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
24
+ <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
25
+ <ECEntityClass typeName="TestElement">
26
+ <BaseClass>bis:PhysicalElement</BaseClass>
27
+ <ECProperty propertyName="PropA" typeName="string"/>
28
+ <ECProperty propertyName="PropB" typeName="int"/>
29
+ </ECEntityClass>
30
30
  </ECSchema>`;
31
31
  describe("SchemaView lifecycle", () => {
32
32
  let iModelId;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaViewLifecycle.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewLifecycle.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Guid } from \"@itwin/core-bentley\";\nimport { expect } from \"chai\";\nimport { ChannelControl } from \"../../ChannelControl\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { HubWrappers } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { TestUtils } from \"../TestUtils\";\n\n/** Simple test schema that will be imported to test cache lifecycle. */\nconst testSchemaV1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n/** Updated schema with an additional property. */\nconst testSchemaV2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropB\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`;\n\ndescribe(\"SchemaView lifecycle\", () => {\n let iModelId: string;\n\n before(async () => {\n HubMock.startup(\"SchemaViewLifecycle\", KnownTestLocations.outputDir);\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n after(async () => {\n HubMock.shutdown();\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n beforeEach(async () => {\n iModelId = await HubWrappers.createIModel(\"user1\", HubMock.iTwinId, `RSLifecycle-${Guid.createValue()}`);\n });\n\n afterEach(async () => {\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n });\n\n it(\"getSchemaView reflects imported schema after importSchemaStrings\", async () => {\n // Open a briefcase, get initial context\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const ctx1 = await bc.getSchemaView();\n expect(ctx1.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\n expect(ctx1.isOutdated).to.be.false;\n\n // Import v1 schema - adds TestElement with PropA\n // importSchemaStrings calls clearCaches which immediately invalidates the cached schema view.\n await bc.importSchemaStrings([testSchemaV1]);\n\n // importSchemaStrings calls clearCaches which immediately invalidates the cached view\n const ctx2 = await bc.getSchemaView();\n expect(ctx1.isOutdated).to.be.true;\n expect(ctx2.isOutdated).to.be.false;\n\n const testClass1 = ctx2.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass1).to.not.be.undefined;\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropB\")).to.be.undefined;\n\n // Import v2 schema - adds PropB\n await bc.importSchemaStrings([testSchemaV2]);\n\n // cache is again invalidated automatically\n const ctx3 = await bc.getSchemaView();\n expect(ctx2.isOutdated).to.be.true;\n expect(ctx3.isOutdated).to.be.false;\n\n const testClass2 = ctx3.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass2).to.not.be.undefined;\n expect(testClass2!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\n\n bc.close();\n });\n\n it(\"getSchemas on second briefcase reflects schema pushed from first\", async () => {\n // bc1 imports a schema and pushes\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await bc1.importSchemaStrings([testSchemaV1]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1 schema\" });\n\n // bc2 pulls and should see the new schema\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const ctx = await bc2.getSchemaView();\n const testClass = ctx.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass).to.not.be.undefined;\n expect(testClass!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\n\n bc1.close();\n bc2.close();\n });\n\n it(\"pullChanges invalidates cached SchemaView\", async () => {\n // bc1 will push schema changes; bc2 will pull them\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // bc2 gets initial context (no test schema)\n const ctxBefore = await bc2.getSchemaView();\n expect(ctxBefore.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\n\n // bc1: import v1 + push\n await bc1.importSchemaStrings([testSchemaV1]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1\" });\n\n // bc2: pull changes\n await bc2.pullChanges();\n\n // After pulling a schema changeset, clearCaches is called which immediately drops the cached schema view.\n const ctxAfterPull = await bc2.getSchemaView();\n expect(ctxBefore.isOutdated).to.be.true;\n const testClass = ctxAfterPull.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass).to.not.be.undefined;\n\n // bc1: import v2 + push\n await bc1.importSchemaStrings([testSchemaV2]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v2\" });\n\n // bc2: pull again\n await bc2.pullChanges();\n const ctxAfterPull2 = await bc2.getSchemaView();\n expect(ctxAfterPull.isOutdated).to.be.true;\n const updated = ctxAfterPull2.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(updated).to.not.be.undefined;\n expect(updated!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\n\n bc1.close();\n bc2.close();\n });\n\n it(\"concurrent getSchemaView calls share a single hydration\", async () => {\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Fire multiple concurrent getSchemaView calls - they should all resolve to the same context\n const [ctx1, ctx2, ctx3] = await Promise.all([\n bc.getSchemaView(),\n bc.getSchemaView(),\n bc.getSchemaView(),\n ]);\n\n expect(ctx1).to.equal(ctx2);\n expect(ctx2).to.equal(ctx3);\n expect(ctx1.isOutdated).to.be.false;\n\n bc.close();\n });\n});\n"]}
1
+ {"version":3,"file":"SchemaViewLifecycle.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewLifecycle.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,wEAAwE;AACxE,MAAM,YAAY,GAAG;;;;;;;cAOP,CAAC;AAEf,kDAAkD;AAClD,MAAM,YAAY,GAAG;;;;;;;;cAQP,CAAC;AAEf,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,QAAgB,CAAC;IAErB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,eAAe,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,wCAAwC;QACxC,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpH,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEpC,iDAAiD;QACjD,8FAA8F;QAC9F,MAAM,EAAE,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAE7C,sFAAsF;QACtF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACzE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACvC,MAAM,CAAC,UAAW,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3F,MAAM,CAAC,UAAW,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAEvF,gCAAgC;QAChC,MAAM,EAAE,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAE7C,2CAA2C;QAC3C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACzE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACvC,MAAM,CAAC,UAAW,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAE3F,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,kCAAkC;QAClC,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrH,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEjE,MAAM,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAE/E,0CAA0C;QAC1C,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrH,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEjE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACtC,MAAM,CAAC,SAAU,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAE1F,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,mDAAmD;QACnD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrH,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrH,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEjE,4CAA4C;QAC5C,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAEnF,wBAAwB;QACxB,MAAM,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QAExE,oBAAoB;QACpB,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QAExB,0GAA0G;QAC1G,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACxC,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAChF,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAEtC,wBAAwB;QACxB,MAAM,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QAExE,kBAAkB;QAClB,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAC/E,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACpC,MAAM,CAAC,OAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAExF,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpH,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEhE,6FAA6F;QAC7F,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3C,EAAE,CAAC,aAAa,EAAE;YAClB,EAAE,CAAC,aAAa,EAAE;YAClB,EAAE,CAAC,aAAa,EAAE;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEpC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { expect } from \"chai\";\r\nimport { ChannelControl } from \"../../ChannelControl\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { HubWrappers } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { TestUtils } from \"../TestUtils\";\r\n\r\n/** Simple test schema that will be imported to test cache lifecycle. */\r\nconst testSchemaV1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n/** Updated schema with an additional property. */\r\nconst testSchemaV2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropB\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\ndescribe(\"SchemaView lifecycle\", () => {\r\n let iModelId: string;\r\n\r\n before(async () => {\r\n HubMock.startup(\"SchemaViewLifecycle\", KnownTestLocations.outputDir);\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend();\r\n });\r\n\r\n after(async () => {\r\n HubMock.shutdown();\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend();\r\n });\r\n\r\n beforeEach(async () => {\r\n iModelId = await HubWrappers.createIModel(\"user1\", HubMock.iTwinId, `RSLifecycle-${Guid.createValue()}`);\r\n });\r\n\r\n afterEach(async () => {\r\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n });\r\n\r\n it(\"getSchemaView reflects imported schema after importSchemaStrings\", async () => {\r\n // Open a briefcase, get initial context\r\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n const ctx1 = await bc.getSchemaView();\r\n expect(ctx1.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\r\n expect(ctx1.isOutdated).to.be.false;\r\n\r\n // Import v1 schema - adds TestElement with PropA\r\n // importSchemaStrings calls clearCaches which immediately invalidates the cached schema view.\r\n await bc.importSchemaStrings([testSchemaV1]);\r\n\r\n // importSchemaStrings calls clearCaches which immediately invalidates the cached view\r\n const ctx2 = await bc.getSchemaView();\r\n expect(ctx1.isOutdated).to.be.true;\r\n expect(ctx2.isOutdated).to.be.false;\r\n\r\n const testClass1 = ctx2.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(testClass1).to.not.be.undefined;\r\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\r\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropB\")).to.be.undefined;\r\n\r\n // Import v2 schema - adds PropB\r\n await bc.importSchemaStrings([testSchemaV2]);\r\n\r\n // cache is again invalidated automatically\r\n const ctx3 = await bc.getSchemaView();\r\n expect(ctx2.isOutdated).to.be.true;\r\n expect(ctx3.isOutdated).to.be.false;\r\n\r\n const testClass2 = ctx3.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(testClass2).to.not.be.undefined;\r\n expect(testClass2!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\r\n\r\n bc.close();\r\n });\r\n\r\n it(\"getSchemas on second briefcase reflects schema pushed from first\", async () => {\r\n // bc1 imports a schema and pushes\r\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n await bc1.importSchemaStrings([testSchemaV1]);\r\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1 schema\" });\r\n\r\n // bc2 pulls and should see the new schema\r\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n const ctx = await bc2.getSchemaView();\r\n const testClass = ctx.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(testClass).to.not.be.undefined;\r\n expect(testClass!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\r\n\r\n bc1.close();\r\n bc2.close();\r\n });\r\n\r\n it(\"pullChanges invalidates cached SchemaView\", async () => {\r\n // bc1 will push schema changes; bc2 will pull them\r\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // bc2 gets initial context (no test schema)\r\n const ctxBefore = await bc2.getSchemaView();\r\n expect(ctxBefore.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\r\n\r\n // bc1: import v1 + push\r\n await bc1.importSchemaStrings([testSchemaV1]);\r\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1\" });\r\n\r\n // bc2: pull changes\r\n await bc2.pullChanges();\r\n\r\n // After pulling a schema changeset, clearCaches is called which immediately drops the cached schema view.\r\n const ctxAfterPull = await bc2.getSchemaView();\r\n expect(ctxBefore.isOutdated).to.be.true;\r\n const testClass = ctxAfterPull.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(testClass).to.not.be.undefined;\r\n\r\n // bc1: import v2 + push\r\n await bc1.importSchemaStrings([testSchemaV2]);\r\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v2\" });\r\n\r\n // bc2: pull again\r\n await bc2.pullChanges();\r\n const ctxAfterPull2 = await bc2.getSchemaView();\r\n expect(ctxAfterPull.isOutdated).to.be.true;\r\n const updated = ctxAfterPull2.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(updated).to.not.be.undefined;\r\n expect(updated!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\r\n\r\n bc1.close();\r\n bc2.close();\r\n });\r\n\r\n it(\"concurrent getSchemaView calls share a single hydration\", async () => {\r\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Fire multiple concurrent getSchemaView calls - they should all resolve to the same context\r\n const [ctx1, ctx2, ctx3] = await Promise.all([\r\n bc.getSchemaView(),\r\n bc.getSchemaView(),\r\n bc.getSchemaView(),\r\n ]);\r\n\r\n expect(ctx1).to.equal(ctx2);\r\n expect(ctx2).to.equal(ctx3);\r\n expect(ctx1.isOutdated).to.be.false;\r\n\r\n bc.close();\r\n });\r\n});\r\n"]}
@@ -313,11 +313,11 @@ describe("SchemaView cross-validation", () => {
313
313
  // Build a set of property IDs that have CoreCustomAttributes:HiddenProperty CA
314
314
  // (without Show=True override), mirroring the C++ writer's CollectHiddenPropertyIds.
315
315
  const hiddenPropertyIds = new Set();
316
- iModel.withSqliteStatement(`SELECT ca.ContainerId, ca.Instance
317
- FROM ec_CustomAttribute ca
318
- JOIN ec_Class cac ON ca.ClassId=cac.Id
319
- JOIN ec_Schema cas ON cac.SchemaId=cas.Id
320
- WHERE ca.ContainerType & 992 <> 0
316
+ iModel.withSqliteStatement(`SELECT ca.ContainerId, ca.Instance
317
+ FROM ec_CustomAttribute ca
318
+ JOIN ec_Class cac ON ca.ClassId=cac.Id
319
+ JOIN ec_Schema cas ON cac.SchemaId=cas.Id
320
+ WHERE ca.ContainerType & 992 <> 0
321
321
  AND cas.Name='CoreCustomAttributes' AND cac.Name='HiddenProperty'`, (stmt) => {
322
322
  while (stmt.step() === DbResult.BE_SQLITE_ROW) {
323
323
  const instance = stmt.getValueString(1) ?? "";
@@ -332,9 +332,9 @@ describe("SchemaView cross-validation", () => {
332
332
  // Build a map of property ID -> (schemaName, className, propertyName) from ec_ tables
333
333
  // so we can correlate ec_ property IDs to SchemaView properties.
334
334
  const propIdMap = new Map();
335
- iModel.withSqliteStatement(`SELECT p.Id, s.Name, c.Name, p.Name
336
- FROM ec_Property p
337
- JOIN ec_Class c ON p.ClassId=c.Id
335
+ iModel.withSqliteStatement(`SELECT p.Id, s.Name, c.Name, p.Name
336
+ FROM ec_Property p
337
+ JOIN ec_Class c ON p.ClassId=c.Id
338
338
  JOIN ec_Schema s ON c.SchemaId=s.Id`, (stmt) => {
339
339
  while (stmt.step() === DbResult.BE_SQLITE_ROW) {
340
340
  propIdMap.set(stmt.getValueInteger(0), {