@itwin/core-backend 5.12.0-dev.1 → 5.12.0-dev.11

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 (566) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +1 -1
  3. package/lib/cjs/BackendHubAccess.js +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  6. package/lib/cjs/BisCoreSchema.js.map +1 -1
  7. package/lib/cjs/BlobContainerService.js.map +1 -1
  8. package/lib/cjs/BriefcaseManager.js.map +1 -1
  9. package/lib/cjs/CatalogDb.js.map +1 -1
  10. package/lib/cjs/Category.js.map +1 -1
  11. package/lib/cjs/ChangeSummaryManager.d.ts.map +1 -1
  12. package/lib/cjs/ChangeSummaryManager.js +34 -38
  13. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  14. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  15. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  16. package/lib/cjs/ChangesetECAdaptor.js +252 -255
  17. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  18. package/lib/cjs/ChangesetReader.d.ts +65 -23
  19. package/lib/cjs/ChangesetReader.d.ts.map +1 -1
  20. package/lib/cjs/ChangesetReader.js +165 -105
  21. package/lib/cjs/ChangesetReader.js.map +1 -1
  22. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  23. package/lib/cjs/ChannelControl.js.map +1 -1
  24. package/lib/cjs/CheckpointManager.js.map +1 -1
  25. package/lib/cjs/ClassRegistry.d.ts +1 -1
  26. package/lib/cjs/ClassRegistry.js +6 -6
  27. package/lib/cjs/ClassRegistry.js.map +1 -1
  28. package/lib/cjs/CloudSqlite.js.map +1 -1
  29. package/lib/cjs/CodeService.js.map +1 -1
  30. package/lib/cjs/CodeSpecs.js.map +1 -1
  31. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  32. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  33. package/lib/cjs/DevTools.js.map +1 -1
  34. package/lib/cjs/DisplayStyle.js.map +1 -1
  35. package/lib/cjs/ECDb.d.ts +4 -4
  36. package/lib/cjs/ECDb.d.ts.map +1 -1
  37. package/lib/cjs/ECDb.js +6 -6
  38. package/lib/cjs/ECDb.js.map +1 -1
  39. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  40. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  41. package/lib/cjs/ECSqlStatement.d.ts +6 -6
  42. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  43. package/lib/cjs/ECSqlStatement.js +4 -4
  44. package/lib/cjs/ECSqlStatement.js.map +1 -1
  45. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  46. package/lib/cjs/EditTxn.js.map +1 -1
  47. package/lib/cjs/Element.d.ts +1 -1
  48. package/lib/cjs/Element.js +1 -1
  49. package/lib/cjs/Element.js.map +1 -1
  50. package/lib/cjs/ElementAspect.d.ts +1 -1
  51. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  52. package/lib/cjs/ElementAspect.js +7 -11
  53. package/lib/cjs/ElementAspect.js.map +1 -1
  54. package/lib/cjs/ElementGraphics.js.map +1 -1
  55. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  56. package/lib/cjs/ElementTreeWalker.js +16 -24
  57. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  58. package/lib/cjs/Entity.d.ts +1 -1
  59. package/lib/cjs/Entity.js +1 -1
  60. package/lib/cjs/Entity.js.map +1 -1
  61. package/lib/cjs/EntityReferences.js.map +1 -1
  62. package/lib/cjs/ExportGraphics.js.map +1 -1
  63. package/lib/cjs/ExternalSource.js.map +1 -1
  64. package/lib/cjs/FontFile.js.map +1 -1
  65. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  66. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  67. package/lib/cjs/GeometrySummary.js +47 -47
  68. package/lib/cjs/GeometrySummary.js.map +1 -1
  69. package/lib/cjs/IModelDb.d.ts +14 -14
  70. package/lib/cjs/IModelDb.d.ts.map +1 -1
  71. package/lib/cjs/IModelDb.js +89 -103
  72. package/lib/cjs/IModelDb.js.map +1 -1
  73. package/lib/cjs/IModelDbFonts.js.map +1 -1
  74. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  75. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  76. package/lib/cjs/IModelElementCloneContext.js +1 -1
  77. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  78. package/lib/cjs/IModelHost.d.ts +2 -2
  79. package/lib/cjs/IModelHost.js +2 -2
  80. package/lib/cjs/IModelHost.js.map +1 -1
  81. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  82. package/lib/cjs/IModelJsFs.js.map +1 -1
  83. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  84. package/lib/cjs/IpcHost.js.map +1 -1
  85. package/lib/cjs/LineStyle.js.map +1 -1
  86. package/lib/cjs/LocalHub.js +1 -1
  87. package/lib/cjs/LocalHub.js.map +1 -1
  88. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  89. package/lib/cjs/LockControl.js.map +1 -1
  90. package/lib/cjs/Material.js.map +1 -1
  91. package/lib/cjs/Model.js.map +1 -1
  92. package/lib/cjs/NativeAppStorage.js.map +1 -1
  93. package/lib/cjs/NativeHost.js.map +1 -1
  94. package/lib/cjs/NavigationRelationship.js.map +1 -1
  95. package/lib/cjs/PartialChangeUnifier.js +7 -7
  96. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  97. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  98. package/lib/cjs/PropertyStore.js.map +1 -1
  99. package/lib/cjs/Relationship.d.ts.map +1 -1
  100. package/lib/cjs/Relationship.js +15 -12
  101. package/lib/cjs/Relationship.js.map +1 -1
  102. package/lib/cjs/RpcBackend.js.map +1 -1
  103. package/lib/cjs/SQLiteDb.d.ts +1 -1
  104. package/lib/cjs/SQLiteDb.js +1 -1
  105. package/lib/cjs/SQLiteDb.js.map +1 -1
  106. package/lib/cjs/Schema.js.map +1 -1
  107. package/lib/cjs/SchemaSync.js.map +1 -1
  108. package/lib/cjs/SchemaUtils.js.map +1 -1
  109. package/lib/cjs/SheetIndex.js.map +1 -1
  110. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  111. package/lib/cjs/SqliteStatement.d.ts +1 -1
  112. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  113. package/lib/cjs/SqliteStatement.js +1 -1
  114. package/lib/cjs/SqliteStatement.js.map +1 -1
  115. package/lib/cjs/StashManager.js.map +1 -1
  116. package/lib/cjs/Texture.js.map +1 -1
  117. package/lib/cjs/TileStorage.js.map +1 -1
  118. package/lib/cjs/TxnManager.js.map +1 -1
  119. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  120. package/lib/cjs/ViewDefinition.js +8 -12
  121. package/lib/cjs/ViewDefinition.js.map +1 -1
  122. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  123. package/lib/cjs/ViewStore.d.ts.map +1 -1
  124. package/lib/cjs/ViewStore.js +6 -8
  125. package/lib/cjs/ViewStore.js.map +1 -1
  126. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  127. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +8 -11
  128. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  129. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  130. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  131. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  132. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  133. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  134. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  135. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  136. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
  137. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
  138. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  139. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  140. package/lib/cjs/core-backend.js.map +1 -1
  141. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  142. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  143. package/lib/cjs/domains/GenericElements.js.map +1 -1
  144. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  145. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  146. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  147. package/lib/cjs/internal/ChannelAdmin.js +6 -10
  148. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  149. package/lib/cjs/internal/ECSqlInstanceReshaper.d.ts +23 -0
  150. package/lib/cjs/internal/ECSqlInstanceReshaper.d.ts.map +1 -0
  151. package/lib/cjs/internal/ECSqlInstanceReshaper.js +125 -0
  152. package/lib/cjs/internal/ECSqlInstanceReshaper.js.map +1 -0
  153. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  154. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  155. package/lib/cjs/internal/HubMock.js.map +1 -1
  156. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  157. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  158. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  159. package/lib/cjs/internal/NoLocks.js.map +1 -1
  160. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  161. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  162. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  163. package/lib/cjs/internal/Symbols.js.map +1 -1
  164. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  165. package/lib/cjs/internal/annotations/fields.js +24 -43
  166. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  167. package/lib/cjs/internal/cross-package.js.map +1 -1
  168. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  169. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  170. package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
  171. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +8 -7
  172. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  173. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  174. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  175. package/lib/cjs/rpc/multipart.js.map +1 -1
  176. package/lib/cjs/rpc/tracing.js.map +1 -1
  177. package/lib/cjs/rpc/web/logging.js.map +1 -1
  178. package/lib/cjs/rpc/web/request.js.map +1 -1
  179. package/lib/cjs/rpc/web/response.js.map +1 -1
  180. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  181. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  182. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +2 -3
  183. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  184. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  185. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  186. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  187. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  188. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  189. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  190. package/lib/cjs/workspace/Settings.js.map +1 -1
  191. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  192. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  193. package/lib/cjs/workspace/SettingsSchemas.d.ts +28 -2
  194. package/lib/cjs/workspace/SettingsSchemas.d.ts.map +1 -1
  195. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  196. package/lib/cjs/workspace/Workspace.js.map +1 -1
  197. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  198. package/lib/esm/BackendHubAccess.d.ts +1 -1
  199. package/lib/esm/BackendHubAccess.js +1 -1
  200. package/lib/esm/BackendHubAccess.js.map +1 -1
  201. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  202. package/lib/esm/BisCoreSchema.js.map +1 -1
  203. package/lib/esm/BlobContainerService.js.map +1 -1
  204. package/lib/esm/BriefcaseManager.js.map +1 -1
  205. package/lib/esm/CatalogDb.js.map +1 -1
  206. package/lib/esm/Category.js.map +1 -1
  207. package/lib/esm/ChangeSummaryManager.d.ts.map +1 -1
  208. package/lib/esm/ChangeSummaryManager.js +35 -39
  209. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  210. package/lib/esm/ChangedElementsDb.js.map +1 -1
  211. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  212. package/lib/esm/ChangesetECAdaptor.js +253 -256
  213. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  214. package/lib/esm/ChangesetReader.d.ts +65 -23
  215. package/lib/esm/ChangesetReader.d.ts.map +1 -1
  216. package/lib/esm/ChangesetReader.js +166 -106
  217. package/lib/esm/ChangesetReader.js.map +1 -1
  218. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  219. package/lib/esm/ChannelControl.js.map +1 -1
  220. package/lib/esm/CheckpointManager.js.map +1 -1
  221. package/lib/esm/ClassRegistry.d.ts +1 -1
  222. package/lib/esm/ClassRegistry.js +6 -6
  223. package/lib/esm/ClassRegistry.js.map +1 -1
  224. package/lib/esm/CloudSqlite.js.map +1 -1
  225. package/lib/esm/CodeService.js.map +1 -1
  226. package/lib/esm/CodeSpecs.js.map +1 -1
  227. package/lib/esm/ConcurrentQuery.js.map +1 -1
  228. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  229. package/lib/esm/DevTools.js.map +1 -1
  230. package/lib/esm/DisplayStyle.js.map +1 -1
  231. package/lib/esm/ECDb.d.ts +4 -4
  232. package/lib/esm/ECDb.d.ts.map +1 -1
  233. package/lib/esm/ECDb.js +6 -6
  234. package/lib/esm/ECDb.js.map +1 -1
  235. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  236. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  237. package/lib/esm/ECSqlStatement.d.ts +6 -6
  238. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  239. package/lib/esm/ECSqlStatement.js +4 -4
  240. package/lib/esm/ECSqlStatement.js.map +1 -1
  241. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  242. package/lib/esm/EditTxn.js.map +1 -1
  243. package/lib/esm/Element.d.ts +1 -1
  244. package/lib/esm/Element.js +1 -1
  245. package/lib/esm/Element.js.map +1 -1
  246. package/lib/esm/ElementAspect.d.ts +1 -1
  247. package/lib/esm/ElementAspect.d.ts.map +1 -1
  248. package/lib/esm/ElementAspect.js +9 -13
  249. package/lib/esm/ElementAspect.js.map +1 -1
  250. package/lib/esm/ElementGraphics.js.map +1 -1
  251. package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
  252. package/lib/esm/ElementTreeWalker.js +18 -26
  253. package/lib/esm/ElementTreeWalker.js.map +1 -1
  254. package/lib/esm/Entity.d.ts +1 -1
  255. package/lib/esm/Entity.js +1 -1
  256. package/lib/esm/Entity.js.map +1 -1
  257. package/lib/esm/EntityReferences.js.map +1 -1
  258. package/lib/esm/ExportGraphics.js.map +1 -1
  259. package/lib/esm/ExternalSource.js.map +1 -1
  260. package/lib/esm/FontFile.js.map +1 -1
  261. package/lib/esm/GeoCoordConfig.js.map +1 -1
  262. package/lib/esm/GeographicCRSServices.js.map +1 -1
  263. package/lib/esm/GeometrySummary.js +47 -47
  264. package/lib/esm/GeometrySummary.js.map +1 -1
  265. package/lib/esm/IModelDb.d.ts +14 -14
  266. package/lib/esm/IModelDb.d.ts.map +1 -1
  267. package/lib/esm/IModelDb.js +90 -104
  268. package/lib/esm/IModelDb.js.map +1 -1
  269. package/lib/esm/IModelDbFonts.js.map +1 -1
  270. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  271. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  272. package/lib/esm/IModelElementCloneContext.js +1 -1
  273. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  274. package/lib/esm/IModelHost.d.ts +2 -2
  275. package/lib/esm/IModelHost.js +2 -2
  276. package/lib/esm/IModelHost.js.map +1 -1
  277. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  278. package/lib/esm/IModelJsFs.js.map +1 -1
  279. package/lib/esm/ImageSourceConversion.js.map +1 -1
  280. package/lib/esm/IpcHost.js.map +1 -1
  281. package/lib/esm/LineStyle.js.map +1 -1
  282. package/lib/esm/LocalHub.js +1 -1
  283. package/lib/esm/LocalHub.js.map +1 -1
  284. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  285. package/lib/esm/LockControl.js.map +1 -1
  286. package/lib/esm/Material.js.map +1 -1
  287. package/lib/esm/Model.js.map +1 -1
  288. package/lib/esm/NativeAppStorage.js.map +1 -1
  289. package/lib/esm/NativeHost.js.map +1 -1
  290. package/lib/esm/NavigationRelationship.js.map +1 -1
  291. package/lib/esm/PartialChangeUnifier.js +7 -7
  292. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  293. package/lib/esm/PromiseMemoizer.js.map +1 -1
  294. package/lib/esm/PropertyStore.js.map +1 -1
  295. package/lib/esm/Relationship.d.ts.map +1 -1
  296. package/lib/esm/Relationship.js +16 -13
  297. package/lib/esm/Relationship.js.map +1 -1
  298. package/lib/esm/RpcBackend.js.map +1 -1
  299. package/lib/esm/SQLiteDb.d.ts +1 -1
  300. package/lib/esm/SQLiteDb.js +1 -1
  301. package/lib/esm/SQLiteDb.js.map +1 -1
  302. package/lib/esm/Schema.js.map +1 -1
  303. package/lib/esm/SchemaSync.js.map +1 -1
  304. package/lib/esm/SchemaUtils.js.map +1 -1
  305. package/lib/esm/SheetIndex.js.map +1 -1
  306. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  307. package/lib/esm/SqliteStatement.d.ts +1 -1
  308. package/lib/esm/SqliteStatement.d.ts.map +1 -1
  309. package/lib/esm/SqliteStatement.js +1 -1
  310. package/lib/esm/SqliteStatement.js.map +1 -1
  311. package/lib/esm/StashManager.js.map +1 -1
  312. package/lib/esm/Texture.js.map +1 -1
  313. package/lib/esm/TileStorage.js.map +1 -1
  314. package/lib/esm/TxnManager.js.map +1 -1
  315. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  316. package/lib/esm/ViewDefinition.js +10 -14
  317. package/lib/esm/ViewDefinition.js.map +1 -1
  318. package/lib/esm/ViewStateHydrator.js.map +1 -1
  319. package/lib/esm/ViewStore.d.ts.map +1 -1
  320. package/lib/esm/ViewStore.js +7 -9
  321. package/lib/esm/ViewStore.js.map +1 -1
  322. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  323. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +10 -13
  324. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  325. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  326. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  327. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  328. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  329. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  330. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  331. package/lib/esm/core-backend.js.map +1 -1
  332. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  333. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  334. package/lib/esm/domains/GenericElements.js.map +1 -1
  335. package/lib/esm/domains/GenericSchema.js.map +1 -1
  336. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  337. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  338. package/lib/esm/internal/ChannelAdmin.js +7 -11
  339. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  340. package/lib/esm/internal/ECSqlInstanceReshaper.d.ts +23 -0
  341. package/lib/esm/internal/ECSqlInstanceReshaper.d.ts.map +1 -0
  342. package/lib/esm/internal/ECSqlInstanceReshaper.js +120 -0
  343. package/lib/esm/internal/ECSqlInstanceReshaper.js.map +1 -0
  344. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  345. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  346. package/lib/esm/internal/HubMock.js.map +1 -1
  347. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  348. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  349. package/lib/esm/internal/NativePlatform.js.map +1 -1
  350. package/lib/esm/internal/NoLocks.js.map +1 -1
  351. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  352. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  353. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  354. package/lib/esm/internal/Symbols.js.map +1 -1
  355. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  356. package/lib/esm/internal/annotations/fields.js +26 -45
  357. package/lib/esm/internal/annotations/fields.js.map +1 -1
  358. package/lib/esm/internal/cross-package.js.map +1 -1
  359. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  360. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  361. package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
  362. package/lib/esm/internal/workspace/SettingsSchemasImpl.js +8 -7
  363. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  364. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  365. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  366. package/lib/esm/rpc/multipart.js.map +1 -1
  367. package/lib/esm/rpc/tracing.js.map +1 -1
  368. package/lib/esm/rpc/web/logging.js.map +1 -1
  369. package/lib/esm/rpc/web/request.js.map +1 -1
  370. package/lib/esm/rpc/web/response.js.map +1 -1
  371. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  372. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  373. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +2 -3
  374. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  375. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  376. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  377. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  378. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  379. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  380. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  381. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  382. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  383. package/lib/esm/test/AttachDb.test.js +11 -11
  384. package/lib/esm/test/AttachDb.test.js.map +1 -1
  385. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  386. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  387. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  388. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  389. package/lib/esm/test/IModelHost.test.js.map +1 -1
  390. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  391. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  392. package/lib/esm/test/IpcHost.test.js.map +1 -1
  393. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  394. package/lib/esm/test/PrintElementTree.js.map +1 -1
  395. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  396. package/lib/esm/test/RevisionUtility.js.map +1 -1
  397. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  398. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  399. package/lib/esm/test/SchemaUtils.test.js +25 -25
  400. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  401. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  402. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  403. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  404. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  405. package/lib/esm/test/TestEditTxn.js.map +1 -1
  406. package/lib/esm/test/TestUtils.d.ts +1 -1
  407. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  408. package/lib/esm/test/TestUtils.js +1 -1
  409. package/lib/esm/test/TestUtils.js.map +1 -1
  410. package/lib/esm/test/annotations/Fields.test.js +53 -53
  411. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  412. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  413. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  414. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  415. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  416. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  417. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  418. package/lib/esm/test/categories/Category.test.js.map +1 -1
  419. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  420. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  421. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  422. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  423. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  424. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  425. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  426. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  427. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  428. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  429. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  430. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  431. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  432. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  433. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  434. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  435. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  436. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  437. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  438. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  439. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  440. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  441. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  442. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  443. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  444. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  445. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  446. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  447. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  448. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  449. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  450. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  451. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  452. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  453. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  454. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  455. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  456. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  457. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  458. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  459. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  460. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  461. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  462. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +1 -1
  463. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  464. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  465. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  466. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  467. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  468. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  469. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  470. package/lib/esm/test/imageData.js.map +1 -1
  471. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  472. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  473. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  474. package/lib/esm/test/imodel/IModel.test.js +53 -47
  475. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  476. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  477. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  478. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  479. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  480. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  481. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  482. package/lib/esm/test/index.js.map +1 -1
  483. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.d.ts +2 -0
  484. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.d.ts.map +1 -0
  485. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js +289 -0
  486. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js.map +1 -0
  487. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  488. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  489. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  490. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  491. package/lib/esm/test/rpc/response.test.js.map +1 -1
  492. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  493. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  494. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  495. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  496. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  497. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  498. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  499. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  500. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  501. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  502. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  503. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  504. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
  505. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  506. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  507. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  508. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  509. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  510. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  511. package/lib/esm/test/standalone/ChangesetReader.test.js +1021 -406
  512. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  513. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  514. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  515. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  516. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  517. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  518. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  519. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  520. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  521. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  522. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  523. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  524. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  525. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  526. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  527. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  528. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  529. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  530. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  531. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  532. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  533. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  534. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  535. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  536. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  537. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  538. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  539. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  540. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  541. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  542. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  543. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  544. package/lib/esm/test/standalone/SettingsSchemas.test.js +6 -0
  545. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  546. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  547. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  548. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  549. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  550. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  551. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  552. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  553. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  554. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  555. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  556. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  557. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  558. package/lib/esm/workspace/Settings.js.map +1 -1
  559. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  560. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  561. package/lib/esm/workspace/SettingsSchemas.d.ts +28 -2
  562. package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -1
  563. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  564. package/lib/esm/workspace/Workspace.js.map +1 -1
  565. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  566. package/package.json +13 -13
@@ -0,0 +1,289 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { assert, expect } from "chai";
6
+ import { Id64 } from "@itwin/core-bentley";
7
+ import { Code, IModel, QueryBinder, QueryRowFormat } from "@itwin/core-common";
8
+ import { withEditTxn } from "../../EditTxn";
9
+ import { getRuntimeClass, reshapeInstanceRow, reshapePropertyValue } from "../../internal/ECSqlInstanceReshaper";
10
+ import { IModelJsFs, SnapshotDb } from "../../core-backend";
11
+ import { IModelTestUtils } from "../IModelTestUtils";
12
+ /* eslint-disable @typescript-eslint/naming-convention */
13
+ // Direct unit tests for the ECSqlInstanceReshaper helper, which reshapes rows/values queried with the
14
+ // non-deprecated QueryRowFormat.UseECSqlPropertyNames row format back into the legacy shape historically
15
+ // produced by the deprecated QueryRowFormat.UseJsPropertyNames row format. These call the helper's exported
16
+ // functions directly against real ECSQL rows, rather than only exercising them indirectly through
17
+ // ElementAspect/Relationship/annotation field call sites (which are covered elsewhere).
18
+ describe("ECSqlInstanceReshaper", () => {
19
+ const schemaName = "ReshaperTest";
20
+ const schemaAlias = "rst";
21
+ const subDirName = "ECSqlInstanceReshaper";
22
+ let iModel;
23
+ let element1Id;
24
+ let element2Id;
25
+ let aspectId;
26
+ let relationshipId;
27
+ before(async () => {
28
+ const schema = `<?xml version="1.0" encoding="UTF-8"?>
29
+ <ECSchema schemaName="${schemaName}" alias="${schemaAlias}" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
30
+ <ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
31
+ <ECStructClass typeName="PointStruct" modifier="None">
32
+ <ECProperty propertyName="Label" typeName="string"/>
33
+ <ECProperty propertyName="P3d" typeName="point3d"/>
34
+ </ECStructClass>
35
+ <ECEntityClass typeName="ReshaperElement" modifier="None">
36
+ <BaseClass>bis:DefinitionElement</BaseClass>
37
+ </ECEntityClass>
38
+ <ECEntityClass typeName="ReshaperAspect" modifier="None">
39
+ <BaseClass>bis:ElementUniqueAspect</BaseClass>
40
+ <ECProperty propertyName="P2d" typeName="point2d"/>
41
+ <ECProperty propertyName="P3d" typeName="point3d"/>
42
+ <ECStructProperty propertyName="St" typeName="PointStruct"/>
43
+ <ECArrayProperty propertyName="ArrayI" typeName="int" minOccurs="0" maxOccurs="unbounded"/>
44
+ <ECArrayProperty propertyName="ArrayP3d" typeName="point3d" minOccurs="0" maxOccurs="unbounded"/>
45
+ <ECStructArrayProperty propertyName="ArraySt" typeName="PointStruct" minOccurs="0" maxOccurs="unbounded"/>
46
+ </ECEntityClass>
47
+ <ECRelationshipClass typeName="ReshaperRelatesToElement" strength="referencing" modifier="Sealed">
48
+ <BaseClass>bis:ElementRefersToElements</BaseClass>
49
+ <Source multiplicity="(0..*)" roleLabel="refers to" polymorphic="true">
50
+ <Class class="ReshaperElement"/>
51
+ </Source>
52
+ <Target multiplicity="(0..*)" roleLabel="is referenced by" polymorphic="true">
53
+ <Class class="ReshaperElement"/>
54
+ </Target>
55
+ <ECProperty propertyName="Label" typeName="string"/>
56
+ </ECRelationshipClass>
57
+ <ECEnumeration typeName="ReshaperNotAClass" backingTypeName="int" isStrict="true">
58
+ <ECEnumerator name="Value0" value="0"/>
59
+ </ECEnumeration>
60
+ </ECSchema>`;
61
+ const testFileName = IModelTestUtils.prepareOutputFile(subDirName, "ECSqlInstanceReshaper.bim");
62
+ const schemaPath = IModelTestUtils.prepareOutputFile(subDirName, `${schemaName}.01.00.00.xml`);
63
+ IModelJsFs.writeFileSync(schemaPath, schema);
64
+ iModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: "ECSqlInstanceReshaperTest" } });
65
+ await iModel.importSchemas([schemaPath]);
66
+ withEditTxn(iModel, (txn) => {
67
+ element1Id = txn.insertElement({
68
+ classFullName: `${schemaName}:ReshaperElement`,
69
+ model: IModel.dictionaryId,
70
+ code: Code.createEmpty(),
71
+ });
72
+ element2Id = txn.insertElement({
73
+ classFullName: `${schemaName}:ReshaperElement`,
74
+ model: IModel.dictionaryId,
75
+ code: Code.createEmpty(),
76
+ });
77
+ assert.isTrue(Id64.isValidId64(element1Id));
78
+ assert.isTrue(Id64.isValidId64(element2Id));
79
+ aspectId = txn.insertAspect({
80
+ classFullName: `${schemaName}:ReshaperAspect`,
81
+ element: { id: element1Id },
82
+ p2d: { x: 100, y: 200 },
83
+ p3d: { x: 1, y: 2, z: 3 },
84
+ st: { label: "struct-label", p3d: { x: 4, y: 5, z: 6 } },
85
+ arrayI: [10, 20, 30],
86
+ arrayP3d: [{ x: 13, y: 14, z: 15 }, { x: 16, y: 17, z: 18 }],
87
+ arraySt: [{ label: "arr-0", p3d: { x: 7, y: 8, z: 9 } }, { label: "arr-1", p3d: { x: 10, y: 11, z: 12 } }],
88
+ });
89
+ assert.isTrue(Id64.isValidId64(aspectId));
90
+ relationshipId = txn.insertRelationship({
91
+ classFullName: `${schemaName}:ReshaperRelatesToElement`,
92
+ sourceId: element1Id,
93
+ targetId: element2Id,
94
+ label: "rel-label",
95
+ });
96
+ assert.isTrue(Id64.isValidId64(relationshipId));
97
+ });
98
+ });
99
+ after(() => {
100
+ iModel.close();
101
+ });
102
+ it("getRuntimeClass resolves a runtime class by full class name and throws for unknown classes", () => {
103
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
104
+ assert.equal(ecClass.name, "ReshaperAspect");
105
+ assert.equal(ecClass.schema.name, schemaName);
106
+ assert.throws(() => getRuntimeClass(iModel, `${schemaName}:DoesNotExist`), /Class not found/);
107
+ });
108
+ it("getRuntimeClass throws when the resolved schema item exists but isn't a class", () => {
109
+ assert.throws(() => getRuntimeClass(iModel, `${schemaName}:ReshaperNotAClass`), /Class not found/);
110
+ });
111
+ it("reshapeInstanceRow reshapes an ElementAspect row: system properties, points, struct, primitive array, point array, and struct array", () => {
112
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
113
+ const row = iModel.withQueryReader(`SELECT * FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:aspectId`, (reader) => {
114
+ assert.isTrue(reader.step());
115
+ return reader.current.toRow();
116
+ }, new QueryBinder().bindId("aspectId", aspectId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });
117
+ const reshaped = reshapeInstanceRow(row, ecClass, iModel);
118
+ // system properties: ECInstanceId -> id, ECClassId -> className (dot-separated)
119
+ assert.equal(reshaped.id, aspectId);
120
+ assert.equal(reshaped.className, `${schemaName}.ReshaperAspect`);
121
+ // inherited navigation property from ElementUniqueAspect
122
+ assert.deepEqual(reshaped.element, { id: element1Id, relClassName: "BisCore.ElementOwnsUniqueAspect" });
123
+ // point2d property: first letter lowercased, X/Y -> x/y
124
+ assert.deepEqual(reshaped.p2d, { x: 100, y: 200 });
125
+ // point3d property: first letter lowercased, X/Y/Z -> x/y/z
126
+ assert.deepEqual(reshaped.p3d, { x: 1, y: 2, z: 3 });
127
+ // struct property: first letter lowercased, and its members recursively reshaped (including nested point)
128
+ assert.deepEqual(reshaped.st, { label: "struct-label", p3d: { x: 4, y: 5, z: 6 } });
129
+ // primitive (non-point) array: values pass through unchanged, only the key is lowercased
130
+ assert.deepEqual(reshaped.arrayI, [10, 20, 30]);
131
+ // point3d array: each scalar element reshaped like a standalone point, not just key-renamed
132
+ assert.deepEqual(reshaped.arrayP3d, [{ x: 13, y: 14, z: 15 }, { x: 16, y: 17, z: 18 }]);
133
+ // struct array: each element recursively reshaped like a standalone struct
134
+ assert.deepEqual(reshaped.arraySt, [
135
+ { label: "arr-0", p3d: { x: 7, y: 8, z: 9 } },
136
+ { label: "arr-1", p3d: { x: 10, y: 11, z: 12 } },
137
+ ]);
138
+ });
139
+ it("reshapeInstanceRow reshapes a Relationship row: source/target system properties and a primitive property", () => {
140
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperRelatesToElement`);
141
+ const row = iModel.withQueryReader(`SELECT * FROM ${schemaAlias}.ReshaperRelatesToElement WHERE ECInstanceId=:relationshipId`, (reader) => {
142
+ assert.isTrue(reader.step());
143
+ return reader.current.toRow();
144
+ }, new QueryBinder().bindId("relationshipId", relationshipId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });
145
+ const reshaped = reshapeInstanceRow(row, ecClass, iModel);
146
+ assert.equal(reshaped.id, relationshipId);
147
+ assert.equal(reshaped.className, `${schemaName}.ReshaperRelatesToElement`);
148
+ assert.equal(reshaped.sourceId, element1Id);
149
+ assert.equal(reshaped.sourceClassName, `${schemaName}.ReshaperElement`);
150
+ assert.equal(reshaped.targetId, element2Id);
151
+ assert.equal(reshaped.targetClassName, `${schemaName}.ReshaperElement`);
152
+ assert.equal(reshaped.label, "rel-label");
153
+ });
154
+ it("reshapeInstanceRow omits null/undefined members instead of propagating them", () => {
155
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
156
+ const row = { ECInstanceId: aspectId, P3d: null, St: undefined, ArrayI: [10, 20, 30] };
157
+ const reshaped = reshapeInstanceRow(row, ecClass, iModel);
158
+ assert.equal(reshaped.id, aspectId);
159
+ assert.isUndefined(reshaped.p3d);
160
+ assert.isUndefined(reshaped.st);
161
+ assert.deepEqual(reshaped.arrayI, [10, 20, 30]);
162
+ });
163
+ it("reshapePropertyValue reshapes a single Point2d, Point3d, and struct property value in isolation", () => {
164
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
165
+ const p2dProp = ecClass.getPropertySync("P2d");
166
+ const p3dProp = ecClass.getPropertySync("P3d");
167
+ const stProp = ecClass.getPropertySync("St");
168
+ assert.exists(p2dProp);
169
+ assert.exists(p3dProp);
170
+ assert.exists(stProp);
171
+ assert.deepEqual(reshapePropertyValue({ X: 100, Y: 200 }, p2dProp, iModel), { x: 100, y: 200 });
172
+ assert.deepEqual(reshapePropertyValue({ X: 1, Y: 2, Z: 3 }, p3dProp, iModel), { x: 1, y: 2, z: 3 });
173
+ assert.deepEqual(reshapePropertyValue({ Label: "hello", P3d: { X: 1, Y: 2, Z: 3 } }, stProp, iModel), { label: "hello", p3d: { x: 1, y: 2, z: 3 } });
174
+ });
175
+ it("reshapePropertyValue reshapes an array of Point3d scalars, not just a key rename", () => {
176
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
177
+ const arrayP3dProp = ecClass.getPropertySync("ArrayP3d");
178
+ assert.exists(arrayP3dProp);
179
+ assert.isTrue(arrayP3dProp.isArray());
180
+ const reshaped = reshapePropertyValue([{ X: 13, Y: 14, Z: 15 }, { X: 16, Y: 17, Z: 18 }], arrayP3dProp, iModel);
181
+ assert.deepEqual(reshaped, [{ x: 13, y: 14, z: 15 }, { x: 16, y: 17, z: 18 }]);
182
+ });
183
+ it("reshapePropertyValue reshapes a navigation property value into {id, relClassName}", () => {
184
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
185
+ const elementProp = ecClass.getPropertySync("Element");
186
+ assert.exists(elementProp);
187
+ assert.isTrue(elementProp.isNavigation());
188
+ const row = iModel.withQueryReader(`SELECT Element FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:aspectId`, (reader) => {
189
+ assert.isTrue(reader.step());
190
+ return reader.current.toRow();
191
+ }, new QueryBinder().bindId("aspectId", aspectId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });
192
+ const reshaped = reshapePropertyValue(row.Element, elementProp, iModel);
193
+ expect(reshaped).to.deep.equal({ id: element1Id, relClassName: "BisCore.ElementOwnsUniqueAspect" });
194
+ });
195
+ it("reshapePropertyValue falls back to the raw classId instead of throwing when a navigation property's relationship class can't be resolved", () => {
196
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
197
+ const elementProp = ecClass.getPropertySync("Element");
198
+ assert.exists(elementProp);
199
+ const unresolvableClassId = "0xdeadbeef";
200
+ const reshaped = reshapePropertyValue({ Id: element1Id, RelECClassId: unresolvableClassId }, elementProp, iModel);
201
+ assert.deepEqual(reshaped, { id: element1Id, relClassName: unresolvableClassId });
202
+ });
203
+ it("reshapePropertyValue omits relClassName entirely when a navigation property's relationship class Id is unset", () => {
204
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
205
+ const elementProp = ecClass.getPropertySync("Element");
206
+ assert.exists(elementProp);
207
+ const reshaped = reshapePropertyValue({ Id: element1Id, RelECClassId: undefined }, elementProp, iModel);
208
+ assert.deepEqual(reshaped, { id: element1Id });
209
+ assert.isFalse("relClassName" in reshaped);
210
+ });
211
+ it("reshapeInstanceRow falls back to the raw classId instead of throwing when a system ECClassId column can't be resolved", () => {
212
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
213
+ const unresolvableClassId = "0xdeadbeef";
214
+ const reshaped = reshapeInstanceRow({ ECInstanceId: aspectId, ECClassId: unresolvableClassId }, ecClass, iModel);
215
+ assert.equal(reshaped.id, aspectId);
216
+ assert.equal(reshaped.className, unresolvableClassId);
217
+ });
218
+ it("reshapePropertyValue preserves a null/undefined struct-array element as an empty object, matching the native row adaptor", () => {
219
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
220
+ const arrayStProp = ecClass.getPropertySync("ArraySt");
221
+ assert.exists(arrayStProp);
222
+ // A null struct-array element is rendered by the native row adaptor as an empty object placeholder
223
+ // (unlike primitive arrays, where null elements are dropped entirely), preserving the array's length
224
+ // and the positions of surrounding elements. The underlying query reader already normalizes a null
225
+ // struct-array element to `{}` before it reaches the reshaper, but the reshaper is also exercised
226
+ // directly here against raw `null`/`undefined` inputs to keep it robust regardless of caller.
227
+ const reshaped = reshapePropertyValue([{ Label: "arr-0", P3d: { X: 1, Y: 2, Z: 3 } }, null, undefined, { Label: "arr-3", P3d: { X: 4, Y: 5, Z: 6 } }], arrayStProp, iModel);
228
+ assert.deepEqual(reshaped, [
229
+ { label: "arr-0", p3d: { x: 1, y: 2, z: 3 } },
230
+ {},
231
+ {},
232
+ { label: "arr-3", p3d: { x: 4, y: 5, z: 6 } },
233
+ ]);
234
+ });
235
+ it("reshapePropertyValue drops null/undefined elements from a primitive array, matching the native row adaptor", () => {
236
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
237
+ const arrayIProp = ecClass.getPropertySync("ArrayI");
238
+ assert.exists(arrayIProp);
239
+ const reshaped = reshapePropertyValue([10, null, undefined, 30], arrayIProp, iModel);
240
+ assert.deepEqual(reshaped, [10, 30]);
241
+ });
242
+ it("reshapeInstanceRow reshapes a row containing null array elements without throwing, matching the native row adaptor", () => {
243
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
244
+ let probeAspectId;
245
+ withEditTxn(iModel, (txn) => {
246
+ probeAspectId = txn.insertAspect({
247
+ classFullName: `${schemaName}:ReshaperAspect`,
248
+ element: { id: element1Id },
249
+ arrayI: [10, null, 30],
250
+ arraySt: [{ label: "a" }, null, { label: "c" }],
251
+ });
252
+ });
253
+ const row = iModel.withQueryReader(`SELECT * FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:id`, (reader) => {
254
+ assert.isTrue(reader.step());
255
+ return reader.current.toRow();
256
+ }, new QueryBinder().bindId("id", probeAspectId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });
257
+ const reshaped = reshapeInstanceRow(row, ecClass, iModel);
258
+ assert.deepEqual(reshaped.arrayI, [10, 30]);
259
+ assert.deepEqual(reshaped.arraySt, [{ label: "a" }, {}, { label: "c" }]);
260
+ });
261
+ it("reshapeInstanceRow omits a null struct member from a real queried row, matching the native row adaptor", () => {
262
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
263
+ let probeAspectId;
264
+ withEditTxn(iModel, (txn) => {
265
+ probeAspectId = txn.insertAspect({
266
+ classFullName: `${schemaName}:ReshaperAspect`,
267
+ element: { id: element1Id },
268
+ st: { label: null, p3d: { x: 1, y: 2, z: 3 } },
269
+ });
270
+ });
271
+ const row = iModel.withQueryReader(`SELECT * FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:id`, (reader) => {
272
+ assert.isTrue(reader.step());
273
+ return reader.current.toRow();
274
+ }, new QueryBinder().bindId("id", probeAspectId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });
275
+ const reshaped = reshapeInstanceRow(row, ecClass, iModel);
276
+ assert.isFalse("label" in reshaped.st);
277
+ assert.deepEqual(reshaped.st.p3d, { x: 1, y: 2, z: 3 });
278
+ });
279
+ it("reshapeInstanceRow passes through an aliased/computed column with only its key lowercased", () => {
280
+ const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);
281
+ const row = iModel.withQueryReader(`SELECT *, 1+1 AS Foo FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:aspectId`, (reader) => {
282
+ assert.isTrue(reader.step());
283
+ return reader.current.toRow();
284
+ }, new QueryBinder().bindId("aspectId", aspectId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });
285
+ const reshaped = reshapeInstanceRow(row, ecClass, iModel);
286
+ assert.equal(reshaped.foo, 2);
287
+ });
288
+ });
289
+ //# sourceMappingURL=ECSqlInstanceReshaper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ECSqlInstanceReshaper.test.js","sourceRoot":"","sources":["../../../../src/test/internal/ECSqlInstanceReshaper.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Code, IModel, QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { withEditTxn } from \"../../EditTxn\";\nimport { getRuntimeClass, reshapeInstanceRow, reshapePropertyValue } from \"../../internal/ECSqlInstanceReshaper\";\nimport { IModelJsFs, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\n// Direct unit tests for the ECSqlInstanceReshaper helper, which reshapes rows/values queried with the\n// non-deprecated QueryRowFormat.UseECSqlPropertyNames row format back into the legacy shape historically\n// produced by the deprecated QueryRowFormat.UseJsPropertyNames row format. These call the helper's exported\n// functions directly against real ECSQL rows, rather than only exercising them indirectly through\n// ElementAspect/Relationship/annotation field call sites (which are covered elsewhere).\ndescribe(\"ECSqlInstanceReshaper\", () => {\n const schemaName = \"ReshaperTest\";\n const schemaAlias = \"rst\";\n const subDirName = \"ECSqlInstanceReshaper\";\n\n let iModel: SnapshotDb;\n let element1Id: Id64String;\n let element2Id: Id64String;\n let aspectId: Id64String;\n let relationshipId: Id64String;\n\n before(async () => {\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"${schemaName}\" alias=\"${schemaAlias}\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.04\" alias=\"bis\"/>\n <ECStructClass typeName=\"PointStruct\" modifier=\"None\">\n <ECProperty propertyName=\"Label\" typeName=\"string\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"point3d\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"ReshaperElement\" modifier=\"None\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"ReshaperAspect\" modifier=\"None\">\n <BaseClass>bis:ElementUniqueAspect</BaseClass>\n <ECProperty propertyName=\"P2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"P3d\" typeName=\"point3d\"/>\n <ECStructProperty propertyName=\"St\" typeName=\"PointStruct\"/>\n <ECArrayProperty propertyName=\"ArrayI\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"ArrayP3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructArrayProperty propertyName=\"ArraySt\" typeName=\"PointStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECEntityClass>\n <ECRelationshipClass typeName=\"ReshaperRelatesToElement\" strength=\"referencing\" modifier=\"Sealed\">\n <BaseClass>bis:ElementRefersToElements</BaseClass>\n <Source multiplicity=\"(0..*)\" roleLabel=\"refers to\" polymorphic=\"true\">\n <Class class=\"ReshaperElement\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"is referenced by\" polymorphic=\"true\">\n <Class class=\"ReshaperElement\"/>\n </Target>\n <ECProperty propertyName=\"Label\" typeName=\"string\"/>\n </ECRelationshipClass>\n <ECEnumeration typeName=\"ReshaperNotAClass\" backingTypeName=\"int\" isStrict=\"true\">\n <ECEnumerator name=\"Value0\" value=\"0\"/>\n </ECEnumeration>\n </ECSchema>`;\n\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"ECSqlInstanceReshaper.bim\");\n const schemaPath = IModelTestUtils.prepareOutputFile(subDirName, `${schemaName}.01.00.00.xml`);\n IModelJsFs.writeFileSync(schemaPath, schema);\n\n iModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"ECSqlInstanceReshaperTest\" } });\n await iModel.importSchemas([schemaPath]);\n\n withEditTxn(iModel, (txn) => {\n element1Id = txn.insertElement({\n classFullName: `${schemaName}:ReshaperElement`,\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n });\n element2Id = txn.insertElement({\n classFullName: `${schemaName}:ReshaperElement`,\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n });\n assert.isTrue(Id64.isValidId64(element1Id));\n assert.isTrue(Id64.isValidId64(element2Id));\n\n aspectId = txn.insertAspect({\n classFullName: `${schemaName}:ReshaperAspect`,\n element: { id: element1Id },\n p2d: { x: 100, y: 200 },\n p3d: { x: 1, y: 2, z: 3 },\n st: { label: \"struct-label\", p3d: { x: 4, y: 5, z: 6 } },\n arrayI: [10, 20, 30],\n arrayP3d: [{ x: 13, y: 14, z: 15 }, { x: 16, y: 17, z: 18 }],\n arraySt: [{ label: \"arr-0\", p3d: { x: 7, y: 8, z: 9 } }, { label: \"arr-1\", p3d: { x: 10, y: 11, z: 12 } }],\n } as any);\n assert.isTrue(Id64.isValidId64(aspectId));\n\n relationshipId = txn.insertRelationship({\n classFullName: `${schemaName}:ReshaperRelatesToElement`,\n sourceId: element1Id,\n targetId: element2Id,\n label: \"rel-label\",\n } as any);\n assert.isTrue(Id64.isValidId64(relationshipId));\n });\n });\n\n after(() => {\n iModel.close();\n });\n\n it(\"getRuntimeClass resolves a runtime class by full class name and throws for unknown classes\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n assert.equal(ecClass.name, \"ReshaperAspect\");\n assert.equal(ecClass.schema.name, schemaName);\n\n assert.throws(() => getRuntimeClass(iModel, `${schemaName}:DoesNotExist`), /Class not found/);\n });\n\n it(\"getRuntimeClass throws when the resolved schema item exists but isn't a class\", () => {\n assert.throws(() => getRuntimeClass(iModel, `${schemaName}:ReshaperNotAClass`), /Class not found/);\n });\n\n it(\"reshapeInstanceRow reshapes an ElementAspect row: system properties, points, struct, primitive array, point array, and struct array\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const row = iModel.withQueryReader(`SELECT * FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:aspectId`, (reader) => {\n assert.isTrue(reader.step());\n return reader.current.toRow();\n }, new QueryBinder().bindId(\"aspectId\", aspectId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n\n const reshaped = reshapeInstanceRow(row, ecClass, iModel);\n\n // system properties: ECInstanceId -> id, ECClassId -> className (dot-separated)\n assert.equal(reshaped.id, aspectId);\n assert.equal(reshaped.className, `${schemaName}.ReshaperAspect`);\n\n // inherited navigation property from ElementUniqueAspect\n assert.deepEqual(reshaped.element, { id: element1Id, relClassName: \"BisCore.ElementOwnsUniqueAspect\" });\n\n // point2d property: first letter lowercased, X/Y -> x/y\n assert.deepEqual(reshaped.p2d, { x: 100, y: 200 });\n\n // point3d property: first letter lowercased, X/Y/Z -> x/y/z\n assert.deepEqual(reshaped.p3d, { x: 1, y: 2, z: 3 });\n\n // struct property: first letter lowercased, and its members recursively reshaped (including nested point)\n assert.deepEqual(reshaped.st, { label: \"struct-label\", p3d: { x: 4, y: 5, z: 6 } });\n\n // primitive (non-point) array: values pass through unchanged, only the key is lowercased\n assert.deepEqual(reshaped.arrayI, [10, 20, 30]);\n\n // point3d array: each scalar element reshaped like a standalone point, not just key-renamed\n assert.deepEqual(reshaped.arrayP3d, [{ x: 13, y: 14, z: 15 }, { x: 16, y: 17, z: 18 }]);\n\n // struct array: each element recursively reshaped like a standalone struct\n assert.deepEqual(reshaped.arraySt, [\n { label: \"arr-0\", p3d: { x: 7, y: 8, z: 9 } },\n { label: \"arr-1\", p3d: { x: 10, y: 11, z: 12 } },\n ]);\n });\n\n it(\"reshapeInstanceRow reshapes a Relationship row: source/target system properties and a primitive property\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperRelatesToElement`);\n const row = iModel.withQueryReader(`SELECT * FROM ${schemaAlias}.ReshaperRelatesToElement WHERE ECInstanceId=:relationshipId`, (reader) => {\n assert.isTrue(reader.step());\n return reader.current.toRow();\n }, new QueryBinder().bindId(\"relationshipId\", relationshipId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n\n const reshaped = reshapeInstanceRow(row, ecClass, iModel);\n\n assert.equal(reshaped.id, relationshipId);\n assert.equal(reshaped.className, `${schemaName}.ReshaperRelatesToElement`);\n assert.equal(reshaped.sourceId, element1Id);\n assert.equal(reshaped.sourceClassName, `${schemaName}.ReshaperElement`);\n assert.equal(reshaped.targetId, element2Id);\n assert.equal(reshaped.targetClassName, `${schemaName}.ReshaperElement`);\n assert.equal(reshaped.label, \"rel-label\");\n });\n\n it(\"reshapeInstanceRow omits null/undefined members instead of propagating them\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const row = { ECInstanceId: aspectId, P3d: null, St: undefined, ArrayI: [10, 20, 30] };\n\n const reshaped = reshapeInstanceRow(row, ecClass, iModel);\n\n assert.equal(reshaped.id, aspectId);\n assert.isUndefined(reshaped.p3d);\n assert.isUndefined(reshaped.st);\n assert.deepEqual(reshaped.arrayI, [10, 20, 30]);\n });\n\n it(\"reshapePropertyValue reshapes a single Point2d, Point3d, and struct property value in isolation\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const p2dProp = ecClass.getPropertySync(\"P2d\")!;\n const p3dProp = ecClass.getPropertySync(\"P3d\")!;\n const stProp = ecClass.getPropertySync(\"St\")!;\n assert.exists(p2dProp);\n assert.exists(p3dProp);\n assert.exists(stProp);\n\n assert.deepEqual(reshapePropertyValue({ X: 100, Y: 200 }, p2dProp, iModel), { x: 100, y: 200 });\n assert.deepEqual(reshapePropertyValue({ X: 1, Y: 2, Z: 3 }, p3dProp, iModel), { x: 1, y: 2, z: 3 });\n assert.deepEqual(\n reshapePropertyValue({ Label: \"hello\", P3d: { X: 1, Y: 2, Z: 3 } }, stProp, iModel),\n { label: \"hello\", p3d: { x: 1, y: 2, z: 3 } },\n );\n });\n\n it(\"reshapePropertyValue reshapes an array of Point3d scalars, not just a key rename\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const arrayP3dProp = ecClass.getPropertySync(\"ArrayP3d\")!;\n assert.exists(arrayP3dProp);\n assert.isTrue(arrayP3dProp.isArray());\n\n const reshaped = reshapePropertyValue([{ X: 13, Y: 14, Z: 15 }, { X: 16, Y: 17, Z: 18 }], arrayP3dProp, iModel);\n assert.deepEqual(reshaped, [{ x: 13, y: 14, z: 15 }, { x: 16, y: 17, z: 18 }]);\n });\n\n it(\"reshapePropertyValue reshapes a navigation property value into {id, relClassName}\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const elementProp = ecClass.getPropertySync(\"Element\")!;\n assert.exists(elementProp);\n assert.isTrue(elementProp.isNavigation());\n\n const row = iModel.withQueryReader(`SELECT Element FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:aspectId`, (reader) => {\n assert.isTrue(reader.step());\n return reader.current.toRow();\n }, new QueryBinder().bindId(\"aspectId\", aspectId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n\n const reshaped = reshapePropertyValue(row.Element, elementProp, iModel);\n expect(reshaped).to.deep.equal({ id: element1Id, relClassName: \"BisCore.ElementOwnsUniqueAspect\" });\n });\n\n it(\"reshapePropertyValue falls back to the raw classId instead of throwing when a navigation property's relationship class can't be resolved\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const elementProp = ecClass.getPropertySync(\"Element\")!;\n assert.exists(elementProp);\n\n const unresolvableClassId = \"0xdeadbeef\";\n const reshaped = reshapePropertyValue({ Id: element1Id, RelECClassId: unresolvableClassId }, elementProp, iModel);\n assert.deepEqual(reshaped, { id: element1Id, relClassName: unresolvableClassId });\n });\n\n it(\"reshapePropertyValue omits relClassName entirely when a navigation property's relationship class Id is unset\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const elementProp = ecClass.getPropertySync(\"Element\")!;\n assert.exists(elementProp);\n\n const reshaped = reshapePropertyValue({ Id: element1Id, RelECClassId: undefined }, elementProp, iModel);\n assert.deepEqual(reshaped, { id: element1Id });\n assert.isFalse(\"relClassName\" in reshaped);\n });\n\n it(\"reshapeInstanceRow falls back to the raw classId instead of throwing when a system ECClassId column can't be resolved\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const unresolvableClassId = \"0xdeadbeef\";\n const reshaped = reshapeInstanceRow({ ECInstanceId: aspectId, ECClassId: unresolvableClassId }, ecClass, iModel);\n assert.equal(reshaped.id, aspectId);\n assert.equal(reshaped.className, unresolvableClassId);\n });\n\n it(\"reshapePropertyValue preserves a null/undefined struct-array element as an empty object, matching the native row adaptor\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const arrayStProp = ecClass.getPropertySync(\"ArraySt\")!;\n assert.exists(arrayStProp);\n\n // A null struct-array element is rendered by the native row adaptor as an empty object placeholder\n // (unlike primitive arrays, where null elements are dropped entirely), preserving the array's length\n // and the positions of surrounding elements. The underlying query reader already normalizes a null\n // struct-array element to `{}` before it reaches the reshaper, but the reshaper is also exercised\n // directly here against raw `null`/`undefined` inputs to keep it robust regardless of caller.\n const reshaped = reshapePropertyValue(\n [{ Label: \"arr-0\", P3d: { X: 1, Y: 2, Z: 3 } }, null, undefined, { Label: \"arr-3\", P3d: { X: 4, Y: 5, Z: 6 } }],\n arrayStProp,\n iModel,\n );\n assert.deepEqual(reshaped, [\n { label: \"arr-0\", p3d: { x: 1, y: 2, z: 3 } },\n {},\n {},\n { label: \"arr-3\", p3d: { x: 4, y: 5, z: 6 } },\n ]);\n });\n\n it(\"reshapePropertyValue drops null/undefined elements from a primitive array, matching the native row adaptor\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const arrayIProp = ecClass.getPropertySync(\"ArrayI\")!;\n assert.exists(arrayIProp);\n\n const reshaped = reshapePropertyValue([10, null, undefined, 30], arrayIProp, iModel);\n assert.deepEqual(reshaped, [10, 30]);\n });\n\n it(\"reshapeInstanceRow reshapes a row containing null array elements without throwing, matching the native row adaptor\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n let probeAspectId: string;\n withEditTxn(iModel, (txn) => {\n probeAspectId = txn.insertAspect({\n classFullName: `${schemaName}:ReshaperAspect`,\n element: { id: element1Id },\n arrayI: [10, null, 30],\n arraySt: [{ label: \"a\" }, null, { label: \"c\" }],\n } as any);\n });\n const row = iModel.withQueryReader(`SELECT * FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:id`, (reader) => {\n assert.isTrue(reader.step());\n return reader.current.toRow();\n }, new QueryBinder().bindId(\"id\", probeAspectId!), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n\n const reshaped = reshapeInstanceRow(row, ecClass, iModel);\n assert.deepEqual(reshaped.arrayI, [10, 30]);\n assert.deepEqual(reshaped.arraySt, [{ label: \"a\" }, {}, { label: \"c\" }]);\n });\n\n it(\"reshapeInstanceRow omits a null struct member from a real queried row, matching the native row adaptor\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n let probeAspectId: string;\n withEditTxn(iModel, (txn) => {\n probeAspectId = txn.insertAspect({\n classFullName: `${schemaName}:ReshaperAspect`,\n element: { id: element1Id },\n st: { label: null, p3d: { x: 1, y: 2, z: 3 } },\n } as any);\n });\n const row = iModel.withQueryReader(`SELECT * FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:id`, (reader) => {\n assert.isTrue(reader.step());\n return reader.current.toRow();\n }, new QueryBinder().bindId(\"id\", probeAspectId!), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n\n const reshaped = reshapeInstanceRow(row, ecClass, iModel);\n assert.isFalse(\"label\" in reshaped.st);\n assert.deepEqual(reshaped.st.p3d, { x: 1, y: 2, z: 3 });\n });\n\n it(\"reshapeInstanceRow passes through an aliased/computed column with only its key lowercased\", () => {\n const ecClass = getRuntimeClass(iModel, `${schemaName}:ReshaperAspect`);\n const row = iModel.withQueryReader(`SELECT *, 1+1 AS Foo FROM ${schemaAlias}.ReshaperAspect WHERE ECInstanceId=:aspectId`, (reader) => {\n assert.isTrue(reader.step());\n return reader.current.toRow();\n }, new QueryBinder().bindId(\"aspectId\", aspectId), { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n\n const reshaped = reshapeInstanceRow(row, ecClass, iModel);\n assert.equal(reshaped.foo, 2);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DevTools.test.js","sourceRoot":"","sources":["../../../../src/test/misc/DevTools.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert } from \"chai\";\r\nimport * as os from \"os\";\r\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\r\nimport { DevTools, DevToolsStatsFormatter } from \"../../core-backend\";\r\n\r\ninterface StringIndexedObject<T> {\r\n [index: string]: T;\r\n}\r\n\r\ndescribe(\"DevTools\", () => {\r\n // we like to skip this test fixture for ios\r\n it(\"can fetch stats from backend\", () => {\r\n const stats = DevTools.stats();\r\n assert.isDefined(stats);\r\n assert.isDefined(stats.os);\r\n assert.isDefined(stats.os.totalmem);\r\n assert.isDefined(stats.os.freemem);\r\n assert.isDefined(stats.os.uptime);\r\n assert.isDefined(stats.os.cpus);\r\n assert.isDefined(stats.os.cpuUsage);\r\n assert.isTrue(stats.os.cpuUsage < 100);\r\n assert.isDefined(stats.process);\r\n assert.isDefined(stats.process.pid);\r\n assert.isDefined(stats.process.ppid);\r\n assert.isDefined(stats.process.memoryUsage);\r\n assert.isDefined(stats.process.uptime);\r\n\r\n assert.isTrue(Object.keys(stats.os.cpus).length > 0);\r\n for (const cpu of Object.values<os.CpuInfo>(stats.os.cpus)) {\r\n assert.isDefined(cpu.times);\r\n const cpuTimes = cpu.times as StringIndexedObject<number>;\r\n assert.isTrue(Object.keys(cpuTimes).length > 0);\r\n }\r\n });\r\n\r\n it(\"can serialize stats from backend appropriately\", () => {\r\n const stats = DevTools.stats();\r\n const formattedStats = DevToolsStatsFormatter.toFormattedJson(stats);\r\n\r\n assert.isTrue((formattedStats.os.totalmem as string).endsWith(\"MB\"));\r\n assert.isTrue((formattedStats.os.freemem as string).endsWith(\"MB\"));\r\n assert.isTrue((formattedStats.os.uptime as string).endsWith(\"secs\"));\r\n assert.isTrue((formattedStats.os.cpus[0].speed as string).endsWith(\"MHz\"));\r\n assert.isTrue((formattedStats.os.cpus[0].times.user as string).endsWith(\"%\"));\r\n assert.isTrue((formattedStats.os.cpus[0].times.nice as string).endsWith(\"%\"));\r\n assert.isTrue((formattedStats.os.cpus[0].times.sys as string).endsWith(\"%\"));\r\n assert.isTrue((formattedStats.os.cpus[0].times.idle as string).endsWith(\"%\"));\r\n assert.isTrue((formattedStats.os.cpus[0].times.irq as string).endsWith(\"%\"));\r\n assert.isTrue((formattedStats.os.cpuUsage! as string).endsWith(\"%\"));\r\n\r\n assert.isTrue((formattedStats.process.uptime as string).endsWith(\"secs\"));\r\n assert.isTrue((formattedStats.process.memoryUsage.rss as string).endsWith(\"MB\"));\r\n assert.isTrue((formattedStats.process.memoryUsage.heapTotal as string).endsWith(\"MB\"));\r\n assert.isTrue((formattedStats.process.memoryUsage.heapUsed as string).endsWith(\"MB\"));\r\n assert.isTrue((formattedStats.process.memoryUsage.external as string).endsWith(\"MB\"));\r\n });\r\n\r\n it(\"can ping backend\", () => {\r\n const ret = DevTools.ping();\r\n assert.isTrue(ret);\r\n });\r\n\r\n it(\"can set log level\", () => {\r\n const loggerCategory = \"test-category\";\r\n\r\n const expectedOldLevel = LogLevel.Info;\r\n Logger.setLevel(loggerCategory, expectedOldLevel);\r\n\r\n const expectedNewLevel = LogLevel.Warning;\r\n const actualOldLevel = DevTools.setLogLevel(loggerCategory, expectedNewLevel);\r\n assert.equal(actualOldLevel, expectedOldLevel);\r\n\r\n const actualNewLevel = Logger.getLevel(loggerCategory);\r\n assert.equal(actualNewLevel, expectedNewLevel);\r\n });\r\n\r\n it(\"Get the backend versions\", async () => {\r\n const versions = await DevTools.versions();\r\n assert.isDefined(versions.application);\r\n assert.isDefined(versions.iTwinJs);\r\n assert.isDefined(versions.availableRpcs);\r\n });\r\n},\r\n);\r\n"]}
1
+ {"version":3,"file":"DevTools.test.js","sourceRoot":"","sources":["../../../../src/test/misc/DevTools.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport * as os from \"os\";\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\nimport { DevTools, DevToolsStatsFormatter } from \"../../core-backend\";\n\ninterface StringIndexedObject<T> {\n [index: string]: T;\n}\n\ndescribe(\"DevTools\", () => {\n // we like to skip this test fixture for ios\n it(\"can fetch stats from backend\", () => {\n const stats = DevTools.stats();\n assert.isDefined(stats);\n assert.isDefined(stats.os);\n assert.isDefined(stats.os.totalmem);\n assert.isDefined(stats.os.freemem);\n assert.isDefined(stats.os.uptime);\n assert.isDefined(stats.os.cpus);\n assert.isDefined(stats.os.cpuUsage);\n assert.isTrue(stats.os.cpuUsage < 100);\n assert.isDefined(stats.process);\n assert.isDefined(stats.process.pid);\n assert.isDefined(stats.process.ppid);\n assert.isDefined(stats.process.memoryUsage);\n assert.isDefined(stats.process.uptime);\n\n assert.isTrue(Object.keys(stats.os.cpus).length > 0);\n for (const cpu of Object.values<os.CpuInfo>(stats.os.cpus)) {\n assert.isDefined(cpu.times);\n const cpuTimes = cpu.times as StringIndexedObject<number>;\n assert.isTrue(Object.keys(cpuTimes).length > 0);\n }\n });\n\n it(\"can serialize stats from backend appropriately\", () => {\n const stats = DevTools.stats();\n const formattedStats = DevToolsStatsFormatter.toFormattedJson(stats);\n\n assert.isTrue((formattedStats.os.totalmem as string).endsWith(\"MB\"));\n assert.isTrue((formattedStats.os.freemem as string).endsWith(\"MB\"));\n assert.isTrue((formattedStats.os.uptime as string).endsWith(\"secs\"));\n assert.isTrue((formattedStats.os.cpus[0].speed as string).endsWith(\"MHz\"));\n assert.isTrue((formattedStats.os.cpus[0].times.user as string).endsWith(\"%\"));\n assert.isTrue((formattedStats.os.cpus[0].times.nice as string).endsWith(\"%\"));\n assert.isTrue((formattedStats.os.cpus[0].times.sys as string).endsWith(\"%\"));\n assert.isTrue((formattedStats.os.cpus[0].times.idle as string).endsWith(\"%\"));\n assert.isTrue((formattedStats.os.cpus[0].times.irq as string).endsWith(\"%\"));\n assert.isTrue((formattedStats.os.cpuUsage! as string).endsWith(\"%\"));\n\n assert.isTrue((formattedStats.process.uptime as string).endsWith(\"secs\"));\n assert.isTrue((formattedStats.process.memoryUsage.rss as string).endsWith(\"MB\"));\n assert.isTrue((formattedStats.process.memoryUsage.heapTotal as string).endsWith(\"MB\"));\n assert.isTrue((formattedStats.process.memoryUsage.heapUsed as string).endsWith(\"MB\"));\n assert.isTrue((formattedStats.process.memoryUsage.external as string).endsWith(\"MB\"));\n });\n\n it(\"can ping backend\", () => {\n const ret = DevTools.ping();\n assert.isTrue(ret);\n });\n\n it(\"can set log level\", () => {\n const loggerCategory = \"test-category\";\n\n const expectedOldLevel = LogLevel.Info;\n Logger.setLevel(loggerCategory, expectedOldLevel);\n\n const expectedNewLevel = LogLevel.Warning;\n const actualOldLevel = DevTools.setLogLevel(loggerCategory, expectedNewLevel);\n assert.equal(actualOldLevel, expectedOldLevel);\n\n const actualNewLevel = Logger.getLevel(loggerCategory);\n assert.equal(actualNewLevel, expectedNewLevel);\n });\n\n it(\"Get the backend versions\", async () => {\n const versions = await DevTools.versions();\n assert.isDefined(versions.application);\n assert.isDefined(versions.iTwinJs);\n assert.isDefined(versions.availableRpcs);\n });\n},\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"EntitySubClasses.test.js","sourceRoot":"","sources":["../../../../src/test/misc/EntitySubClasses.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\r\nimport { AuxCoordSystemProps, Code, GeometricModel2dProps, ModelProps } from \"@itwin/core-common\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { GeometricModel2d } from \"../../Model\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { AuxCoordSystem2d, AuxCoordSystem3d } from \"../../ViewDefinition\";\r\n\r\ndescribe(\"EntitySubClasses\", () => {\r\n let iModelDb: SnapshotDb;\r\n\r\n before(() => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"EntitySubClasses\", \"Empty.bim\");\r\n iModelDb = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"Subject\" } });\r\n });\r\n\r\n after(() => {\r\n iModelDb.close();\r\n })\r\n\r\n it(\"should correctly set globalOrigin for GeometricModel2d\", async () => {\r\n const modelProps: ModelProps = {\r\n modeledElement: { id: \"\" },\r\n classFullName: GeometricModel2d.classFullName,\r\n }\r\n\r\n let model = iModelDb.constructEntity<GeometricModel2d, GeometricModel2dProps>({\r\n ...modelProps,\r\n globalOrigin: undefined,\r\n });\r\n expect(model.globalOrigin).to.be.undefined;\r\n\r\n model = iModelDb.constructEntity<GeometricModel2d, GeometricModel2dProps>({\r\n ...modelProps,\r\n globalOrigin: { x: 1, y: 2 },\r\n });\r\n expect(model.globalOrigin?.x).to.equal(1);\r\n expect(model.globalOrigin?.y).to.equal(2);\r\n\r\n model = iModelDb.constructEntity<GeometricModel2d, GeometricModel2dProps>({\r\n ...modelProps,\r\n globalOrigin: [3, 4],\r\n });\r\n expect(model.globalOrigin?.x).to.equal(3);\r\n expect(model.globalOrigin?.y).to.equal(4);\r\n });\r\n\r\n it(\"should correctly set origin, angle for AuxCoordSystem2d\", async () => {\r\n const props: AuxCoordSystemProps = {\r\n classFullName: AuxCoordSystem2d.classFullName,\r\n model: \"\",\r\n code: Code.createEmpty(),\r\n }\r\n\r\n let coordSystem = new AuxCoordSystem2d({\r\n ...props,\r\n }, iModelDb);\r\n expect(coordSystem.origin).to.be.undefined;\r\n expect(coordSystem.angle).to.be.undefined;\r\n\r\n coordSystem = new AuxCoordSystem2d({\r\n ...props,\r\n origin: { x: 1, y: 2 },\r\n angle: 45,\r\n }, iModelDb);\r\n expect(coordSystem.origin?.x).to.equal(1);\r\n expect(coordSystem.origin?.y).to.equal(2);\r\n expect(coordSystem.angle).to.be.equal(45);\r\n\r\n coordSystem = new AuxCoordSystem2d({\r\n ...props,\r\n origin: [3, 4],\r\n angle: { radians: Math.PI / 2 },\r\n }, iModelDb);\r\n expect(coordSystem.origin?.x).to.equal(3);\r\n expect(coordSystem.origin?.y).to.equal(4);\r\n expect(coordSystem.angle).to.be.equal(90);\r\n });\r\n\r\n it(\"should correctly set origin, yaw, pitch, roll for AuxCoordSystem3d\", async () => {\r\n const props: AuxCoordSystemProps = {\r\n classFullName: AuxCoordSystem3d.classFullName,\r\n model: \"\",\r\n code: Code.createEmpty(),\r\n }\r\n\r\n let coordSystem = new AuxCoordSystem3d(props, iModelDb)\r\n expect(coordSystem.origin).to.be.undefined;\r\n expect(coordSystem.yaw).to.be.undefined;\r\n expect(coordSystem.pitch).to.be.undefined;\r\n expect(coordSystem.roll).to.be.undefined;\r\n\r\n coordSystem = new AuxCoordSystem3d({\r\n ...props,\r\n origin: { x: 1, y: 2, z: 3 },\r\n yaw: 10,\r\n pitch: 20,\r\n roll: 30,\r\n }, iModelDb)\r\n expect(coordSystem.origin?.x).to.equal(1);\r\n expect(coordSystem.origin?.y).to.equal(2);\r\n expect(coordSystem.origin?.z).to.equal(3);\r\n expect(coordSystem.yaw).to.be.equal(10);\r\n expect(coordSystem.pitch).to.be.equal(20);\r\n expect(coordSystem.roll).to.be.equal(30);\r\n\r\n coordSystem = new AuxCoordSystem3d({\r\n ...props,\r\n origin: [4, 5, 6],\r\n yaw: { radians: Math.PI / 4 },\r\n pitch: { radians: Math.PI / 2 },\r\n roll: { radians: Math.PI },\r\n }, iModelDb)\r\n expect(coordSystem.origin?.x).to.equal(4);\r\n expect(coordSystem.origin?.y).to.equal(5);\r\n expect(coordSystem.origin?.z).to.equal(6);\r\n expect(coordSystem.yaw).to.be.equal(45);\r\n expect(coordSystem.pitch).to.be.equal(90);\r\n expect(coordSystem.roll).to.be.equal(180);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"EntitySubClasses.test.js","sourceRoot":"","sources":["../../../../src/test/misc/EntitySubClasses.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\nimport { AuxCoordSystemProps, Code, GeometricModel2dProps, ModelProps } from \"@itwin/core-common\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { GeometricModel2d } from \"../../Model\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { AuxCoordSystem2d, AuxCoordSystem3d } from \"../../ViewDefinition\";\n\ndescribe(\"EntitySubClasses\", () => {\n let iModelDb: SnapshotDb;\n\n before(() => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"EntitySubClasses\", \"Empty.bim\");\n iModelDb = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"Subject\" } });\n });\n\n after(() => {\n iModelDb.close();\n })\n\n it(\"should correctly set globalOrigin for GeometricModel2d\", async () => {\n const modelProps: ModelProps = {\n modeledElement: { id: \"\" },\n classFullName: GeometricModel2d.classFullName,\n }\n\n let model = iModelDb.constructEntity<GeometricModel2d, GeometricModel2dProps>({\n ...modelProps,\n globalOrigin: undefined,\n });\n expect(model.globalOrigin).to.be.undefined;\n\n model = iModelDb.constructEntity<GeometricModel2d, GeometricModel2dProps>({\n ...modelProps,\n globalOrigin: { x: 1, y: 2 },\n });\n expect(model.globalOrigin?.x).to.equal(1);\n expect(model.globalOrigin?.y).to.equal(2);\n\n model = iModelDb.constructEntity<GeometricModel2d, GeometricModel2dProps>({\n ...modelProps,\n globalOrigin: [3, 4],\n });\n expect(model.globalOrigin?.x).to.equal(3);\n expect(model.globalOrigin?.y).to.equal(4);\n });\n\n it(\"should correctly set origin, angle for AuxCoordSystem2d\", async () => {\n const props: AuxCoordSystemProps = {\n classFullName: AuxCoordSystem2d.classFullName,\n model: \"\",\n code: Code.createEmpty(),\n }\n\n let coordSystem = new AuxCoordSystem2d({\n ...props,\n }, iModelDb);\n expect(coordSystem.origin).to.be.undefined;\n expect(coordSystem.angle).to.be.undefined;\n\n coordSystem = new AuxCoordSystem2d({\n ...props,\n origin: { x: 1, y: 2 },\n angle: 45,\n }, iModelDb);\n expect(coordSystem.origin?.x).to.equal(1);\n expect(coordSystem.origin?.y).to.equal(2);\n expect(coordSystem.angle).to.be.equal(45);\n\n coordSystem = new AuxCoordSystem2d({\n ...props,\n origin: [3, 4],\n angle: { radians: Math.PI / 2 },\n }, iModelDb);\n expect(coordSystem.origin?.x).to.equal(3);\n expect(coordSystem.origin?.y).to.equal(4);\n expect(coordSystem.angle).to.be.equal(90);\n });\n\n it(\"should correctly set origin, yaw, pitch, roll for AuxCoordSystem3d\", async () => {\n const props: AuxCoordSystemProps = {\n classFullName: AuxCoordSystem3d.classFullName,\n model: \"\",\n code: Code.createEmpty(),\n }\n\n let coordSystem = new AuxCoordSystem3d(props, iModelDb)\n expect(coordSystem.origin).to.be.undefined;\n expect(coordSystem.yaw).to.be.undefined;\n expect(coordSystem.pitch).to.be.undefined;\n expect(coordSystem.roll).to.be.undefined;\n\n coordSystem = new AuxCoordSystem3d({\n ...props,\n origin: { x: 1, y: 2, z: 3 },\n yaw: 10,\n pitch: 20,\n roll: 30,\n }, iModelDb)\n expect(coordSystem.origin?.x).to.equal(1);\n expect(coordSystem.origin?.y).to.equal(2);\n expect(coordSystem.origin?.z).to.equal(3);\n expect(coordSystem.yaw).to.be.equal(10);\n expect(coordSystem.pitch).to.be.equal(20);\n expect(coordSystem.roll).to.be.equal(30);\n\n coordSystem = new AuxCoordSystem3d({\n ...props,\n origin: [4, 5, 6],\n yaw: { radians: Math.PI / 4 },\n pitch: { radians: Math.PI / 2 },\n roll: { radians: Math.PI },\n }, iModelDb)\n expect(coordSystem.origin?.x).to.equal(4);\n expect(coordSystem.origin?.y).to.equal(5);\n expect(coordSystem.origin?.z).to.equal(6);\n expect(coordSystem.yaw).to.be.equal(45);\n expect(coordSystem.pitch).to.be.equal(90);\n expect(coordSystem.roll).to.be.equal(180);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PromiseMemoizer.test.js","sourceRoot":"","sources":["../../../../src/test/misc/PromiseMemoizer.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert } from \"chai\";\r\nimport { BeDuration } from \"@itwin/core-bentley\";\r\nimport { PromiseMemoizer, QueryablePromise } from \"../../PromiseMemoizer\";\r\nimport * as sinon from \"sinon\";\r\n\r\ndescribe(\"PromiseMemoizer\", () => {\r\n let clock: sinon.SinonFakeTimers | undefined;\r\n const generateTestFunctionKey = (param: string, waitTime: number): string => {\r\n return `key ${param}:${waitTime}`;\r\n };\r\n\r\n const testFunction = async (param: string, waitTime: number): Promise<string> => {\r\n await BeDuration.wait(waitTime);\r\n if (param === \"TestError\")\r\n throw new Error(\"TestError\");\r\n return testFunctionResult(param, waitTime);\r\n };\r\n\r\n const testFunctionResult = (param: string, waitTime: number): string => {\r\n return `value ${param}:${waitTime}`;\r\n };\r\n\r\n const maxCacheSize = 25;\r\n const cacheTimeout = 1500;\r\n const testMemoizer = new PromiseMemoizer<string>(testFunction, generateTestFunctionKey, maxCacheSize, cacheTimeout);\r\n\r\n afterEach(() => {\r\n if (clock !== undefined) {\r\n clock.restore();\r\n clock = undefined;\r\n }\r\n testMemoizer.clearCache();\r\n });\r\n\r\n it(\"should be able to await memoized promise\", async () => {\r\n const startTime = Date.now();\r\n const qp: QueryablePromise<string> = testMemoizer.memoize(\"test\", 500);\r\n await qp.promise;\r\n const elapsedTime = Date.now() - startTime;\r\n assert.isAbove(elapsedTime, 400);\r\n });\r\n\r\n it(\"should be able to memoize and deleteMemoized function calls\", async () => {\r\n clock = sinon.useFakeTimers();\r\n const qps = new Array<QueryablePromise<string>>(4);\r\n const expectedResults = new Array<string>(4);\r\n\r\n qps[0] = testMemoizer.memoize(\"test1\", 500);\r\n expectedResults[0] = testFunctionResult(\"test1\", 500);\r\n\r\n qps[1] = testMemoizer.memoize(\"test1\", 500);\r\n expectedResults[1] = testFunctionResult(\"test1\", 500);\r\n assert.strictEqual(qps[1], qps[0], \"qps[1] === qps[0] fails\");\r\n\r\n qps[2] = testMemoizer.memoize(\"test2\", 500);\r\n expectedResults[2] = testFunctionResult(\"test2\", 500);\r\n assert.notStrictEqual(qps[2], qps[0], \"qps[2] !== qps[0] fails\");\r\n\r\n qps[3] = testMemoizer.memoize(\"test1\", 501);\r\n expectedResults[3] = testFunctionResult(\"test1\", 501);\r\n assert.notStrictEqual(qps[3], qps[0], \"qps[3] !== qps[0] fails\");\r\n\r\n const qpRej = testMemoizer.memoize(\"TestError\", 500);\r\n\r\n for (const qp of qps) {\r\n assert.isTrue(qp.isPending, \"qp.isPending check fails\");\r\n }\r\n assert.isTrue(qpRej.isPending, \"qpRej.isPending check fails\");\r\n\r\n await clock.tickAsync(501);\r\n\r\n for (let ii = 0; ii < 4; ii++) {\r\n assert.isTrue(qps[ii].isFulfilled, \"qp.isFulfilled check fails\");\r\n assert.strictEqual(qps[ii].result, expectedResults[ii]);\r\n }\r\n assert.isTrue(qpRej.isRejected);\r\n assert.strictEqual(qpRej.error.message, \"TestError\");\r\n\r\n testMemoizer.deleteMemoized(\"test1\", 500);\r\n const qp0 = testMemoizer.memoize(\"test1\", 500);\r\n assert.isTrue(qp0.isPending);\r\n });\r\n\r\n it(\"should not increase the cache size when repeating the same call\", () => {\r\n for (let ii = 0; ii < 5; ii++) {\r\n const qp = testMemoizer.memoize(\"test\", 1000); // same call every time\r\n assert.isTrue(qp.isPending); // Ensure the testFn doesn't resolve\r\n }\r\n\r\n const actualCacheSize = (testMemoizer as any)._cachedPromises.size;\r\n assert.equal(actualCacheSize, 1);\r\n });\r\n\r\n it(\"should increase the cache size as expected\", () => {\r\n for (let ii = 0; ii < 5; ii++) {\r\n const qp = testMemoizer.memoize(ii.toString(), 1000); // different call every time\r\n assert.isTrue(qp.isPending);\r\n }\r\n const actualCacheSize = (testMemoizer as any)._cachedPromises.size;\r\n assert.equal(actualCacheSize, 5);\r\n });\r\n\r\n it(\"should clear the cache if there is an overflow\", () => {\r\n for (let ii = 0; ii < maxCacheSize; ii++) {\r\n testMemoizer.memoize(ii.toString(), 1000);\r\n }\r\n let actualCacheSize = (testMemoizer as any)._cachedPromises.size;\r\n assert.equal(actualCacheSize, maxCacheSize);\r\n\r\n testMemoizer.memoize(maxCacheSize.toString(), 1000);\r\n actualCacheSize = (testMemoizer as any)._cachedPromises.size;\r\n assert.equal(actualCacheSize, 1);\r\n });\r\n\r\n it(\"should clear old promises\", async () => {\r\n clock = sinon.useFakeTimers();\r\n testMemoizer.memoize(\"test\", 1000);\r\n testMemoizer.memoize(\"test\", 100);\r\n\r\n let actualCacheSize = (testMemoizer as any)._cachedPromises.size;\r\n assert.equal(actualCacheSize, 2);\r\n\r\n await clock.tickAsync(cacheTimeout + 100);\r\n\r\n actualCacheSize = (testMemoizer as any)._cachedPromises.size;\r\n assert.equal(actualCacheSize, 1);\r\n\r\n await clock.tickAsync(900);\r\n actualCacheSize = (testMemoizer as any)._cachedPromises.size;\r\n assert.equal(actualCacheSize, 0);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"PromiseMemoizer.test.js","sourceRoot":"","sources":["../../../../src/test/misc/PromiseMemoizer.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { PromiseMemoizer, QueryablePromise } from \"../../PromiseMemoizer\";\nimport * as sinon from \"sinon\";\n\ndescribe(\"PromiseMemoizer\", () => {\n let clock: sinon.SinonFakeTimers | undefined;\n const generateTestFunctionKey = (param: string, waitTime: number): string => {\n return `key ${param}:${waitTime}`;\n };\n\n const testFunction = async (param: string, waitTime: number): Promise<string> => {\n await BeDuration.wait(waitTime);\n if (param === \"TestError\")\n throw new Error(\"TestError\");\n return testFunctionResult(param, waitTime);\n };\n\n const testFunctionResult = (param: string, waitTime: number): string => {\n return `value ${param}:${waitTime}`;\n };\n\n const maxCacheSize = 25;\n const cacheTimeout = 1500;\n const testMemoizer = new PromiseMemoizer<string>(testFunction, generateTestFunctionKey, maxCacheSize, cacheTimeout);\n\n afterEach(() => {\n if (clock !== undefined) {\n clock.restore();\n clock = undefined;\n }\n testMemoizer.clearCache();\n });\n\n it(\"should be able to await memoized promise\", async () => {\n const startTime = Date.now();\n const qp: QueryablePromise<string> = testMemoizer.memoize(\"test\", 500);\n await qp.promise;\n const elapsedTime = Date.now() - startTime;\n assert.isAbove(elapsedTime, 400);\n });\n\n it(\"should be able to memoize and deleteMemoized function calls\", async () => {\n clock = sinon.useFakeTimers();\n const qps = new Array<QueryablePromise<string>>(4);\n const expectedResults = new Array<string>(4);\n\n qps[0] = testMemoizer.memoize(\"test1\", 500);\n expectedResults[0] = testFunctionResult(\"test1\", 500);\n\n qps[1] = testMemoizer.memoize(\"test1\", 500);\n expectedResults[1] = testFunctionResult(\"test1\", 500);\n assert.strictEqual(qps[1], qps[0], \"qps[1] === qps[0] fails\");\n\n qps[2] = testMemoizer.memoize(\"test2\", 500);\n expectedResults[2] = testFunctionResult(\"test2\", 500);\n assert.notStrictEqual(qps[2], qps[0], \"qps[2] !== qps[0] fails\");\n\n qps[3] = testMemoizer.memoize(\"test1\", 501);\n expectedResults[3] = testFunctionResult(\"test1\", 501);\n assert.notStrictEqual(qps[3], qps[0], \"qps[3] !== qps[0] fails\");\n\n const qpRej = testMemoizer.memoize(\"TestError\", 500);\n\n for (const qp of qps) {\n assert.isTrue(qp.isPending, \"qp.isPending check fails\");\n }\n assert.isTrue(qpRej.isPending, \"qpRej.isPending check fails\");\n\n await clock.tickAsync(501);\n\n for (let ii = 0; ii < 4; ii++) {\n assert.isTrue(qps[ii].isFulfilled, \"qp.isFulfilled check fails\");\n assert.strictEqual(qps[ii].result, expectedResults[ii]);\n }\n assert.isTrue(qpRej.isRejected);\n assert.strictEqual(qpRej.error.message, \"TestError\");\n\n testMemoizer.deleteMemoized(\"test1\", 500);\n const qp0 = testMemoizer.memoize(\"test1\", 500);\n assert.isTrue(qp0.isPending);\n });\n\n it(\"should not increase the cache size when repeating the same call\", () => {\n for (let ii = 0; ii < 5; ii++) {\n const qp = testMemoizer.memoize(\"test\", 1000); // same call every time\n assert.isTrue(qp.isPending); // Ensure the testFn doesn't resolve\n }\n\n const actualCacheSize = (testMemoizer as any)._cachedPromises.size;\n assert.equal(actualCacheSize, 1);\n });\n\n it(\"should increase the cache size as expected\", () => {\n for (let ii = 0; ii < 5; ii++) {\n const qp = testMemoizer.memoize(ii.toString(), 1000); // different call every time\n assert.isTrue(qp.isPending);\n }\n const actualCacheSize = (testMemoizer as any)._cachedPromises.size;\n assert.equal(actualCacheSize, 5);\n });\n\n it(\"should clear the cache if there is an overflow\", () => {\n for (let ii = 0; ii < maxCacheSize; ii++) {\n testMemoizer.memoize(ii.toString(), 1000);\n }\n let actualCacheSize = (testMemoizer as any)._cachedPromises.size;\n assert.equal(actualCacheSize, maxCacheSize);\n\n testMemoizer.memoize(maxCacheSize.toString(), 1000);\n actualCacheSize = (testMemoizer as any)._cachedPromises.size;\n assert.equal(actualCacheSize, 1);\n });\n\n it(\"should clear old promises\", async () => {\n clock = sinon.useFakeTimers();\n testMemoizer.memoize(\"test\", 1000);\n testMemoizer.memoize(\"test\", 100);\n\n let actualCacheSize = (testMemoizer as any)._cachedPromises.size;\n assert.equal(actualCacheSize, 2);\n\n await clock.tickAsync(cacheTimeout + 100);\n\n actualCacheSize = (testMemoizer as any)._cachedPromises.size;\n assert.equal(actualCacheSize, 1);\n\n await clock.tickAsync(900);\n actualCacheSize = (testMemoizer as any)._cachedPromises.size;\n assert.equal(actualCacheSize, 0);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DgnDbWorker.test.js","sourceRoot":"","sources":["../../../../src/test/native/DgnDbWorker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport { BeDuration } from \"@itwin/core-bentley\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { IModelNative } from \"../../internal/NativePlatform\";\r\nimport { StandaloneDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { _nativeDb } from \"../../internal/Symbols\";\r\n\r\ndescribe(\"DgnDbWorker\", () => {\r\n let imodel: StandaloneDb;\r\n\r\n function openIModel(): void {\r\n const rootSubject = { name: \"DgnDbWorker tests\", description: \"DgnDbWorker tests\" };\r\n imodel = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DgnDbWorker\", \"DgnDbWorker.bim\"), { rootSubject });\r\n }\r\n\r\n before(() => {\r\n openIModel();\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n class Worker {\r\n public promise: Promise<void> | undefined;\r\n private readonly _worker: IModelJsNative.TestWorker;\r\n\r\n public constructor() {\r\n this._worker = new IModelNative.platform.TestWorker(imodel[_nativeDb]);\r\n }\r\n\r\n public queue() { this.promise = this._worker.queue(); }\r\n public cancel() { this._worker.cancel(); }\r\n public setReady() { this._worker.setReady(); }\r\n public setThrow() { this._worker.setThrow(); }\r\n\r\n public get isCanceled(): boolean { return this._worker.isCanceled(); }\r\n public get wasExecuted(): boolean { return this._worker.wasExecuted(); }\r\n public get state(): IModelJsNative.TestWorkerState { return this._worker.getState(); }\r\n\r\n public get wasQueued() { return IModelJsNative.TestWorkerState.NotQueued !== this.state; }\r\n public get isQueued() { return IModelJsNative.TestWorkerState.Queued === this.state; }\r\n public get isRunning() { return IModelJsNative.TestWorkerState.Running === this.state; }\r\n public get isError() { return IModelJsNative.TestWorkerState.Error === this.state; }\r\n public get isOk() { return IModelJsNative.TestWorkerState.Ok === this.state; }\r\n public get isSkipped() { return IModelJsNative.TestWorkerState.Skipped === this.state; }\r\n public get isAborted() { return IModelJsNative.TestWorkerState.Aborted === this.state; }\r\n }\r\n\r\n async function waitUntil(condition: () => boolean): Promise<void> {\r\n if (condition())\r\n return;\r\n\r\n await new Promise<void>((resolve: any) => setTimeout(resolve, 100));\r\n return waitUntil(condition);\r\n }\r\n\r\n it(\"executes asynchronously\", async () => {\r\n const worker = new Worker();\r\n await BeDuration.wait(1000);\r\n expect(worker.wasQueued).to.be.false;\r\n expect(worker.isCanceled).to.be.false;\r\n\r\n worker.queue();\r\n expect(worker.isQueued || worker.isRunning).to.be.true;\r\n\r\n worker.setReady();\r\n await worker.promise;\r\n\r\n expect(worker.wasExecuted).to.be.true;\r\n expect(worker.isCanceled).to.be.false;\r\n expect(worker.isOk).to.be.true;\r\n });\r\n\r\n it(\"executes a maximum of 4 simultaneously\", async () => {\r\n // Create 4 workers. They should all start executing.\r\n const first = [new Worker(), new Worker(), new Worker(), new Worker()];\r\n for (const worker of first)\r\n worker.queue();\r\n\r\n await waitUntil(() => first.every((x) => x.isRunning));\r\n\r\n // Queue up 2 more workers. They should not start executing until at least one of the first 4 resolves.\r\n const next = [new Worker(), new Worker()];\r\n for (const worker of next)\r\n worker.queue();\r\n\r\n await BeDuration.wait(1000);\r\n expect(first.every((x) => x.isRunning)).to.be.true;\r\n expect(next.every((x) => x.isQueued)).to.be.true;\r\n\r\n // Let the first worker resolve.\r\n first[0].setReady();\r\n await first[0].promise;\r\n expect(first[0].isOk).to.be.true;\r\n\r\n // Exactly one of the 2 workers remaining in the queue should start executing.\r\n await waitUntil(() => next.some((x) => x.isRunning));\r\n await BeDuration.wait(1000);\r\n expect(next.every((x) => x.isRunning)).to.be.false;\r\n\r\n // Clear the queue.\r\n const workers = first.concat(next);\r\n for (const worker of workers)\r\n worker.setReady();\r\n\r\n await Promise.all(workers.map((x) => x.promise).filter((p): p is Promise<void> => p !== undefined)); // eslint-disable-line @typescript-eslint/promise-function-async\r\n expect(workers.every((x) => x.isOk)).to.be.true;\r\n });\r\n\r\n it(\"skips execution if canceled before execution begins\", async () => {\r\n const worker = new Worker();\r\n worker.cancel();\r\n expect(worker.isCanceled).to.be.true;\r\n worker.queue();\r\n await assert.isRejected(worker.promise!, \"canceled\");\r\n expect(worker.isSkipped).to.be.true;\r\n expect(worker.wasExecuted).to.be.false;\r\n });\r\n\r\n it(\"executes if canceled after execution begins\", async () => {\r\n const worker = new Worker();\r\n worker.queue();\r\n await waitUntil(() => worker.isRunning);\r\n worker.cancel();\r\n worker.setReady();\r\n await worker.promise;\r\n expect(worker.isCanceled).to.be.true;\r\n expect(worker.isSkipped).to.be.false;\r\n expect(worker.wasExecuted).to.be.true;\r\n });\r\n\r\n it(\"throws\", async () => {\r\n const worker = new Worker();\r\n worker.setThrow();\r\n worker.queue();\r\n await assert.isRejected(worker.promise!, \"throw\");\r\n expect(worker.isCanceled).to.be.false;\r\n expect(worker.isError).to.be.true;\r\n });\r\n\r\n it(\"cancels all workers before iModel is closed\", async () => {\r\n const resolve = new Worker();\r\n resolve.setReady();\r\n const reject = new Worker();\r\n reject.setThrow();\r\n\r\n // These 6 workers will never resolve nor reject explicitly.\r\n const cancel = [new Worker(), new Worker(), new Worker(), new Worker(), new Worker(), new Worker()];\r\n\r\n // Queue up all the workers.\r\n const workers = cancel.concat([resolve, reject]);\r\n for (const worker of workers)\r\n worker.queue();\r\n\r\n // Closing the iModel cancels all extant workers.\r\n imodel.close();\r\n openIModel();\r\n\r\n await expect(Promise.all(workers.map(async (x) => x.promise))).rejectedWith(\"canceled\");\r\n\r\n expect(cancel.every((x) => x.isCanceled)).to.be.true;\r\n expect(cancel.every((x) => x.isAborted || x.isSkipped)).to.be.true;\r\n expect(resolve.isOk || resolve.isSkipped || resolve.isAborted).to.be.true;\r\n expect(reject.isError || reject.isSkipped).to.be.true;\r\n });\r\n\r\n it(\"cancels a snap request\", async () => {\r\n // Block the worker thread pool with 4 workers so that our snap cannot complete before they complete.\r\n const blockers = [new Worker(), new Worker(), new Worker(), new Worker()];\r\n blockers.forEach((w) => w.queue());\r\n\r\n const sessionId = \"0x222\";\r\n const snap = imodel.requestSnap(sessionId, {\r\n testPoint: { x: 1, y: 2, z: 3 },\r\n closePoint: { x: 1, y: 2, z: 3 },\r\n id: \"0x111\",\r\n worldToView: Matrix4d.createIdentity().toJSON(),\r\n });\r\n\r\n const toBeRejected = expect(snap).to.be.rejectedWith(\"aborted\");\r\n imodel.cancelSnap(sessionId);\r\n\r\n // Clear the worker thread pool so the snap request (now canceled) can be processed.\r\n blockers.forEach((w) => w.setReady());\r\n await Promise.all(blockers.map(async (w) => w.promise).filter((p): p is Promise<void> => p !== undefined));\r\n\r\n await toBeRejected;\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"DgnDbWorker.test.js","sourceRoot":"","sources":["../../../../src/test/native/DgnDbWorker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert, expect } from \"chai\";\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { IModelNative } from \"../../internal/NativePlatform\";\nimport { StandaloneDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { _nativeDb } from \"../../internal/Symbols\";\n\ndescribe(\"DgnDbWorker\", () => {\n let imodel: StandaloneDb;\n\n function openIModel(): void {\n const rootSubject = { name: \"DgnDbWorker tests\", description: \"DgnDbWorker tests\" };\n imodel = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"DgnDbWorker\", \"DgnDbWorker.bim\"), { rootSubject });\n }\n\n before(() => {\n openIModel();\n });\n\n after(() => {\n imodel.close();\n });\n\n class Worker {\n public promise: Promise<void> | undefined;\n private readonly _worker: IModelJsNative.TestWorker;\n\n public constructor() {\n this._worker = new IModelNative.platform.TestWorker(imodel[_nativeDb]);\n }\n\n public queue() { this.promise = this._worker.queue(); }\n public cancel() { this._worker.cancel(); }\n public setReady() { this._worker.setReady(); }\n public setThrow() { this._worker.setThrow(); }\n\n public get isCanceled(): boolean { return this._worker.isCanceled(); }\n public get wasExecuted(): boolean { return this._worker.wasExecuted(); }\n public get state(): IModelJsNative.TestWorkerState { return this._worker.getState(); }\n\n public get wasQueued() { return IModelJsNative.TestWorkerState.NotQueued !== this.state; }\n public get isQueued() { return IModelJsNative.TestWorkerState.Queued === this.state; }\n public get isRunning() { return IModelJsNative.TestWorkerState.Running === this.state; }\n public get isError() { return IModelJsNative.TestWorkerState.Error === this.state; }\n public get isOk() { return IModelJsNative.TestWorkerState.Ok === this.state; }\n public get isSkipped() { return IModelJsNative.TestWorkerState.Skipped === this.state; }\n public get isAborted() { return IModelJsNative.TestWorkerState.Aborted === this.state; }\n }\n\n async function waitUntil(condition: () => boolean): Promise<void> {\n if (condition())\n return;\n\n await new Promise<void>((resolve: any) => setTimeout(resolve, 100));\n return waitUntil(condition);\n }\n\n it(\"executes asynchronously\", async () => {\n const worker = new Worker();\n await BeDuration.wait(1000);\n expect(worker.wasQueued).to.be.false;\n expect(worker.isCanceled).to.be.false;\n\n worker.queue();\n expect(worker.isQueued || worker.isRunning).to.be.true;\n\n worker.setReady();\n await worker.promise;\n\n expect(worker.wasExecuted).to.be.true;\n expect(worker.isCanceled).to.be.false;\n expect(worker.isOk).to.be.true;\n });\n\n it(\"executes a maximum of 4 simultaneously\", async () => {\n // Create 4 workers. They should all start executing.\n const first = [new Worker(), new Worker(), new Worker(), new Worker()];\n for (const worker of first)\n worker.queue();\n\n await waitUntil(() => first.every((x) => x.isRunning));\n\n // Queue up 2 more workers. They should not start executing until at least one of the first 4 resolves.\n const next = [new Worker(), new Worker()];\n for (const worker of next)\n worker.queue();\n\n await BeDuration.wait(1000);\n expect(first.every((x) => x.isRunning)).to.be.true;\n expect(next.every((x) => x.isQueued)).to.be.true;\n\n // Let the first worker resolve.\n first[0].setReady();\n await first[0].promise;\n expect(first[0].isOk).to.be.true;\n\n // Exactly one of the 2 workers remaining in the queue should start executing.\n await waitUntil(() => next.some((x) => x.isRunning));\n await BeDuration.wait(1000);\n expect(next.every((x) => x.isRunning)).to.be.false;\n\n // Clear the queue.\n const workers = first.concat(next);\n for (const worker of workers)\n worker.setReady();\n\n await Promise.all(workers.map((x) => x.promise).filter((p): p is Promise<void> => p !== undefined)); // eslint-disable-line @typescript-eslint/promise-function-async\n expect(workers.every((x) => x.isOk)).to.be.true;\n });\n\n it(\"skips execution if canceled before execution begins\", async () => {\n const worker = new Worker();\n worker.cancel();\n expect(worker.isCanceled).to.be.true;\n worker.queue();\n await assert.isRejected(worker.promise!, \"canceled\");\n expect(worker.isSkipped).to.be.true;\n expect(worker.wasExecuted).to.be.false;\n });\n\n it(\"executes if canceled after execution begins\", async () => {\n const worker = new Worker();\n worker.queue();\n await waitUntil(() => worker.isRunning);\n worker.cancel();\n worker.setReady();\n await worker.promise;\n expect(worker.isCanceled).to.be.true;\n expect(worker.isSkipped).to.be.false;\n expect(worker.wasExecuted).to.be.true;\n });\n\n it(\"throws\", async () => {\n const worker = new Worker();\n worker.setThrow();\n worker.queue();\n await assert.isRejected(worker.promise!, \"throw\");\n expect(worker.isCanceled).to.be.false;\n expect(worker.isError).to.be.true;\n });\n\n it(\"cancels all workers before iModel is closed\", async () => {\n const resolve = new Worker();\n resolve.setReady();\n const reject = new Worker();\n reject.setThrow();\n\n // These 6 workers will never resolve nor reject explicitly.\n const cancel = [new Worker(), new Worker(), new Worker(), new Worker(), new Worker(), new Worker()];\n\n // Queue up all the workers.\n const workers = cancel.concat([resolve, reject]);\n for (const worker of workers)\n worker.queue();\n\n // Closing the iModel cancels all extant workers.\n imodel.close();\n openIModel();\n\n await expect(Promise.all(workers.map(async (x) => x.promise))).rejectedWith(\"canceled\");\n\n expect(cancel.every((x) => x.isCanceled)).to.be.true;\n expect(cancel.every((x) => x.isAborted || x.isSkipped)).to.be.true;\n expect(resolve.isOk || resolve.isSkipped || resolve.isAborted).to.be.true;\n expect(reject.isError || reject.isSkipped).to.be.true;\n });\n\n it(\"cancels a snap request\", async () => {\n // Block the worker thread pool with 4 workers so that our snap cannot complete before they complete.\n const blockers = [new Worker(), new Worker(), new Worker(), new Worker()];\n blockers.forEach((w) => w.queue());\n\n const sessionId = \"0x222\";\n const snap = imodel.requestSnap(sessionId, {\n testPoint: { x: 1, y: 2, z: 3 },\n closePoint: { x: 1, y: 2, z: 3 },\n id: \"0x111\",\n worldToView: Matrix4d.createIdentity().toJSON(),\n });\n\n const toBeRejected = expect(snap).to.be.rejectedWith(\"aborted\");\n imodel.cancelSnap(sessionId);\n\n // Clear the worker thread pool so the snap request (now canceled) can be processed.\n blockers.forEach((w) => w.setReady());\n await Promise.all(blockers.map(async (w) => w.promise).filter((p): p is Promise<void> => p !== undefined));\n\n await toBeRejected;\n });\n});\n"]}