@itwin/core-backend 5.13.0-dev.1 → 5.13.0-dev.3

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 (466) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChangesetReader.js +3 -3
  14. package/lib/cjs/ChangesetReader.js.map +1 -1
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  16. package/lib/cjs/ChannelControl.js.map +1 -1
  17. package/lib/cjs/CheckpointManager.js.map +1 -1
  18. package/lib/cjs/ClassRegistry.js +5 -5
  19. package/lib/cjs/ClassRegistry.js.map +1 -1
  20. package/lib/cjs/CloudSqlite.js.map +1 -1
  21. package/lib/cjs/CodeService.js.map +1 -1
  22. package/lib/cjs/CodeSpecs.js.map +1 -1
  23. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  24. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  25. package/lib/cjs/DevTools.js.map +1 -1
  26. package/lib/cjs/DisplayStyle.js.map +1 -1
  27. package/lib/cjs/ECDb.js.map +1 -1
  28. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  29. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  30. package/lib/cjs/ECSqlStatement.js.map +1 -1
  31. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  32. package/lib/cjs/EditTxn.js.map +1 -1
  33. package/lib/cjs/Element.js.map +1 -1
  34. package/lib/cjs/ElementAspect.js.map +1 -1
  35. package/lib/cjs/ElementGraphics.js.map +1 -1
  36. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  37. package/lib/cjs/Entity.js.map +1 -1
  38. package/lib/cjs/EntityReferences.js.map +1 -1
  39. package/lib/cjs/ExportGraphics.js.map +1 -1
  40. package/lib/cjs/ExternalSource.js.map +1 -1
  41. package/lib/cjs/FontFile.js.map +1 -1
  42. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  43. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  44. package/lib/cjs/GeometrySummary.js +47 -47
  45. package/lib/cjs/GeometrySummary.js.map +1 -1
  46. package/lib/cjs/IModelDb.d.ts +10 -6
  47. package/lib/cjs/IModelDb.d.ts.map +1 -1
  48. package/lib/cjs/IModelDb.js +18 -14
  49. package/lib/cjs/IModelDb.js.map +1 -1
  50. package/lib/cjs/IModelDbFonts.js.map +1 -1
  51. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  52. package/lib/cjs/IModelHost.js.map +1 -1
  53. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  54. package/lib/cjs/IModelJsFs.js.map +1 -1
  55. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  56. package/lib/cjs/IpcHost.js.map +1 -1
  57. package/lib/cjs/LineStyle.js.map +1 -1
  58. package/lib/cjs/LocalHub.js +1 -1
  59. package/lib/cjs/LocalHub.js.map +1 -1
  60. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  61. package/lib/cjs/LockControl.js.map +1 -1
  62. package/lib/cjs/Material.js.map +1 -1
  63. package/lib/cjs/Model.js.map +1 -1
  64. package/lib/cjs/NativeAppStorage.js.map +1 -1
  65. package/lib/cjs/NativeHost.js.map +1 -1
  66. package/lib/cjs/NavigationRelationship.js.map +1 -1
  67. package/lib/cjs/PartialChangeUnifier.js +7 -7
  68. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  69. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  70. package/lib/cjs/PropertyStore.js.map +1 -1
  71. package/lib/cjs/Relationship.js.map +1 -1
  72. package/lib/cjs/RpcBackend.js.map +1 -1
  73. package/lib/cjs/SQLiteDb.js.map +1 -1
  74. package/lib/cjs/Schema.js.map +1 -1
  75. package/lib/cjs/SchemaSync.js.map +1 -1
  76. package/lib/cjs/SchemaUtils.js.map +1 -1
  77. package/lib/cjs/SheetIndex.js.map +1 -1
  78. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  79. package/lib/cjs/SqliteStatement.js.map +1 -1
  80. package/lib/cjs/StashManager.js.map +1 -1
  81. package/lib/cjs/Texture.js.map +1 -1
  82. package/lib/cjs/TileStorage.js.map +1 -1
  83. package/lib/cjs/TxnManager.js.map +1 -1
  84. package/lib/cjs/ViewDefinition.js.map +1 -1
  85. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  86. package/lib/cjs/ViewStore.js.map +1 -1
  87. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  88. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  89. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  91. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  92. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  93. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  94. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  95. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
  96. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
  97. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  98. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  99. package/lib/cjs/core-backend.js.map +1 -1
  100. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  101. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  102. package/lib/cjs/domains/GenericElements.js.map +1 -1
  103. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  104. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  105. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  106. package/lib/cjs/internal/ECSqlInstanceReshaper.js.map +1 -1
  107. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  108. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  109. package/lib/cjs/internal/HubMock.js.map +1 -1
  110. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  111. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  112. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  113. package/lib/cjs/internal/NoLocks.js.map +1 -1
  114. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  115. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  116. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  117. package/lib/cjs/internal/Symbols.js.map +1 -1
  118. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  119. package/lib/cjs/internal/cross-package.js.map +1 -1
  120. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  121. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  122. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  123. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  124. package/lib/cjs/internal/workspace/WorkspaceImpl.js +12 -1
  125. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  126. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  127. package/lib/cjs/rpc/multipart.js.map +1 -1
  128. package/lib/cjs/rpc/tracing.js.map +1 -1
  129. package/lib/cjs/rpc/web/logging.js.map +1 -1
  130. package/lib/cjs/rpc/web/request.js.map +1 -1
  131. package/lib/cjs/rpc/web/response.js.map +1 -1
  132. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  133. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  134. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  135. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  136. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  137. package/lib/cjs/workspace/Settings.js.map +1 -1
  138. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  139. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  140. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  141. package/lib/cjs/workspace/Workspace.d.ts +2 -0
  142. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  143. package/lib/cjs/workspace/Workspace.js.map +1 -1
  144. package/lib/cjs/workspace/WorkspaceEditor.d.ts +3 -0
  145. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  146. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  147. package/lib/esm/BackendHubAccess.js.map +1 -1
  148. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  149. package/lib/esm/BisCoreSchema.js.map +1 -1
  150. package/lib/esm/BlobContainerService.js.map +1 -1
  151. package/lib/esm/BriefcaseManager.js.map +1 -1
  152. package/lib/esm/CatalogDb.js.map +1 -1
  153. package/lib/esm/Category.js.map +1 -1
  154. package/lib/esm/ChangeSummaryManager.js +2 -2
  155. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  156. package/lib/esm/ChangedElementsDb.js.map +1 -1
  157. package/lib/esm/ChangesetECAdaptor.js +248 -248
  158. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  159. package/lib/esm/ChangesetReader.js +3 -3
  160. package/lib/esm/ChangesetReader.js.map +1 -1
  161. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  162. package/lib/esm/ChannelControl.js.map +1 -1
  163. package/lib/esm/CheckpointManager.js.map +1 -1
  164. package/lib/esm/ClassRegistry.js +5 -5
  165. package/lib/esm/ClassRegistry.js.map +1 -1
  166. package/lib/esm/CloudSqlite.js.map +1 -1
  167. package/lib/esm/CodeService.js.map +1 -1
  168. package/lib/esm/CodeSpecs.js.map +1 -1
  169. package/lib/esm/ConcurrentQuery.js.map +1 -1
  170. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  171. package/lib/esm/DevTools.js.map +1 -1
  172. package/lib/esm/DisplayStyle.js.map +1 -1
  173. package/lib/esm/ECDb.js.map +1 -1
  174. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  175. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  176. package/lib/esm/ECSqlStatement.js.map +1 -1
  177. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  178. package/lib/esm/EditTxn.js.map +1 -1
  179. package/lib/esm/Element.js.map +1 -1
  180. package/lib/esm/ElementAspect.js.map +1 -1
  181. package/lib/esm/ElementGraphics.js.map +1 -1
  182. package/lib/esm/ElementTreeWalker.js.map +1 -1
  183. package/lib/esm/Entity.js.map +1 -1
  184. package/lib/esm/EntityReferences.js.map +1 -1
  185. package/lib/esm/ExportGraphics.js.map +1 -1
  186. package/lib/esm/ExternalSource.js.map +1 -1
  187. package/lib/esm/FontFile.js.map +1 -1
  188. package/lib/esm/GeoCoordConfig.js.map +1 -1
  189. package/lib/esm/GeographicCRSServices.js.map +1 -1
  190. package/lib/esm/GeometrySummary.js +47 -47
  191. package/lib/esm/GeometrySummary.js.map +1 -1
  192. package/lib/esm/IModelDb.d.ts +10 -6
  193. package/lib/esm/IModelDb.d.ts.map +1 -1
  194. package/lib/esm/IModelDb.js +18 -14
  195. package/lib/esm/IModelDb.js.map +1 -1
  196. package/lib/esm/IModelDbFonts.js.map +1 -1
  197. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  198. package/lib/esm/IModelHost.js.map +1 -1
  199. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  200. package/lib/esm/IModelJsFs.js.map +1 -1
  201. package/lib/esm/ImageSourceConversion.js.map +1 -1
  202. package/lib/esm/IpcHost.js.map +1 -1
  203. package/lib/esm/LineStyle.js.map +1 -1
  204. package/lib/esm/LocalHub.js +1 -1
  205. package/lib/esm/LocalHub.js.map +1 -1
  206. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  207. package/lib/esm/LockControl.js.map +1 -1
  208. package/lib/esm/Material.js.map +1 -1
  209. package/lib/esm/Model.js.map +1 -1
  210. package/lib/esm/NativeAppStorage.js.map +1 -1
  211. package/lib/esm/NativeHost.js.map +1 -1
  212. package/lib/esm/NavigationRelationship.js.map +1 -1
  213. package/lib/esm/PartialChangeUnifier.js +7 -7
  214. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  215. package/lib/esm/PromiseMemoizer.js.map +1 -1
  216. package/lib/esm/PropertyStore.js.map +1 -1
  217. package/lib/esm/Relationship.js.map +1 -1
  218. package/lib/esm/RpcBackend.js.map +1 -1
  219. package/lib/esm/SQLiteDb.js.map +1 -1
  220. package/lib/esm/Schema.js.map +1 -1
  221. package/lib/esm/SchemaSync.js.map +1 -1
  222. package/lib/esm/SchemaUtils.js.map +1 -1
  223. package/lib/esm/SheetIndex.js.map +1 -1
  224. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  225. package/lib/esm/SqliteStatement.js.map +1 -1
  226. package/lib/esm/StashManager.js.map +1 -1
  227. package/lib/esm/Texture.js.map +1 -1
  228. package/lib/esm/TileStorage.js.map +1 -1
  229. package/lib/esm/TxnManager.js.map +1 -1
  230. package/lib/esm/ViewDefinition.js.map +1 -1
  231. package/lib/esm/ViewStateHydrator.js.map +1 -1
  232. package/lib/esm/ViewStore.js.map +1 -1
  233. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  234. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  235. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  236. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  237. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  238. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  239. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  240. package/lib/esm/core-backend.js.map +1 -1
  241. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  242. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  243. package/lib/esm/domains/GenericElements.js.map +1 -1
  244. package/lib/esm/domains/GenericSchema.js.map +1 -1
  245. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  246. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  247. package/lib/esm/internal/ECSqlInstanceReshaper.js.map +1 -1
  248. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  249. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  250. package/lib/esm/internal/HubMock.js.map +1 -1
  251. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  252. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  253. package/lib/esm/internal/NativePlatform.js.map +1 -1
  254. package/lib/esm/internal/NoLocks.js.map +1 -1
  255. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  256. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  257. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  258. package/lib/esm/internal/Symbols.js.map +1 -1
  259. package/lib/esm/internal/annotations/fields.js.map +1 -1
  260. package/lib/esm/internal/cross-package.js.map +1 -1
  261. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  262. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  263. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  264. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  265. package/lib/esm/internal/workspace/WorkspaceImpl.js +12 -1
  266. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  267. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  268. package/lib/esm/rpc/multipart.js.map +1 -1
  269. package/lib/esm/rpc/tracing.js.map +1 -1
  270. package/lib/esm/rpc/web/logging.js.map +1 -1
  271. package/lib/esm/rpc/web/request.js.map +1 -1
  272. package/lib/esm/rpc/web/response.js.map +1 -1
  273. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  274. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  275. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  276. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  277. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  278. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  279. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  280. package/lib/esm/test/AttachDb.test.js +11 -11
  281. package/lib/esm/test/AttachDb.test.js.map +1 -1
  282. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  283. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  284. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  285. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  286. package/lib/esm/test/IModelHost.test.js.map +1 -1
  287. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  288. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  289. package/lib/esm/test/IpcHost.test.js.map +1 -1
  290. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  291. package/lib/esm/test/PrintElementTree.js.map +1 -1
  292. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  293. package/lib/esm/test/RevisionUtility.js.map +1 -1
  294. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  295. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  296. package/lib/esm/test/SchemaUtils.test.js +25 -25
  297. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  298. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  299. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  300. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  301. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  302. package/lib/esm/test/TestEditTxn.js.map +1 -1
  303. package/lib/esm/test/TestUtils.js.map +1 -1
  304. package/lib/esm/test/annotations/Fields.test.js +53 -53
  305. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  306. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  307. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  308. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  309. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  310. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  311. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  312. package/lib/esm/test/categories/Category.test.js.map +1 -1
  313. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  314. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  315. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  316. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  317. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  318. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  319. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  320. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  321. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  322. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  323. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  324. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  325. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  326. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  327. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  328. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  329. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  330. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +4 -4
  331. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  332. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  333. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  334. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  335. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  336. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  337. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  338. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  339. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  340. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  341. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  342. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  343. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  344. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  345. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  346. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  347. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  348. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  349. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  350. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  351. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  352. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  353. package/lib/esm/test/example-code/EditTxn.test.d.ts +2 -0
  354. package/lib/esm/test/example-code/EditTxn.test.d.ts.map +1 -0
  355. package/lib/esm/test/example-code/EditTxn.test.js +47 -0
  356. package/lib/esm/test/example-code/EditTxn.test.js.map +1 -0
  357. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  358. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  359. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  360. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  361. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  362. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  363. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  364. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  365. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  366. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  367. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  368. package/lib/esm/test/imageData.js.map +1 -1
  369. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  370. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  371. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  372. package/lib/esm/test/imodel/IModel.test.js +291 -293
  373. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  374. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  375. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  376. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  377. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  378. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  379. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  380. package/lib/esm/test/index.js.map +1 -1
  381. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js +32 -32
  382. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js.map +1 -1
  383. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  384. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  385. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  386. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  387. package/lib/esm/test/rpc/response.test.js.map +1 -1
  388. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  389. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  390. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  391. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  392. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  393. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  394. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  395. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  396. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js +21 -21
  397. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js.map +1 -1
  398. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  399. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  400. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  401. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  402. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
  403. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  404. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  405. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  406. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  407. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  408. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  409. package/lib/esm/test/standalone/ChangesetReader.test.js +313 -313
  410. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  411. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  412. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  413. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  414. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  415. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  416. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  417. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  418. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  419. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  420. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  421. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  422. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  423. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  424. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  425. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  426. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  427. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  428. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  429. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  430. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  431. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  432. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  433. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  434. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  435. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  436. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  437. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  438. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  439. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  440. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  441. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  442. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  443. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  444. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  445. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  446. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  447. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  448. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  449. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  450. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  451. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  452. package/lib/esm/test/standalone/Workspace.test.js +63 -1
  453. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  454. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  455. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  456. package/lib/esm/workspace/Settings.js.map +1 -1
  457. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  458. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  459. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  460. package/lib/esm/workspace/Workspace.d.ts +2 -0
  461. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  462. package/lib/esm/workspace/Workspace.js.map +1 -1
  463. package/lib/esm/workspace/WorkspaceEditor.d.ts +3 -0
  464. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  465. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  466. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"ImageSourceConversion.test.js","sourceRoot":"","sources":["../../../src/test/ImageSourceConversion.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 { expect } from \"chai\";\nimport { imageBufferFromImageSource, imageSourceFromImageBuffer } from \"../ImageSourceConversion\";\nimport { samplePngTexture } from \"./imageData\";\nimport { BinaryImageSource, ImageBuffer, ImageBufferFormat, ImageSourceFormat } from \"@itwin/core-common\";\n\n// samplePngTexture encodes this image:\n// White Red Red\n// Red Blue Red\n// Red Red Green\nconst red = 0x000000ff;\nconst green = 0x0000ff00;\nconst blue = 0x00ff0000;\nconst white = 0x00ffffff;\nconst top = [white, red, red];\nconst middle = [red, blue, red];\nconst bottom = [red, red, green];\n\nconst samplePng: BinaryImageSource = {\n data: new Uint8Array(samplePngTexture.data),\n format: ImageSourceFormat.Png,\n};\n\nfunction getPixel(img: ImageBuffer, x: number, y: number): number {\n const pixelSize = img.numBytesPerPixel;\n const start = y * pixelSize * img.width + x * pixelSize;\n let pixel = 0;\n for (let offset = 0; offset < pixelSize; offset++) {\n let val = img.data[start + offset];\n val = (val << (offset * 8)) >>> 0;\n pixel = (pixel | val) >>> 0;\n }\n\n return pixel;\n}\n\nfunction expectImagePixels(img: ImageBuffer, expected: number[]): void {\n expect(img.width * img.height).to.equal(expected.length);\n const actual = [];\n for (let y = 0; y < img.height; y++) {\n for (let x = 0; x < img.width; x++) {\n actual.push(getPixel(img, x, y));\n }\n }\n\n expect(actual).to.deep.equal(expected);\n}\n\n// Make an ImageBuffer as\n// White Red Red\n// Red Blue Red\n// Red Red Green\n// If an alpha channel is requested, alpha will be 0x7f\nfunction makeImage(wantAlpha: boolean): ImageBuffer {\n const format = wantAlpha ? ImageBufferFormat.Rgba : ImageBufferFormat.Rgb;\n const pixelSize = wantAlpha ? 4 : 3;\n const data = new Uint8Array(pixelSize * 9);\n const lut = [white, red, red, red, blue, red, red, red, green];\n for (let i = 0; i < 9; i++) {\n const value = lut[i];\n const s = i * pixelSize;\n data[s + 0] = value & 0xff;\n data[s + 1] = (value >> 8) & 0xff;\n data[s + 2] = (value >> 16) & 0xff;\n if (wantAlpha) {\n data[s + 3] = 0x7f;\n }\n }\n\n const img = ImageBuffer.create(data, format, 3);\n return img;\n}\n\nfunction expectEqualImageBuffers(a: ImageBuffer, b: ImageBuffer, pixelTolerance = 0): void {\n expect(a.format).to.equal(b.format);\n expect(a.width).to.equal(b.width);\n expect(a.height).to.equal(b.height);\n expect(a.data.length).to.equal(b.data.length);\n for (let i = 0; i < a.data.length; i++) {\n const x = a.data[i];\n const y = b.data[i];\n expect(Math.abs(x - y)).most(pixelTolerance);\n }\n}\n\nfunction computeMaxCompressionError(compressed: ImageBuffer, original: ImageBuffer): number {\n expect(compressed.data.length).to.equal(original.data.length);\n let max = 0;\n for (let i = 0; i < compressed.data.length; i++) {\n max = Math.max(max, Math.abs(compressed.data[i] - original.data[i]));\n }\n\n return max;\n}\n\ndescribe(\"ImageSource conversion\", () => {\n describe(\"imageBufferFromImageSource\", () => {\n it(\"decodes PNG\", () => {\n const buf = imageBufferFromImageSource({ source: samplePng })!;\n expect(buf).not.to.be.undefined;\n expect(buf.width).to.equal(3);\n expect(buf.height).to.equal(3);\n expect(buf.format).to.equal(ImageBufferFormat.Rgb);\n expectImagePixels(buf, [...top, ...middle, ...bottom]);\n });\n\n it(\"preserves alpha channel if RGBA requested\", () => {\n const image = makeImage(true);\n const source = imageSourceFromImageBuffer({ image })!;\n const result = imageBufferFromImageSource({ source, targetFormat: ImageBufferFormat.Rgba })!;\n expect(result.format).to.equal(ImageBufferFormat.Rgba);\n expectImagePixels(result, [...top, ...middle, ...bottom].map((x) => (x | 0x7f000000) >>> 0));\n });\n\n it(\"strips alpha channel if RGB requested\", () => {\n const image = makeImage(true);\n const source = imageSourceFromImageBuffer({ image })!;\n const result = imageBufferFromImageSource({ source, targetFormat: ImageBufferFormat.Rgb })!;\n expect(result.format).to.equal(ImageBufferFormat.Rgb);\n expectImagePixels(result, [...top, ...middle, ...bottom]);\n });\n\n it(\"sets alpha to 255 if RGBA requested for ImageSource lacking transparency\", () => {\n const img = imageBufferFromImageSource({ source: samplePng, targetFormat: ImageBufferFormat.Rgba })!;\n expect(img.format).to.equal(ImageBufferFormat.Rgba);\n expectImagePixels(img, [...top, ...middle, ...bottom].map((x) => ((x | 0xff000000) >>> 0)));\n });\n \n it(\"defaults to RGBA IFF alpha channel is present\", () => {\n const transparent = imageSourceFromImageBuffer({ image: makeImage(true), targetFormat: ImageSourceFormat.Png })!;\n expect(imageBufferFromImageSource({ source: transparent })!.format).to.equal(ImageBufferFormat.Rgba);\n const opaque = imageSourceFromImageBuffer({ image: makeImage(false), targetFormat: ImageSourceFormat.Png })!;\n expect(imageBufferFromImageSource({ source: opaque })!.format).to.equal(ImageBufferFormat.Rgb);\n });\n });\n\n describe(\"imageSourceFromImageBuffer\", () => {\n it(\"encodes to specified format\", () => {\n const image = makeImage(false);\n const png = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Png })!;\n expect(png.format).to.equal(ImageSourceFormat.Png);\n const jpeg = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Jpeg })!;\n expect(jpeg.format).to.equal(ImageSourceFormat.Jpeg);\n\n // PNG is lossless\n expectEqualImageBuffers(imageBufferFromImageSource({ source: png })!, image);\n\n // JPEG is lossy\n expectEqualImageBuffers(imageBufferFromImageSource({ source: jpeg })!, image, 2);\n });\n\n it(\"defaults to PNG IFF alpha channel is present\", () => {\n const transparent = makeImage(true);\n expect(imageSourceFromImageBuffer({ image: transparent })!.format).to.equal(ImageSourceFormat.Png);\n\n const opaque = makeImage(false);\n expect(imageSourceFromImageBuffer({ image: opaque })!.format).to.equal(ImageSourceFormat.Jpeg);\n });\n\n it(\"flips vertically IFF specified\", () => {\n const image = makeImage(false);\n let source = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Png })!;\n let output = imageBufferFromImageSource({ source })!;\n expectImagePixels(output, [...top, ...middle, ...bottom ]);\n\n source = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Png, flipVertically: true })!;\n output = imageBufferFromImageSource({ source })!;\n expectImagePixels(output, [...bottom, ...middle, ...top ]);\n });\n\n it(\"trades quality for size when encoding JPEG\", () => {\n const image = makeImage(false);\n const low = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Jpeg, jpegQuality: 50 })!;\n const medium = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Jpeg, jpegQuality: 75 })!;\n const high = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Jpeg, jpegQuality: 100 })!;\n expect(low.data.length).lessThan(medium.data.length);\n expect(medium.data.length).lessThan(high.data.length);\n\n const highImg = imageBufferFromImageSource({ source: high })!;\n const lowImg = imageBufferFromImageSource({ source: low })!;\n const mediumImg = imageBufferFromImageSource({ source: medium })!;\n\n expect(computeMaxCompressionError(highImg, image)).to.equal(2);\n const mediumError = computeMaxCompressionError(mediumImg, image);\n expect(mediumError).greaterThan(2);\n expect(computeMaxCompressionError(lowImg, image)).greaterThan(mediumError);\n });\n\n it(\"throws if image is in alpha format\", () => {\n const image = ImageBuffer.create(new Uint8Array([1, 2, 3, 4, 5]), ImageBufferFormat.Alpha, 5);\n expect(() => imageSourceFromImageBuffer({ image })).to.throw(\"imageSourceFromImageBuffer cannot be used with alpha-only images\");\n });\n });\n});\n\n"]}
1
+ {"version":3,"file":"ImageSourceConversion.test.js","sourceRoot":"","sources":["../../../src/test/ImageSourceConversion.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport { imageBufferFromImageSource, imageSourceFromImageBuffer } from \"../ImageSourceConversion\";\r\nimport { samplePngTexture } from \"./imageData\";\r\nimport { BinaryImageSource, ImageBuffer, ImageBufferFormat, ImageSourceFormat } from \"@itwin/core-common\";\r\n\r\n// samplePngTexture encodes this image:\r\n// White Red Red\r\n// Red Blue Red\r\n// Red Red Green\r\nconst red = 0x000000ff;\r\nconst green = 0x0000ff00;\r\nconst blue = 0x00ff0000;\r\nconst white = 0x00ffffff;\r\nconst top = [white, red, red];\r\nconst middle = [red, blue, red];\r\nconst bottom = [red, red, green];\r\n\r\nconst samplePng: BinaryImageSource = {\r\n data: new Uint8Array(samplePngTexture.data),\r\n format: ImageSourceFormat.Png,\r\n};\r\n\r\nfunction getPixel(img: ImageBuffer, x: number, y: number): number {\r\n const pixelSize = img.numBytesPerPixel;\r\n const start = y * pixelSize * img.width + x * pixelSize;\r\n let pixel = 0;\r\n for (let offset = 0; offset < pixelSize; offset++) {\r\n let val = img.data[start + offset];\r\n val = (val << (offset * 8)) >>> 0;\r\n pixel = (pixel | val) >>> 0;\r\n }\r\n\r\n return pixel;\r\n}\r\n\r\nfunction expectImagePixels(img: ImageBuffer, expected: number[]): void {\r\n expect(img.width * img.height).to.equal(expected.length);\r\n const actual = [];\r\n for (let y = 0; y < img.height; y++) {\r\n for (let x = 0; x < img.width; x++) {\r\n actual.push(getPixel(img, x, y));\r\n }\r\n }\r\n\r\n expect(actual).to.deep.equal(expected);\r\n}\r\n\r\n// Make an ImageBuffer as\r\n// White Red Red\r\n// Red Blue Red\r\n// Red Red Green\r\n// If an alpha channel is requested, alpha will be 0x7f\r\nfunction makeImage(wantAlpha: boolean): ImageBuffer {\r\n const format = wantAlpha ? ImageBufferFormat.Rgba : ImageBufferFormat.Rgb;\r\n const pixelSize = wantAlpha ? 4 : 3;\r\n const data = new Uint8Array(pixelSize * 9);\r\n const lut = [white, red, red, red, blue, red, red, red, green];\r\n for (let i = 0; i < 9; i++) {\r\n const value = lut[i];\r\n const s = i * pixelSize;\r\n data[s + 0] = value & 0xff;\r\n data[s + 1] = (value >> 8) & 0xff;\r\n data[s + 2] = (value >> 16) & 0xff;\r\n if (wantAlpha) {\r\n data[s + 3] = 0x7f;\r\n }\r\n }\r\n\r\n const img = ImageBuffer.create(data, format, 3);\r\n return img;\r\n}\r\n\r\nfunction expectEqualImageBuffers(a: ImageBuffer, b: ImageBuffer, pixelTolerance = 0): void {\r\n expect(a.format).to.equal(b.format);\r\n expect(a.width).to.equal(b.width);\r\n expect(a.height).to.equal(b.height);\r\n expect(a.data.length).to.equal(b.data.length);\r\n for (let i = 0; i < a.data.length; i++) {\r\n const x = a.data[i];\r\n const y = b.data[i];\r\n expect(Math.abs(x - y)).most(pixelTolerance);\r\n }\r\n}\r\n\r\nfunction computeMaxCompressionError(compressed: ImageBuffer, original: ImageBuffer): number {\r\n expect(compressed.data.length).to.equal(original.data.length);\r\n let max = 0;\r\n for (let i = 0; i < compressed.data.length; i++) {\r\n max = Math.max(max, Math.abs(compressed.data[i] - original.data[i]));\r\n }\r\n\r\n return max;\r\n}\r\n\r\ndescribe(\"ImageSource conversion\", () => {\r\n describe(\"imageBufferFromImageSource\", () => {\r\n it(\"decodes PNG\", () => {\r\n const buf = imageBufferFromImageSource({ source: samplePng })!;\r\n expect(buf).not.to.be.undefined;\r\n expect(buf.width).to.equal(3);\r\n expect(buf.height).to.equal(3);\r\n expect(buf.format).to.equal(ImageBufferFormat.Rgb);\r\n expectImagePixels(buf, [...top, ...middle, ...bottom]);\r\n });\r\n\r\n it(\"preserves alpha channel if RGBA requested\", () => {\r\n const image = makeImage(true);\r\n const source = imageSourceFromImageBuffer({ image })!;\r\n const result = imageBufferFromImageSource({ source, targetFormat: ImageBufferFormat.Rgba })!;\r\n expect(result.format).to.equal(ImageBufferFormat.Rgba);\r\n expectImagePixels(result, [...top, ...middle, ...bottom].map((x) => (x | 0x7f000000) >>> 0));\r\n });\r\n\r\n it(\"strips alpha channel if RGB requested\", () => {\r\n const image = makeImage(true);\r\n const source = imageSourceFromImageBuffer({ image })!;\r\n const result = imageBufferFromImageSource({ source, targetFormat: ImageBufferFormat.Rgb })!;\r\n expect(result.format).to.equal(ImageBufferFormat.Rgb);\r\n expectImagePixels(result, [...top, ...middle, ...bottom]);\r\n });\r\n\r\n it(\"sets alpha to 255 if RGBA requested for ImageSource lacking transparency\", () => {\r\n const img = imageBufferFromImageSource({ source: samplePng, targetFormat: ImageBufferFormat.Rgba })!;\r\n expect(img.format).to.equal(ImageBufferFormat.Rgba);\r\n expectImagePixels(img, [...top, ...middle, ...bottom].map((x) => ((x | 0xff000000) >>> 0)));\r\n });\r\n \r\n it(\"defaults to RGBA IFF alpha channel is present\", () => {\r\n const transparent = imageSourceFromImageBuffer({ image: makeImage(true), targetFormat: ImageSourceFormat.Png })!;\r\n expect(imageBufferFromImageSource({ source: transparent })!.format).to.equal(ImageBufferFormat.Rgba);\r\n const opaque = imageSourceFromImageBuffer({ image: makeImage(false), targetFormat: ImageSourceFormat.Png })!;\r\n expect(imageBufferFromImageSource({ source: opaque })!.format).to.equal(ImageBufferFormat.Rgb);\r\n });\r\n });\r\n\r\n describe(\"imageSourceFromImageBuffer\", () => {\r\n it(\"encodes to specified format\", () => {\r\n const image = makeImage(false);\r\n const png = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Png })!;\r\n expect(png.format).to.equal(ImageSourceFormat.Png);\r\n const jpeg = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Jpeg })!;\r\n expect(jpeg.format).to.equal(ImageSourceFormat.Jpeg);\r\n\r\n // PNG is lossless\r\n expectEqualImageBuffers(imageBufferFromImageSource({ source: png })!, image);\r\n\r\n // JPEG is lossy\r\n expectEqualImageBuffers(imageBufferFromImageSource({ source: jpeg })!, image, 2);\r\n });\r\n\r\n it(\"defaults to PNG IFF alpha channel is present\", () => {\r\n const transparent = makeImage(true);\r\n expect(imageSourceFromImageBuffer({ image: transparent })!.format).to.equal(ImageSourceFormat.Png);\r\n\r\n const opaque = makeImage(false);\r\n expect(imageSourceFromImageBuffer({ image: opaque })!.format).to.equal(ImageSourceFormat.Jpeg);\r\n });\r\n\r\n it(\"flips vertically IFF specified\", () => {\r\n const image = makeImage(false);\r\n let source = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Png })!;\r\n let output = imageBufferFromImageSource({ source })!;\r\n expectImagePixels(output, [...top, ...middle, ...bottom ]);\r\n\r\n source = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Png, flipVertically: true })!;\r\n output = imageBufferFromImageSource({ source })!;\r\n expectImagePixels(output, [...bottom, ...middle, ...top ]);\r\n });\r\n\r\n it(\"trades quality for size when encoding JPEG\", () => {\r\n const image = makeImage(false);\r\n const low = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Jpeg, jpegQuality: 50 })!;\r\n const medium = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Jpeg, jpegQuality: 75 })!;\r\n const high = imageSourceFromImageBuffer({ image, targetFormat: ImageSourceFormat.Jpeg, jpegQuality: 100 })!;\r\n expect(low.data.length).lessThan(medium.data.length);\r\n expect(medium.data.length).lessThan(high.data.length);\r\n\r\n const highImg = imageBufferFromImageSource({ source: high })!;\r\n const lowImg = imageBufferFromImageSource({ source: low })!;\r\n const mediumImg = imageBufferFromImageSource({ source: medium })!;\r\n\r\n expect(computeMaxCompressionError(highImg, image)).to.equal(2);\r\n const mediumError = computeMaxCompressionError(mediumImg, image);\r\n expect(mediumError).greaterThan(2);\r\n expect(computeMaxCompressionError(lowImg, image)).greaterThan(mediumError);\r\n });\r\n\r\n it(\"throws if image is in alpha format\", () => {\r\n const image = ImageBuffer.create(new Uint8Array([1, 2, 3, 4, 5]), ImageBufferFormat.Alpha, 5);\r\n expect(() => imageSourceFromImageBuffer({ image })).to.throw(\"imageSourceFromImageBuffer cannot be used with alpha-only images\");\r\n });\r\n });\r\n});\r\n\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IpcHost.test.js","sourceRoot":"","sources":["../../../src/test/IpcHost.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as sinon from \"sinon\";\nimport { expect } from \"chai\";\nimport { BentleyError, IModelStatus, ITwinError } from \"@itwin/core-bentley\";\nimport { IpcInvokeReturn, IpcSocketBackend, serializeIpcError } from \"@itwin/core-common\";\nimport { IpcHandler, IpcHost } from \"../IpcHost\";\n\ninterface MockIpcInterface {\n mockMethod: () => string;\n throwNestedError: () => never;\n throwCircularError: () => never;\n throwErrorWithNativeCause: () => never;\n throwBentleyErrorWithFunctionMetaData: () => never;\n throwBentleyErrorWithObjectMetaData: () => never;\n throwNestedBentleyErrorWithFunctionMetaData: () => never;\n throwBentleyErrorWithNestedBentleyErrorMetaData: () => never;\n throwErrorWithFunctionProperty: () => never;\n throwErrorWithSymbolProperty: () => never;\n throwErrorWithDateProperty: () => never;\n throwErrorWithClassInstanceProperty: () => never;\n throwErrorWithMixedArray: () => never;\n throwErrorWithNestedArrayProperty: () => never;\n throwBentleyErrorWithMapMetaData: () => never;\n throwBentleyErrorWithCollidingMapMetaData: () => never;\n throwBentleyErrorWithSetMetaData: () => never;\n throwErrorWithSelfReferencingArray: () => never;\n}\n\nclass OuterError extends Error {\n public readonly context: { cause: Error };\n public readonly errors: Error[];\n constructor(public readonly originalError: Error) {\n super(\"outer\");\n this.context = { cause: originalError };\n this.errors = [new Error(\"array-child-1\"), new Error(\"array-child-2\")];\n }\n}\n\nclass MockIpcHandler extends IpcHandler implements MockIpcInterface {\n public override get channelName() { return \"mock-channel\"; }\n\n public mockMethod(): string {\n return \"mock-value\";\n }\n\n public throwNestedError(): never {\n const inner = new Error(\"inner-message\");\n throw new OuterError(inner);\n }\n\n public throwCircularError(): never {\n const err = new Error(\"circular\") as any;\n err.cause = err; // circular reference\n throw err;\n }\n\n public throwErrorWithNativeCause(): never {\n throw new Error(\"native-cause-outer\", { cause: new Error(\"native-cause-inner\") });\n }\n\n public throwBentleyErrorWithFunctionMetaData(): never {\n throw new BentleyError(IModelStatus.BadArg, \"bentley-fn-meta\", () => ({ detail: \"computed\" }));\n }\n\n public throwBentleyErrorWithObjectMetaData(): never {\n throw new BentleyError(IModelStatus.BadArg, \"bentley-obj-meta\", { detail: \"static\" });\n }\n\n public throwNestedBentleyErrorWithFunctionMetaData(): never {\n const inner = new BentleyError(IModelStatus.BadArg, \"inner-bentley\", () => ({ detail: \"nested-computed\" }));\n const outer = new Error(\"outer\") as any;\n outer.cause = inner;\n throw outer;\n }\n\n public throwBentleyErrorWithNestedBentleyErrorMetaData(): never {\n const inner = new BentleyError(IModelStatus.BadArg, \"inner-bentley-in-metadata\", { detail: \"inner-value\" });\n throw new BentleyError(IModelStatus.BadArg, \"bentley-nested-bentley-meta\", { nested: inner });\n }\n\n public throwErrorWithFunctionProperty(): never {\n const err = new Error(\"fn-prop\") as any;\n err.retry = () => {};\n throw err;\n }\n\n public throwErrorWithSymbolProperty(): never {\n const err = new Error(\"sym-prop\") as any;\n err[Symbol(\"tag\")] = \"should-be-dropped\";\n throw err;\n }\n\n public throwErrorWithDateProperty(): never {\n const err = new Error(\"date-prop\") as any;\n err.timestamp = new Date(\"2024-01-01\");\n throw err;\n }\n\n public throwErrorWithClassInstanceProperty(): never {\n const err = new Error(\"class-instance-prop\") as any;\n err.request = new URL(\"https://example.com\"); // arbitrary non-plain class instance\n throw err;\n }\n\n public throwErrorWithMixedArray(): never {\n const err = new Error(\"mixed-array\") as any;\n err.items = [\"string-value\", 42, new Date(\"2024-01-01\"), new URL(\"https://example.com\"), new Error(\"array-error\")];\n throw err;\n }\n\n public throwErrorWithNestedArrayProperty(): never {\n const err = new Error(\"nested-array\") as any;\n err.matrix = [[1, 2], [3, 4]];\n throw err;\n }\n\n public throwBentleyErrorWithMapMetaData(): never {\n throw new BentleyError(IModelStatus.BadArg, \"bentley-map-meta\", new Map([[\"detail\", \"map-value\"]]));\n }\n\n public throwBentleyErrorWithCollidingMapMetaData(): never {\n // Numeric key `1` and string key `\"1\"` stringify to the same \"1\", so they'd collide without disambiguation.\n throw new BentleyError(IModelStatus.BadArg, \"bentley-colliding-map-meta\", new Map<number | string, string>([[1, \"num-one\"], [\"1\", \"str-one\"]]));\n }\n\n public throwBentleyErrorWithSetMetaData(): never {\n throw new BentleyError(IModelStatus.BadArg, \"bentley-set-meta\", new Set([\"tag1\", \"tag2\"]));\n }\n\n public throwErrorWithSelfReferencingArray(): never {\n const err = new Error(\"self-referencing-array\") as any;\n const arr: any[] = [];\n arr.push(arr); // array that contains itself\n err.items = arr;\n throw err;\n }\n\n #privateFunction(): void { }\n}\n\ndescribe(\"IpcHost\", () => {\n let socket: sinon.SinonStubbedInstance<IpcSocketBackend>;\n\n beforeEach(async () => {\n socket = {\n send: sinon.stub(),\n addListener: sinon.stub(),\n removeListener: sinon.stub(),\n handle: sinon.stub(),\n };\n\n await IpcHost.startup({ ipcHost: { socket } });\n });\n\n afterEach(() => {\n (IpcHost as any)._nextInvokeId = 0;\n (IpcHost as any)._pendingInvokes.clear();\n });\n\n describe(\"IpcHandler\", () => {\n let handler: (...args: any[]) => Promise<IpcInvokeReturn>;\n\n beforeEach(() => {\n MockIpcHandler.register();\n const handleCall = socket.handle.getCalls().find((call) => call.args[0] === \"itwin.mock-channel\")!;\n expect(handleCall).to.not.be.undefined;\n handler = handleCall.args[1];\n });\n\n it(\"should call public methods\", async () => {\n const ipcReturn = await handler(undefined, \"mockMethod\");\n expect(ipcReturn.result).to.equal(\"mock-value\");\n expect(ipcReturn.error).to.be.undefined;\n });\n\n it(\"should not call private methods\", async () => {\n const ipcReturn = await handler(undefined, \"#privateFunction\");\n expect(ipcReturn.result).to.be.undefined;\n expect(ipcReturn.error).to.not.be.undefined;\n });\n\n it(\"should not call methods inherited from Object\", async () => {\n const ipcReturn = await handler(undefined, \"toString\");\n expect(ipcReturn.result).to.be.undefined;\n expect(ipcReturn.error).to.not.be.undefined;\n });\n\n it(\"should serialize nested Error properties preserving message and stack\", async () => {\n const ipcReturn = await handler(undefined, \"throwNestedError\");\n const error = ipcReturn.error as any;\n // Top-level error\n expect(error.message).to.equal(\"outer\");\n expect(error.stack).to.be.a(\"string\");\n // Direct Error property\n expect(error.originalError.message).to.equal(\"inner-message\");\n expect(error.originalError.stack).to.be.a(\"string\");\n // Error nested inside a plain-object property\n expect(error.context.cause.message).to.equal(\"inner-message\");\n expect(error.context.cause.stack).to.be.a(\"string\");\n // Array of Errors stays an array\n expect(Array.isArray(error.errors)).to.be.true;\n expect(error.errors[0].message).to.equal(\"array-child-1\");\n expect(error.errors[1].message).to.equal(\"array-child-2\");\n });\n\n it(\"should omit stack on nested Errors when IpcHost.noStack is set\", async () => {\n const originalNoStack = IpcHost.noStack;\n IpcHost.noStack = true;\n try {\n const ipcReturn = await handler(undefined, \"throwNestedError\");\n const error = ipcReturn.error as any;\n expect(error.stack).to.be.undefined;\n expect(error.originalError.stack).to.be.undefined;\n expect(error.context.cause.stack).to.be.undefined;\n expect(error.errors[0].stack).to.be.undefined;\n expect(error.errors[1].stack).to.be.undefined;\n } finally {\n IpcHost.noStack = originalNoStack;\n }\n });\n\n it(\"should not infinitely recurse on circular Error references\", async () => {\n const ipcReturn = await handler(undefined, \"throwCircularError\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"circular\");\n expect(error.cause).to.be.undefined;\n });\n\n it(\"should serialize native Error.cause even though it is non-enumerable\", async () => {\n const ipcReturn = await handler(undefined, \"throwErrorWithNativeCause\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"native-cause-outer\");\n expect(error.cause).to.not.be.undefined;\n expect(error.cause.message).to.equal(\"native-cause-inner\");\n expect(error.cause.stack).to.be.a(\"string\");\n });\n\n it(\"should drop _metaData and expose loggingMetadata when BentleyError has a GetMetaDataFunction\", async () => {\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithFunctionMetaData\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"bentley-fn-meta\");\n // _metaData is a function — must not survive serialization\n expect(error._metaData).to.be.undefined;\n // loggingMetadata should be the resolved object\n expect(error.loggingMetadata).to.deep.equal({ detail: \"computed\" });\n });\n\n it(\"should drop _metaData and expose loggingMetadata when BentleyError has an object metaData\", async () => {\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithObjectMetaData\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"bentley-obj-meta\");\n expect(error._metaData).to.be.undefined;\n expect(error.loggingMetadata).to.deep.equal({ detail: \"static\" });\n });\n\n it(\"should drop function-valued _metaData on a nested BentleyError and still expose loggingMetadata\", async () => {\n const ipcReturn = await handler(undefined, \"throwNestedBentleyErrorWithFunctionMetaData\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"outer\");\n // The nested BentleyError inside .cause must also have _metaData stripped and loggingMetadata populated\n expect(error.cause).to.not.be.undefined;\n expect(error.cause.message).to.equal(\"inner-bentley\");\n expect(error.cause._metaData).to.be.undefined;\n expect(error.cause.loggingMetadata).to.deep.equal({ detail: \"nested-computed\" });\n });\n\n it(\"should drop arbitrary function-valued properties from a thrown Error\", async () => {\n const ipcReturn = await handler(undefined, \"throwErrorWithFunctionProperty\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"fn-prop\");\n expect(error.retry).to.be.undefined;\n });\n\n it(\"should not include symbol-keyed properties from a thrown Error\", async () => {\n const ipcReturn = await handler(undefined, \"throwErrorWithSymbolProperty\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"sym-prop\");\n // { ...e } copies enumerable own symbol-keyed properties too.\n // The serializer explicitly strips them (they cannot be structured-cloned).\n expect(Object.getOwnPropertySymbols(error)).to.have.length(0);\n });\n\n it(\"should preserve Date properties\", async () => {\n const ipcReturn = await handler(undefined, \"throwErrorWithDateProperty\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"date-prop\");\n expect(error.timestamp).to.deep.equal(new Date(\"2024-01-01\"));\n });\n\n it(\"should drop non-plain class instance properties\", async () => {\n const ipcReturn = await handler(undefined, \"throwErrorWithClassInstanceProperty\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"class-instance-prop\");\n expect(error.request).to.be.undefined;\n });\n\n it(\"should sanitize mixed arrays: preserve primitives and Dates, drop non-plain class instances, recurse into Errors\", async () => {\n const ipcReturn = await handler(undefined, \"throwErrorWithMixedArray\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"mixed-array\");\n expect(Array.isArray(error.items)).to.be.true;\n expect(error.items[0]).to.equal(\"string-value\"); // primitive: preserved\n expect(error.items[1]).to.equal(42); // primitive: preserved\n expect(error.items[2]).to.deep.equal(new Date(\"2024-01-01\")); // Date: preserved\n expect(error.items[3]).to.be.undefined; // class instance: dropped (→ undefined)\n expect(error.items[4].message).to.equal(\"array-error\"); // Error: recursed\n });\n\n it(\"should preserve nested arrays (array-of-arrays)\", async () => {\n const ipcReturn = await handler(undefined, \"throwErrorWithNestedArrayProperty\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"nested-array\");\n expect(error.matrix).to.deep.equal([[1, 2], [3, 4]]);\n });\n\n it(\"should not infinitely recurse on a self-referencing array\", async () => {\n const ipcReturn = await handler(undefined, \"throwErrorWithSelfReferencingArray\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"self-referencing-array\");\n expect(error.items[0]).to.be.undefined; // cycle detected: dropped rather than recursing forever\n });\n\n it(\"should normalize Map-valued loggingMetadata to a JSON-safe plain object (survives every transport)\", async () => {\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithMapMetaData\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"bentley-map-meta\");\n expect(error.loggingMetadata).to.deep.equal({ detail: \"map-value\" });\n });\n\n it(\"should disambiguate Map-valued loggingMetadata keys that stringify to the same value\", async () => {\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithCollidingMapMetaData\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"bentley-colliding-map-meta\");\n expect(error.loggingMetadata).to.deep.equal({ \"1\": \"num-one\", \"1#1\": \"str-one\" });\n });\n\n it(\"should preserve iTwinErrorId/loggingMetadata of a BentleyError nested inside loggingMetadata\", async () => {\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithNestedBentleyErrorMetaData\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"bentley-nested-bentley-meta\");\n const nested = error.loggingMetadata.nested;\n expect(nested.message).to.equal(\"inner-bentley-in-metadata\");\n expect(nested.iTwinErrorId).to.deep.equal({ scope: BentleyError.iTwinErrorScope, key: nested.iTwinErrorId.key });\n expect(nested.loggingMetadata).to.deep.equal({ detail: \"inner-value\" });\n });\n\n it(\"should normalize Set-valued loggingMetadata to a JSON-safe array (survives every transport)\", async () => {\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithSetMetaData\");\n const error = ipcReturn.error as any;\n expect(error.message).to.equal(\"bentley-set-meta\");\n expect(error.loggingMetadata).to.deep.equal([\"tag1\", \"tag2\"]);\n });\n });\n\n describe(\"IpcHost.invoke\", () => {\n /** Simulates the frontend: captures per-request listeners and provides a `respond` helper by call index. */\n function mockFrontend() {\n const listeners = new Map<string, (event: any, result: any) => void>();\n socket.addListener.callsFake((ch: string, fn: (event: any, result: any) => void) => {\n listeners.set(ch, fn);\n return () => listeners.delete(ch);\n });\n\n return {\n listeners,\n responseChannel: (callIndex: number) => socket.send.getCall(callIndex).args[1] as string,\n respond: (callIndex: number, result: unknown) => {\n const responseChannel = socket.send.getCall(callIndex).args[1] as string;\n const listener = listeners.get(responseChannel);\n if (!listener)\n throw new Error(`No listener found for response channel ${responseChannel}`);\n listener(undefined, result);\n },\n };\n }\n\n it(\"should resolve with the frontend's response\", async () => {\n const frontend = mockFrontend();\n const promise = IpcHost.invoke(\"ch\", \"a\", \"b\");\n frontend.respond(0, \"hello\");\n expect(await promise).to.equal(\"hello\");\n // the pending-invoke entry must be removed so the map does not grow unboundedly\n expect((IpcHost as any)._pendingInvokes.size).to.equal(0);\n });\n\n it(\"should route concurrent invokes to the correct caller\", async () => {\n const frontend = mockFrontend();\n const p1 = IpcHost.invoke(\"ch\");\n const p2 = IpcHost.invoke(\"ch\");\n\n // respond out of order\n frontend.respond(1, \"second\");\n frontend.respond(0, \"first\");\n\n expect(await p1).to.equal(\"first\");\n expect(await p2).to.equal(\"second\");\n });\n\n it(\"should remove the response listener after a response\", async () => {\n const frontend = mockFrontend();\n const promise = IpcHost.invoke(\"ch\");\n const responseChannel = frontend.responseChannel(0);\n expect(frontend.listeners.has(responseChannel)).to.be.true;\n\n frontend.respond(0, \"done\");\n await promise;\n expect(frontend.listeners.has(responseChannel)).to.be.false;\n });\n\n it(\"should reject pending invokes when IpcHost is shut down\", async () => {\n const frontend = mockFrontend();\n const promise = IpcHost.invoke(\"ch\");\n const responseChannel = frontend.responseChannel(0);\n // attach handler immediately so the rejection is observed (and not \"unhandled\")\n const caught = promise.then(() => undefined, (e: Error) => e);\n\n await IpcHost.shutdown();\n\n const err = await caught;\n expect(err).to.be.instanceOf(Error);\n expect((err as Error).message).to.contain(\"shut down\");\n // the listener must be cleaned up so it does not leak past shutdown\n expect(frontend.listeners.has(responseChannel)).to.be.false;\n });\n\n it(\"should reject all pending invokes when IpcHost is shut down with 2+ concurrent invokes, removing all listeners\", async () => {\n const frontend = mockFrontend();\n const p1 = IpcHost.invoke(\"ch1\");\n const p2 = IpcHost.invoke(\"ch2\");\n const responseChannel1 = frontend.responseChannel(0);\n const responseChannel2 = frontend.responseChannel(1);\n // attach handlers immediately so the rejections are observed (and not \"unhandled\")\n const caught1 = p1.then(() => undefined, (e: Error) => e);\n const caught2 = p2.then(() => undefined, (e: Error) => e);\n expect((IpcHost as any)._pendingInvokes.size).to.equal(2);\n\n await IpcHost.shutdown();\n\n const err1 = await caught1;\n const err2 = await caught2;\n expect(err1).to.be.instanceOf(Error);\n expect((err1 as Error).message).to.contain(\"shut down\");\n expect(err2).to.be.instanceOf(Error);\n expect((err2 as Error).message).to.contain(\"shut down\");\n expect(frontend.listeners.has(responseChannel1)).to.be.false;\n expect(frontend.listeners.has(responseChannel2)).to.be.false;\n expect((IpcHost as any)._pendingInvokes.size).to.equal(0);\n });\n\n it(\"should reject and clean up the listener/pending-invoke entry when `send` throws synchronously\", async () => {\n const frontend = mockFrontend();\n socket.send.throws(new Error(\"send failed\"));\n const promise = IpcHost.invoke(\"ch\");\n\n let caught: any;\n try {\n await promise;\n expect.fail(\"invoke should have rejected\");\n } catch (err) {\n caught = err;\n }\n expect(caught).to.be.instanceOf(Error);\n expect(caught.message).to.equal(\"send failed\");\n // the listener and _pendingInvokes entry must not leak when `send` throws synchronously\n expect(frontend.listeners.size).to.equal(0);\n expect((IpcHost as any)._pendingInvokes.size).to.equal(0);\n });\n\n it(\"should rethrow a frontend-thrown BentleyError from makeIpcProxy preserving ITwinError identity and metadata\", async () => {\n const frontend = mockFrontend();\n const proxy = IpcHost.makeIpcProxy<{ doIt: () => Promise<void> }>(\"ch\");\n const promise = proxy.doIt();\n\n // simulate the frontend handler serializing a thrown BentleyError into the invoke-response envelope\n const thrown = new BentleyError(IModelStatus.NotFound, \"boom\", () => ({ detail: 42 }));\n thrown.name = \"MyFrontendError\";\n const serialized = serializeIpcError(thrown, true);\n frontend.respond(0, serialized);\n\n let caught: any;\n try {\n await promise;\n expect.fail(\"proxy call should have rejected\");\n } catch (err) {\n caught = err;\n }\n // Following the ITwinError paradigm, the backend rebuilds a plain Error (no cross-process class identity)\n // that callers identify via ITwinError.isError / BentleyError.isError rather than instanceof.\n expect(ITwinError.isError(caught, BentleyError.iTwinErrorScope, \"MyFrontendError\")).to.be.true;\n expect(caught.name).to.equal(\"MyFrontendError\");\n expect(BentleyError.isError(caught, IModelStatus.NotFound)).to.be.true;\n expect(caught.message).to.equal(\"boom\");\n expect(caught.loggingMetadata).to.deep.equal({ detail: 42 });\n });\n\n it(\"should not let a non-string thrown `message` field overwrite the 'unknown error' guard in rebuildIpcError\", async () => {\n const frontend = mockFrontend();\n const proxy = IpcHost.makeIpcProxy<{ doIt: () => Promise<void> }>(\"ch\");\n const promise = proxy.doIt();\n\n // simulate a thrown non-Error value with a non-string `message` field (e.g. `throw { message: 123 }`)\n const serialized = serializeIpcError({ message: 123 }, true);\n frontend.respond(0, serialized);\n\n let caught: any;\n try {\n await promise;\n expect.fail(\"proxy call should have rejected\");\n } catch (err) {\n caught = err;\n }\n expect(caught).to.be.instanceOf(Error);\n expect(caught.message).to.equal(\"unknown error\");\n });\n\n it(\"should rethrow a plain Error from makeIpcProxy when the frontend threw a non-BentleyError\", async () => {\n const frontend = mockFrontend();\n const proxy = IpcHost.makeIpcProxy<{ doIt: () => Promise<void> }>(\"ch\");\n const promise = proxy.doIt();\n\n const serialized = serializeIpcError(new Error(\"plain failure\"), true);\n frontend.respond(0, serialized);\n\n let caught: any;\n try {\n await promise;\n expect.fail(\"proxy call should have rejected\");\n } catch (err) {\n caught = err;\n }\n expect(caught).to.be.instanceOf(Error);\n expect(BentleyError.isError(caught)).to.be.false;\n expect(caught.message).to.equal(\"plain failure\");\n });\n });\n});\n"]}
1
+ {"version":3,"file":"IpcHost.test.js","sourceRoot":"","sources":["../../../src/test/IpcHost.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as sinon from \"sinon\";\r\nimport { expect } from \"chai\";\r\nimport { BentleyError, IModelStatus, ITwinError } from \"@itwin/core-bentley\";\r\nimport { IpcInvokeReturn, IpcSocketBackend, serializeIpcError } from \"@itwin/core-common\";\r\nimport { IpcHandler, IpcHost } from \"../IpcHost\";\r\n\r\ninterface MockIpcInterface {\r\n mockMethod: () => string;\r\n throwNestedError: () => never;\r\n throwCircularError: () => never;\r\n throwErrorWithNativeCause: () => never;\r\n throwBentleyErrorWithFunctionMetaData: () => never;\r\n throwBentleyErrorWithObjectMetaData: () => never;\r\n throwNestedBentleyErrorWithFunctionMetaData: () => never;\r\n throwBentleyErrorWithNestedBentleyErrorMetaData: () => never;\r\n throwErrorWithFunctionProperty: () => never;\r\n throwErrorWithSymbolProperty: () => never;\r\n throwErrorWithDateProperty: () => never;\r\n throwErrorWithClassInstanceProperty: () => never;\r\n throwErrorWithMixedArray: () => never;\r\n throwErrorWithNestedArrayProperty: () => never;\r\n throwBentleyErrorWithMapMetaData: () => never;\r\n throwBentleyErrorWithCollidingMapMetaData: () => never;\r\n throwBentleyErrorWithSetMetaData: () => never;\r\n throwErrorWithSelfReferencingArray: () => never;\r\n}\r\n\r\nclass OuterError extends Error {\r\n public readonly context: { cause: Error };\r\n public readonly errors: Error[];\r\n constructor(public readonly originalError: Error) {\r\n super(\"outer\");\r\n this.context = { cause: originalError };\r\n this.errors = [new Error(\"array-child-1\"), new Error(\"array-child-2\")];\r\n }\r\n}\r\n\r\nclass MockIpcHandler extends IpcHandler implements MockIpcInterface {\r\n public override get channelName() { return \"mock-channel\"; }\r\n\r\n public mockMethod(): string {\r\n return \"mock-value\";\r\n }\r\n\r\n public throwNestedError(): never {\r\n const inner = new Error(\"inner-message\");\r\n throw new OuterError(inner);\r\n }\r\n\r\n public throwCircularError(): never {\r\n const err = new Error(\"circular\") as any;\r\n err.cause = err; // circular reference\r\n throw err;\r\n }\r\n\r\n public throwErrorWithNativeCause(): never {\r\n throw new Error(\"native-cause-outer\", { cause: new Error(\"native-cause-inner\") });\r\n }\r\n\r\n public throwBentleyErrorWithFunctionMetaData(): never {\r\n throw new BentleyError(IModelStatus.BadArg, \"bentley-fn-meta\", () => ({ detail: \"computed\" }));\r\n }\r\n\r\n public throwBentleyErrorWithObjectMetaData(): never {\r\n throw new BentleyError(IModelStatus.BadArg, \"bentley-obj-meta\", { detail: \"static\" });\r\n }\r\n\r\n public throwNestedBentleyErrorWithFunctionMetaData(): never {\r\n const inner = new BentleyError(IModelStatus.BadArg, \"inner-bentley\", () => ({ detail: \"nested-computed\" }));\r\n const outer = new Error(\"outer\") as any;\r\n outer.cause = inner;\r\n throw outer;\r\n }\r\n\r\n public throwBentleyErrorWithNestedBentleyErrorMetaData(): never {\r\n const inner = new BentleyError(IModelStatus.BadArg, \"inner-bentley-in-metadata\", { detail: \"inner-value\" });\r\n throw new BentleyError(IModelStatus.BadArg, \"bentley-nested-bentley-meta\", { nested: inner });\r\n }\r\n\r\n public throwErrorWithFunctionProperty(): never {\r\n const err = new Error(\"fn-prop\") as any;\r\n err.retry = () => {};\r\n throw err;\r\n }\r\n\r\n public throwErrorWithSymbolProperty(): never {\r\n const err = new Error(\"sym-prop\") as any;\r\n err[Symbol(\"tag\")] = \"should-be-dropped\";\r\n throw err;\r\n }\r\n\r\n public throwErrorWithDateProperty(): never {\r\n const err = new Error(\"date-prop\") as any;\r\n err.timestamp = new Date(\"2024-01-01\");\r\n throw err;\r\n }\r\n\r\n public throwErrorWithClassInstanceProperty(): never {\r\n const err = new Error(\"class-instance-prop\") as any;\r\n err.request = new URL(\"https://example.com\"); // arbitrary non-plain class instance\r\n throw err;\r\n }\r\n\r\n public throwErrorWithMixedArray(): never {\r\n const err = new Error(\"mixed-array\") as any;\r\n err.items = [\"string-value\", 42, new Date(\"2024-01-01\"), new URL(\"https://example.com\"), new Error(\"array-error\")];\r\n throw err;\r\n }\r\n\r\n public throwErrorWithNestedArrayProperty(): never {\r\n const err = new Error(\"nested-array\") as any;\r\n err.matrix = [[1, 2], [3, 4]];\r\n throw err;\r\n }\r\n\r\n public throwBentleyErrorWithMapMetaData(): never {\r\n throw new BentleyError(IModelStatus.BadArg, \"bentley-map-meta\", new Map([[\"detail\", \"map-value\"]]));\r\n }\r\n\r\n public throwBentleyErrorWithCollidingMapMetaData(): never {\r\n // Numeric key `1` and string key `\"1\"` stringify to the same \"1\", so they'd collide without disambiguation.\r\n throw new BentleyError(IModelStatus.BadArg, \"bentley-colliding-map-meta\", new Map<number | string, string>([[1, \"num-one\"], [\"1\", \"str-one\"]]));\r\n }\r\n\r\n public throwBentleyErrorWithSetMetaData(): never {\r\n throw new BentleyError(IModelStatus.BadArg, \"bentley-set-meta\", new Set([\"tag1\", \"tag2\"]));\r\n }\r\n\r\n public throwErrorWithSelfReferencingArray(): never {\r\n const err = new Error(\"self-referencing-array\") as any;\r\n const arr: any[] = [];\r\n arr.push(arr); // array that contains itself\r\n err.items = arr;\r\n throw err;\r\n }\r\n\r\n #privateFunction(): void { }\r\n}\r\n\r\ndescribe(\"IpcHost\", () => {\r\n let socket: sinon.SinonStubbedInstance<IpcSocketBackend>;\r\n\r\n beforeEach(async () => {\r\n socket = {\r\n send: sinon.stub(),\r\n addListener: sinon.stub(),\r\n removeListener: sinon.stub(),\r\n handle: sinon.stub(),\r\n };\r\n\r\n await IpcHost.startup({ ipcHost: { socket } });\r\n });\r\n\r\n afterEach(() => {\r\n (IpcHost as any)._nextInvokeId = 0;\r\n (IpcHost as any)._pendingInvokes.clear();\r\n });\r\n\r\n describe(\"IpcHandler\", () => {\r\n let handler: (...args: any[]) => Promise<IpcInvokeReturn>;\r\n\r\n beforeEach(() => {\r\n MockIpcHandler.register();\r\n const handleCall = socket.handle.getCalls().find((call) => call.args[0] === \"itwin.mock-channel\")!;\r\n expect(handleCall).to.not.be.undefined;\r\n handler = handleCall.args[1];\r\n });\r\n\r\n it(\"should call public methods\", async () => {\r\n const ipcReturn = await handler(undefined, \"mockMethod\");\r\n expect(ipcReturn.result).to.equal(\"mock-value\");\r\n expect(ipcReturn.error).to.be.undefined;\r\n });\r\n\r\n it(\"should not call private methods\", async () => {\r\n const ipcReturn = await handler(undefined, \"#privateFunction\");\r\n expect(ipcReturn.result).to.be.undefined;\r\n expect(ipcReturn.error).to.not.be.undefined;\r\n });\r\n\r\n it(\"should not call methods inherited from Object\", async () => {\r\n const ipcReturn = await handler(undefined, \"toString\");\r\n expect(ipcReturn.result).to.be.undefined;\r\n expect(ipcReturn.error).to.not.be.undefined;\r\n });\r\n\r\n it(\"should serialize nested Error properties preserving message and stack\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwNestedError\");\r\n const error = ipcReturn.error as any;\r\n // Top-level error\r\n expect(error.message).to.equal(\"outer\");\r\n expect(error.stack).to.be.a(\"string\");\r\n // Direct Error property\r\n expect(error.originalError.message).to.equal(\"inner-message\");\r\n expect(error.originalError.stack).to.be.a(\"string\");\r\n // Error nested inside a plain-object property\r\n expect(error.context.cause.message).to.equal(\"inner-message\");\r\n expect(error.context.cause.stack).to.be.a(\"string\");\r\n // Array of Errors stays an array\r\n expect(Array.isArray(error.errors)).to.be.true;\r\n expect(error.errors[0].message).to.equal(\"array-child-1\");\r\n expect(error.errors[1].message).to.equal(\"array-child-2\");\r\n });\r\n\r\n it(\"should omit stack on nested Errors when IpcHost.noStack is set\", async () => {\r\n const originalNoStack = IpcHost.noStack;\r\n IpcHost.noStack = true;\r\n try {\r\n const ipcReturn = await handler(undefined, \"throwNestedError\");\r\n const error = ipcReturn.error as any;\r\n expect(error.stack).to.be.undefined;\r\n expect(error.originalError.stack).to.be.undefined;\r\n expect(error.context.cause.stack).to.be.undefined;\r\n expect(error.errors[0].stack).to.be.undefined;\r\n expect(error.errors[1].stack).to.be.undefined;\r\n } finally {\r\n IpcHost.noStack = originalNoStack;\r\n }\r\n });\r\n\r\n it(\"should not infinitely recurse on circular Error references\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwCircularError\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"circular\");\r\n expect(error.cause).to.be.undefined;\r\n });\r\n\r\n it(\"should serialize native Error.cause even though it is non-enumerable\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwErrorWithNativeCause\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"native-cause-outer\");\r\n expect(error.cause).to.not.be.undefined;\r\n expect(error.cause.message).to.equal(\"native-cause-inner\");\r\n expect(error.cause.stack).to.be.a(\"string\");\r\n });\r\n\r\n it(\"should drop _metaData and expose loggingMetadata when BentleyError has a GetMetaDataFunction\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithFunctionMetaData\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"bentley-fn-meta\");\r\n // _metaData is a function — must not survive serialization\r\n expect(error._metaData).to.be.undefined;\r\n // loggingMetadata should be the resolved object\r\n expect(error.loggingMetadata).to.deep.equal({ detail: \"computed\" });\r\n });\r\n\r\n it(\"should drop _metaData and expose loggingMetadata when BentleyError has an object metaData\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithObjectMetaData\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"bentley-obj-meta\");\r\n expect(error._metaData).to.be.undefined;\r\n expect(error.loggingMetadata).to.deep.equal({ detail: \"static\" });\r\n });\r\n\r\n it(\"should drop function-valued _metaData on a nested BentleyError and still expose loggingMetadata\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwNestedBentleyErrorWithFunctionMetaData\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"outer\");\r\n // The nested BentleyError inside .cause must also have _metaData stripped and loggingMetadata populated\r\n expect(error.cause).to.not.be.undefined;\r\n expect(error.cause.message).to.equal(\"inner-bentley\");\r\n expect(error.cause._metaData).to.be.undefined;\r\n expect(error.cause.loggingMetadata).to.deep.equal({ detail: \"nested-computed\" });\r\n });\r\n\r\n it(\"should drop arbitrary function-valued properties from a thrown Error\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwErrorWithFunctionProperty\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"fn-prop\");\r\n expect(error.retry).to.be.undefined;\r\n });\r\n\r\n it(\"should not include symbol-keyed properties from a thrown Error\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwErrorWithSymbolProperty\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"sym-prop\");\r\n // { ...e } copies enumerable own symbol-keyed properties too.\r\n // The serializer explicitly strips them (they cannot be structured-cloned).\r\n expect(Object.getOwnPropertySymbols(error)).to.have.length(0);\r\n });\r\n\r\n it(\"should preserve Date properties\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwErrorWithDateProperty\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"date-prop\");\r\n expect(error.timestamp).to.deep.equal(new Date(\"2024-01-01\"));\r\n });\r\n\r\n it(\"should drop non-plain class instance properties\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwErrorWithClassInstanceProperty\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"class-instance-prop\");\r\n expect(error.request).to.be.undefined;\r\n });\r\n\r\n it(\"should sanitize mixed arrays: preserve primitives and Dates, drop non-plain class instances, recurse into Errors\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwErrorWithMixedArray\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"mixed-array\");\r\n expect(Array.isArray(error.items)).to.be.true;\r\n expect(error.items[0]).to.equal(\"string-value\"); // primitive: preserved\r\n expect(error.items[1]).to.equal(42); // primitive: preserved\r\n expect(error.items[2]).to.deep.equal(new Date(\"2024-01-01\")); // Date: preserved\r\n expect(error.items[3]).to.be.undefined; // class instance: dropped (→ undefined)\r\n expect(error.items[4].message).to.equal(\"array-error\"); // Error: recursed\r\n });\r\n\r\n it(\"should preserve nested arrays (array-of-arrays)\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwErrorWithNestedArrayProperty\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"nested-array\");\r\n expect(error.matrix).to.deep.equal([[1, 2], [3, 4]]);\r\n });\r\n\r\n it(\"should not infinitely recurse on a self-referencing array\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwErrorWithSelfReferencingArray\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"self-referencing-array\");\r\n expect(error.items[0]).to.be.undefined; // cycle detected: dropped rather than recursing forever\r\n });\r\n\r\n it(\"should normalize Map-valued loggingMetadata to a JSON-safe plain object (survives every transport)\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithMapMetaData\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"bentley-map-meta\");\r\n expect(error.loggingMetadata).to.deep.equal({ detail: \"map-value\" });\r\n });\r\n\r\n it(\"should disambiguate Map-valued loggingMetadata keys that stringify to the same value\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithCollidingMapMetaData\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"bentley-colliding-map-meta\");\r\n expect(error.loggingMetadata).to.deep.equal({ \"1\": \"num-one\", \"1#1\": \"str-one\" });\r\n });\r\n\r\n it(\"should preserve iTwinErrorId/loggingMetadata of a BentleyError nested inside loggingMetadata\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithNestedBentleyErrorMetaData\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"bentley-nested-bentley-meta\");\r\n const nested = error.loggingMetadata.nested;\r\n expect(nested.message).to.equal(\"inner-bentley-in-metadata\");\r\n expect(nested.iTwinErrorId).to.deep.equal({ scope: BentleyError.iTwinErrorScope, key: nested.iTwinErrorId.key });\r\n expect(nested.loggingMetadata).to.deep.equal({ detail: \"inner-value\" });\r\n });\r\n\r\n it(\"should normalize Set-valued loggingMetadata to a JSON-safe array (survives every transport)\", async () => {\r\n const ipcReturn = await handler(undefined, \"throwBentleyErrorWithSetMetaData\");\r\n const error = ipcReturn.error as any;\r\n expect(error.message).to.equal(\"bentley-set-meta\");\r\n expect(error.loggingMetadata).to.deep.equal([\"tag1\", \"tag2\"]);\r\n });\r\n });\r\n\r\n describe(\"IpcHost.invoke\", () => {\r\n /** Simulates the frontend: captures per-request listeners and provides a `respond` helper by call index. */\r\n function mockFrontend() {\r\n const listeners = new Map<string, (event: any, result: any) => void>();\r\n socket.addListener.callsFake((ch: string, fn: (event: any, result: any) => void) => {\r\n listeners.set(ch, fn);\r\n return () => listeners.delete(ch);\r\n });\r\n\r\n return {\r\n listeners,\r\n responseChannel: (callIndex: number) => socket.send.getCall(callIndex).args[1] as string,\r\n respond: (callIndex: number, result: unknown) => {\r\n const responseChannel = socket.send.getCall(callIndex).args[1] as string;\r\n const listener = listeners.get(responseChannel);\r\n if (!listener)\r\n throw new Error(`No listener found for response channel ${responseChannel}`);\r\n listener(undefined, result);\r\n },\r\n };\r\n }\r\n\r\n it(\"should resolve with the frontend's response\", async () => {\r\n const frontend = mockFrontend();\r\n const promise = IpcHost.invoke(\"ch\", \"a\", \"b\");\r\n frontend.respond(0, \"hello\");\r\n expect(await promise).to.equal(\"hello\");\r\n // the pending-invoke entry must be removed so the map does not grow unboundedly\r\n expect((IpcHost as any)._pendingInvokes.size).to.equal(0);\r\n });\r\n\r\n it(\"should route concurrent invokes to the correct caller\", async () => {\r\n const frontend = mockFrontend();\r\n const p1 = IpcHost.invoke(\"ch\");\r\n const p2 = IpcHost.invoke(\"ch\");\r\n\r\n // respond out of order\r\n frontend.respond(1, \"second\");\r\n frontend.respond(0, \"first\");\r\n\r\n expect(await p1).to.equal(\"first\");\r\n expect(await p2).to.equal(\"second\");\r\n });\r\n\r\n it(\"should remove the response listener after a response\", async () => {\r\n const frontend = mockFrontend();\r\n const promise = IpcHost.invoke(\"ch\");\r\n const responseChannel = frontend.responseChannel(0);\r\n expect(frontend.listeners.has(responseChannel)).to.be.true;\r\n\r\n frontend.respond(0, \"done\");\r\n await promise;\r\n expect(frontend.listeners.has(responseChannel)).to.be.false;\r\n });\r\n\r\n it(\"should reject pending invokes when IpcHost is shut down\", async () => {\r\n const frontend = mockFrontend();\r\n const promise = IpcHost.invoke(\"ch\");\r\n const responseChannel = frontend.responseChannel(0);\r\n // attach handler immediately so the rejection is observed (and not \"unhandled\")\r\n const caught = promise.then(() => undefined, (e: Error) => e);\r\n\r\n await IpcHost.shutdown();\r\n\r\n const err = await caught;\r\n expect(err).to.be.instanceOf(Error);\r\n expect((err as Error).message).to.contain(\"shut down\");\r\n // the listener must be cleaned up so it does not leak past shutdown\r\n expect(frontend.listeners.has(responseChannel)).to.be.false;\r\n });\r\n\r\n it(\"should reject all pending invokes when IpcHost is shut down with 2+ concurrent invokes, removing all listeners\", async () => {\r\n const frontend = mockFrontend();\r\n const p1 = IpcHost.invoke(\"ch1\");\r\n const p2 = IpcHost.invoke(\"ch2\");\r\n const responseChannel1 = frontend.responseChannel(0);\r\n const responseChannel2 = frontend.responseChannel(1);\r\n // attach handlers immediately so the rejections are observed (and not \"unhandled\")\r\n const caught1 = p1.then(() => undefined, (e: Error) => e);\r\n const caught2 = p2.then(() => undefined, (e: Error) => e);\r\n expect((IpcHost as any)._pendingInvokes.size).to.equal(2);\r\n\r\n await IpcHost.shutdown();\r\n\r\n const err1 = await caught1;\r\n const err2 = await caught2;\r\n expect(err1).to.be.instanceOf(Error);\r\n expect((err1 as Error).message).to.contain(\"shut down\");\r\n expect(err2).to.be.instanceOf(Error);\r\n expect((err2 as Error).message).to.contain(\"shut down\");\r\n expect(frontend.listeners.has(responseChannel1)).to.be.false;\r\n expect(frontend.listeners.has(responseChannel2)).to.be.false;\r\n expect((IpcHost as any)._pendingInvokes.size).to.equal(0);\r\n });\r\n\r\n it(\"should reject and clean up the listener/pending-invoke entry when `send` throws synchronously\", async () => {\r\n const frontend = mockFrontend();\r\n socket.send.throws(new Error(\"send failed\"));\r\n const promise = IpcHost.invoke(\"ch\");\r\n\r\n let caught: any;\r\n try {\r\n await promise;\r\n expect.fail(\"invoke should have rejected\");\r\n } catch (err) {\r\n caught = err;\r\n }\r\n expect(caught).to.be.instanceOf(Error);\r\n expect(caught.message).to.equal(\"send failed\");\r\n // the listener and _pendingInvokes entry must not leak when `send` throws synchronously\r\n expect(frontend.listeners.size).to.equal(0);\r\n expect((IpcHost as any)._pendingInvokes.size).to.equal(0);\r\n });\r\n\r\n it(\"should rethrow a frontend-thrown BentleyError from makeIpcProxy preserving ITwinError identity and metadata\", async () => {\r\n const frontend = mockFrontend();\r\n const proxy = IpcHost.makeIpcProxy<{ doIt: () => Promise<void> }>(\"ch\");\r\n const promise = proxy.doIt();\r\n\r\n // simulate the frontend handler serializing a thrown BentleyError into the invoke-response envelope\r\n const thrown = new BentleyError(IModelStatus.NotFound, \"boom\", () => ({ detail: 42 }));\r\n thrown.name = \"MyFrontendError\";\r\n const serialized = serializeIpcError(thrown, true);\r\n frontend.respond(0, serialized);\r\n\r\n let caught: any;\r\n try {\r\n await promise;\r\n expect.fail(\"proxy call should have rejected\");\r\n } catch (err) {\r\n caught = err;\r\n }\r\n // Following the ITwinError paradigm, the backend rebuilds a plain Error (no cross-process class identity)\r\n // that callers identify via ITwinError.isError / BentleyError.isError rather than instanceof.\r\n expect(ITwinError.isError(caught, BentleyError.iTwinErrorScope, \"MyFrontendError\")).to.be.true;\r\n expect(caught.name).to.equal(\"MyFrontendError\");\r\n expect(BentleyError.isError(caught, IModelStatus.NotFound)).to.be.true;\r\n expect(caught.message).to.equal(\"boom\");\r\n expect(caught.loggingMetadata).to.deep.equal({ detail: 42 });\r\n });\r\n\r\n it(\"should not let a non-string thrown `message` field overwrite the 'unknown error' guard in rebuildIpcError\", async () => {\r\n const frontend = mockFrontend();\r\n const proxy = IpcHost.makeIpcProxy<{ doIt: () => Promise<void> }>(\"ch\");\r\n const promise = proxy.doIt();\r\n\r\n // simulate a thrown non-Error value with a non-string `message` field (e.g. `throw { message: 123 }`)\r\n const serialized = serializeIpcError({ message: 123 }, true);\r\n frontend.respond(0, serialized);\r\n\r\n let caught: any;\r\n try {\r\n await promise;\r\n expect.fail(\"proxy call should have rejected\");\r\n } catch (err) {\r\n caught = err;\r\n }\r\n expect(caught).to.be.instanceOf(Error);\r\n expect(caught.message).to.equal(\"unknown error\");\r\n });\r\n\r\n it(\"should rethrow a plain Error from makeIpcProxy when the frontend threw a non-BentleyError\", async () => {\r\n const frontend = mockFrontend();\r\n const proxy = IpcHost.makeIpcProxy<{ doIt: () => Promise<void> }>(\"ch\");\r\n const promise = proxy.doIt();\r\n\r\n const serialized = serializeIpcError(new Error(\"plain failure\"), true);\r\n frontend.respond(0, serialized);\r\n\r\n let caught: any;\r\n try {\r\n await promise;\r\n expect.fail(\"proxy call should have rejected\");\r\n } catch (err) {\r\n caught = err;\r\n }\r\n expect(caught).to.be.instanceOf(Error);\r\n expect(BentleyError.isError(caught)).to.be.false;\r\n expect(caught.message).to.equal(\"plain failure\");\r\n });\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"KnownTestLocations.js","sourceRoot":"","sources":["../../../src/test/KnownTestLocations.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,OAAO,kBAAkB;IAE7B,6GAA6G;IACtG,MAAM,KAAK,SAAS;QACzB,IAAI,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACvC,6FAA6F;YAC7F,uCAAuC;YACvC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,2CAA2C;IACpC,MAAM,KAAK,SAAS;QACzB,IAAI,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,uCAAuC;QACvC,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF","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 { join } from \"path\";\nimport { tmpdir } from \"os\";\nimport { ProcessDetector } from \"@itwin/core-bentley\";\n\nexport class KnownTestLocations {\n\n /** The directory where test assets are stored. Keep in mind that the test is playing the role of the app. */\n public static get assetsDir(): string {\n if (ProcessDetector.isMobileAppBackend) {\n // Note: this relies on the native test runner copying its assets out of its app wrapper into\n // its tmpdir before running the tests.\n return join(tmpdir(), \"assets\");\n }\n\n return join(__dirname, \"assets\");\n }\n\n /** The directory where tests can write. */\n public static get outputDir(): string {\n if (ProcessDetector.isMobileAppBackend) {\n return join(tmpdir(), \"output\");\n }\n\n // Assume that we are running in nodejs\n return join(__dirname, \"output\");\n }\n}\n"]}
1
+ {"version":3,"file":"KnownTestLocations.js","sourceRoot":"","sources":["../../../src/test/KnownTestLocations.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,OAAO,kBAAkB;IAE7B,6GAA6G;IACtG,MAAM,KAAK,SAAS;QACzB,IAAI,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACvC,6FAA6F;YAC7F,uCAAuC;YACvC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,2CAA2C;IACpC,MAAM,KAAK,SAAS;QACzB,IAAI,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,uCAAuC;QACvC,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF","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 { join } from \"path\";\r\nimport { tmpdir } from \"os\";\r\nimport { ProcessDetector } from \"@itwin/core-bentley\";\r\n\r\nexport class KnownTestLocations {\r\n\r\n /** The directory where test assets are stored. Keep in mind that the test is playing the role of the app. */\r\n public static get assetsDir(): string {\r\n if (ProcessDetector.isMobileAppBackend) {\r\n // Note: this relies on the native test runner copying its assets out of its app wrapper into\r\n // its tmpdir before running the tests.\r\n return join(tmpdir(), \"assets\");\r\n }\r\n\r\n return join(__dirname, \"assets\");\r\n }\r\n\r\n /** The directory where tests can write. */\r\n public static get outputDir(): string {\r\n if (ProcessDetector.isMobileAppBackend) {\r\n return join(tmpdir(), \"output\");\r\n }\r\n\r\n // Assume that we are running in nodejs\r\n return join(__dirname, \"output\");\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PrintElementTree.js","sourceRoot":"","sources":["../../../src/test/PrintElementTree.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,QAAQ,EAAc,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,UAAU,UAAU,CAAC,MAAgB,EAAE,SAAqB;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,OAAO,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,cAAsB,EAAE,IAAqB,EAAE,MAAgB,EAAE,SAAqB,EAAE,MAAc;IACrI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACjG,OAAO;IACT,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEpB,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAE1F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAQ,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1F,4DAA4D;QAC5D,MAAM,CAAC,qBAAqB,CAAC,4BAA4B,OAAO,CAAC,aAAa,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5G,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC9C,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YACvF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { DbResult, Id64String, Logger } from \"@itwin/core-bentley\";\nimport { IModelDb } from \"../IModelDb\";\nimport { Model } from \"../Model\";\nimport { Element } from \"../Element\";\n\nexport function fmtElement(iModel: IModelDb, elementId: Id64String): string {\n const el = iModel.elements.getElement(elementId);\n return `${el.id} ${el.classFullName} ${el.getDisplayLabel()}`;\n}\n\nexport function fmtModel(model: Model): string {\n return `${model.id} ${model.classFullName} ${model.name}`;\n}\n\nexport function printElementTree(loggerCategory: string, seen: Set<Id64String>, iModel: IModelDb, elementId: Id64String, indent: number) {\n if (seen.has(elementId)) {\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)}${fmtElement(iModel, elementId)} (SEEN)`);\n return;\n }\n\n seen.add(elementId);\n\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)}${fmtElement(iModel, elementId)}`);\n\n for (const child of iModel.elements.queryChildren(elementId)) {\n printElementTree(loggerCategory, seen, iModel, child, indent + 1);\n }\n\n const subModel = iModel.models.tryGetModel<Model>(elementId);\n if (subModel !== undefined) {\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)} subModel ${fmtModel(subModel)}:`);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(`select ecinstanceid from ${Element.classFullName} where Model.Id = ?`, (stmt) => {\n stmt.bindId(1, subModel.id);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n printElementTree(loggerCategory, seen, iModel, stmt.getValue(0).getId(), indent + 1);\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"PrintElementTree.js","sourceRoot":"","sources":["../../../src/test/PrintElementTree.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,QAAQ,EAAc,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,UAAU,UAAU,CAAC,MAAgB,EAAE,SAAqB;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,OAAO,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,cAAsB,EAAE,IAAqB,EAAE,MAAgB,EAAE,SAAqB,EAAE,MAAc;IACrI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACjG,OAAO;IACT,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEpB,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAE1F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAQ,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1F,4DAA4D;QAC5D,MAAM,CAAC,qBAAqB,CAAC,4BAA4B,OAAO,CAAC,aAAa,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5G,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC9C,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YACvF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { DbResult, Id64String, Logger } from \"@itwin/core-bentley\";\r\nimport { IModelDb } from \"../IModelDb\";\r\nimport { Model } from \"../Model\";\r\nimport { Element } from \"../Element\";\r\n\r\nexport function fmtElement(iModel: IModelDb, elementId: Id64String): string {\r\n const el = iModel.elements.getElement(elementId);\r\n return `${el.id} ${el.classFullName} ${el.getDisplayLabel()}`;\r\n}\r\n\r\nexport function fmtModel(model: Model): string {\r\n return `${model.id} ${model.classFullName} ${model.name}`;\r\n}\r\n\r\nexport function printElementTree(loggerCategory: string, seen: Set<Id64String>, iModel: IModelDb, elementId: Id64String, indent: number) {\r\n if (seen.has(elementId)) {\r\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)}${fmtElement(iModel, elementId)} (SEEN)`);\r\n return;\r\n }\r\n\r\n seen.add(elementId);\r\n\r\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)}${fmtElement(iModel, elementId)}`);\r\n\r\n for (const child of iModel.elements.queryChildren(elementId)) {\r\n printElementTree(loggerCategory, seen, iModel, child, indent + 1);\r\n }\r\n\r\n const subModel = iModel.models.tryGetModel<Model>(elementId);\r\n if (subModel !== undefined) {\r\n Logger.logTrace(loggerCategory, `${\"\\t\".repeat(indent)} subModel ${fmtModel(subModel)}:`);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModel.withPreparedStatement(`select ecinstanceid from ${Element.classFullName} where Model.Id = ?`, (stmt) => {\r\n stmt.bindId(1, subModel.id);\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n printElementTree(loggerCategory, seen, iModel, stmt.getValue(0).getId(), indent + 1);\r\n }\r\n });\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyDb.test.js","sourceRoot":"","sources":["../../../src/test/PropertyDb.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 { expect } from \"chai\";\nimport { existsSync } from \"fs\";\nimport { Suite } from \"mocha\";\nimport { join } from \"path\";\nimport { OpenMode } from \"@itwin/core-bentley\";\nimport { PropertyStore } from \"../PropertyStore\";\nimport { KnownTestLocations } from \"./KnownTestLocations\";\nimport { TestUtils } from \"./TestUtils\";\n\ndescribe(\"PropertyDb\", function (this: Suite) {\n this.timeout(0);\n\n const outputDir = KnownTestLocations.outputDir;\n\n before(async () => TestUtils.startBackend());\n\n it(\"save and load properties\", async () => {\n const dbName = join(outputDir, \"properties.db\");\n PropertyStore.PropertyDb.createNewDb(dbName);\n expect(existsSync(dbName)).true;\n const propertyDb = new PropertyStore.PropertyDb();\n propertyDb.openDb(dbName, OpenMode.ReadWrite);\n\n const countProperties = (filter?: PropertyStore.PropertyFilter) => {\n let count = 0;\n propertyDb.forAllProperties(() => {\n ++count;\n }, filter);\n return count;\n };\n const testJson = {\n a: \"test string\",\n num: 20,\n b: true,\n };\n\n const string1 = \"this is a test\";\n const string2 = \"this is another test\";\n const blob1 = new Uint8Array([2, 33, 23, 0, 202]);\n await propertyDb.saveProperty(\"test-string\", string1);\n await propertyDb.saveProperty(\"test-string2\", string2);\n await propertyDb.saveProperty(\"test-obj\", testJson);\n await propertyDb.saveProperty(\"is-false\", false);\n await propertyDb.saveProperty(\"is-true\", true);\n await propertyDb.saveProperty(\"is-100\", 100);\n await propertyDb.saveProperty(\"is-2.3\", 2.3);\n await propertyDb.saveProperty(\"is-blob\", blob1);\n propertyDb.saveChanges();\n expect(countProperties()).equal(8);\n\n expect(propertyDb.getString(\"test-string\")).equals(string1);\n expect(propertyDb.getString(\"test-string2\")).equals(string2);\n expect(propertyDb.getObject(\"test-obj\")).deep.equal(testJson);\n expect(propertyDb.getBoolean(\"is-false\")).false;\n expect(propertyDb.getBoolean(\"is-true\")).true;\n expect(propertyDb.getNumber(\"is-100\")).equal(100);\n expect(propertyDb.getNumber(\"is-2.3\")).equal(2.3);\n expect(propertyDb.getBlob(\"is-blob\")).deep.equal(blob1);\n\n const updated = \"this is a different string\";\n await propertyDb.saveProperty(\"test-string\", updated);\n expect(propertyDb.getString(\"test-string\")).equals(updated);\n\n expect(propertyDb.getNumber(\"test-string\")).undefined;\n expect(propertyDb.getString(\"not there\")).undefined;\n expect(propertyDb.getBlob(\"not there\")).undefined;\n expect(propertyDb.getNumber(\"not there\")).undefined;\n expect(propertyDb.getBlob(\"not there\")).undefined;\n expect(propertyDb.getNumber(\"not there\", 50)).equal(50);\n\n expect(countProperties({ value: \"test%\", valueCompare: \"LIKE\" })).equal(3);\n await propertyDb.deleteProperty(\"test-string\");\n expect(countProperties()).equal(7);\n expect(countProperties({ value: \"test%\", valueCompare: \"LIKE\" })).equal(2);\n\n propertyDb.closeDb(true);\n });\n});\n"]}
1
+ {"version":3,"file":"PropertyDb.test.js","sourceRoot":"","sources":["../../../src/test/PropertyDb.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport { existsSync } from \"fs\";\r\nimport { Suite } from \"mocha\";\r\nimport { join } from \"path\";\r\nimport { OpenMode } from \"@itwin/core-bentley\";\r\nimport { PropertyStore } from \"../PropertyStore\";\r\nimport { KnownTestLocations } from \"./KnownTestLocations\";\r\nimport { TestUtils } from \"./TestUtils\";\r\n\r\ndescribe(\"PropertyDb\", function (this: Suite) {\r\n this.timeout(0);\r\n\r\n const outputDir = KnownTestLocations.outputDir;\r\n\r\n before(async () => TestUtils.startBackend());\r\n\r\n it(\"save and load properties\", async () => {\r\n const dbName = join(outputDir, \"properties.db\");\r\n PropertyStore.PropertyDb.createNewDb(dbName);\r\n expect(existsSync(dbName)).true;\r\n const propertyDb = new PropertyStore.PropertyDb();\r\n propertyDb.openDb(dbName, OpenMode.ReadWrite);\r\n\r\n const countProperties = (filter?: PropertyStore.PropertyFilter) => {\r\n let count = 0;\r\n propertyDb.forAllProperties(() => {\r\n ++count;\r\n }, filter);\r\n return count;\r\n };\r\n const testJson = {\r\n a: \"test string\",\r\n num: 20,\r\n b: true,\r\n };\r\n\r\n const string1 = \"this is a test\";\r\n const string2 = \"this is another test\";\r\n const blob1 = new Uint8Array([2, 33, 23, 0, 202]);\r\n await propertyDb.saveProperty(\"test-string\", string1);\r\n await propertyDb.saveProperty(\"test-string2\", string2);\r\n await propertyDb.saveProperty(\"test-obj\", testJson);\r\n await propertyDb.saveProperty(\"is-false\", false);\r\n await propertyDb.saveProperty(\"is-true\", true);\r\n await propertyDb.saveProperty(\"is-100\", 100);\r\n await propertyDb.saveProperty(\"is-2.3\", 2.3);\r\n await propertyDb.saveProperty(\"is-blob\", blob1);\r\n propertyDb.saveChanges();\r\n expect(countProperties()).equal(8);\r\n\r\n expect(propertyDb.getString(\"test-string\")).equals(string1);\r\n expect(propertyDb.getString(\"test-string2\")).equals(string2);\r\n expect(propertyDb.getObject(\"test-obj\")).deep.equal(testJson);\r\n expect(propertyDb.getBoolean(\"is-false\")).false;\r\n expect(propertyDb.getBoolean(\"is-true\")).true;\r\n expect(propertyDb.getNumber(\"is-100\")).equal(100);\r\n expect(propertyDb.getNumber(\"is-2.3\")).equal(2.3);\r\n expect(propertyDb.getBlob(\"is-blob\")).deep.equal(blob1);\r\n\r\n const updated = \"this is a different string\";\r\n await propertyDb.saveProperty(\"test-string\", updated);\r\n expect(propertyDb.getString(\"test-string\")).equals(updated);\r\n\r\n expect(propertyDb.getNumber(\"test-string\")).undefined;\r\n expect(propertyDb.getString(\"not there\")).undefined;\r\n expect(propertyDb.getBlob(\"not there\")).undefined;\r\n expect(propertyDb.getNumber(\"not there\")).undefined;\r\n expect(propertyDb.getBlob(\"not there\")).undefined;\r\n expect(propertyDb.getNumber(\"not there\", 50)).equal(50);\r\n\r\n expect(countProperties({ value: \"test%\", valueCompare: \"LIKE\" })).equal(3);\r\n await propertyDb.deleteProperty(\"test-string\");\r\n expect(countProperties()).equal(7);\r\n expect(countProperties({ value: \"test%\", valueCompare: \"LIKE\" })).equal(2);\r\n\r\n propertyDb.closeDb(true);\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RevisionUtility.js","sourceRoot":"","sources":["../../../src/test/RevisionUtility.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 { BentleyStatus } from \"@itwin/core-bentley\";\nimport { IModelNative } from \"../internal/NativePlatform\";\nimport { IModelJsFs } from \"../IModelJsFs\";\n\nexport interface LzmaParams {\n dictSize?: number;\n level?: number;\n lc?: number;\n lp?: number;\n pb?: number;\n fb?: number;\n numHashBytes?: number;\n mc?: number;\n writeEndMark?: number;\n btMode?: number;\n numThreads?: number;\n blockSize?: number;\n numBlockThreads?: number;\n numTotalThreads?: number;\n algo?: number;\n}\n\nexport interface ChangesetSizeInfo {\n compressSize?: number;\n uncompressSize?: number;\n prefixSize?: number;\n}\n\nexport class RevisionUtility {\n public static readonly DEFAULT: LzmaParams = {\n algo: 1,\n blockSize: 67108864,\n btMode: 1,\n dictSize: 16777216,\n fb: 64,\n lc: 3,\n level: 7,\n lp: 0,\n mc: 48,\n numBlockThreads: 4,\n numHashBytes: 4,\n numThreads: 2,\n numTotalThreads: 8,\n pb: 2,\n writeEndMark: 0,\n };\n\n public static recompressRevision(sourceFile: string, targetFile: string, lzmaProps?: LzmaParams): BentleyStatus {\n if (!IModelJsFs.existsSync(sourceFile))\n throw new Error(\"SourceFile does not exists\");\n return IModelNative.platform.RevisionUtility.recompressRevision(sourceFile, targetFile, lzmaProps ? JSON.stringify(lzmaProps) : undefined);\n }\n public static disassembleRevision(sourceFile: string, targetDir: string): BentleyStatus {\n if (!IModelJsFs.existsSync(sourceFile))\n throw new Error(\"SourceFile does not exists\");\n return IModelNative.platform.RevisionUtility.disassembleRevision(sourceFile, targetDir);\n }\n public static assembleRevision(targetFile: string, rawChangesetFile: string, prefixFile?: string, lzmaProps?: LzmaParams): BentleyStatus {\n if (!IModelJsFs.existsSync(rawChangesetFile))\n throw new Error(\"RawChangesetFile does not exists\");\n if (prefixFile && !IModelJsFs.existsSync(prefixFile))\n throw new Error(\"prefixFile does not exists\");\n return IModelNative.platform.RevisionUtility.assembleRevision(targetFile, rawChangesetFile, prefixFile, lzmaProps ? JSON.stringify(lzmaProps) : undefined);\n }\n public static normalizeLzmaParams(lzmaProps?: LzmaParams): LzmaParams {\n return JSON.parse(IModelNative.platform.RevisionUtility.normalizeLzmaParams(lzmaProps ? JSON.stringify(lzmaProps) : undefined)) as LzmaParams;\n }\n public static computeStatistics(sourceFile: string, addPrefix: boolean = true): any {\n if (!IModelJsFs.existsSync(sourceFile))\n throw new Error(\"SourceFile does not exists\");\n return JSON.parse(IModelNative.platform.RevisionUtility.computeStatistics(sourceFile, addPrefix));\n }\n public static getUncompressSize(sourceFile: string): ChangesetSizeInfo {\n if (!IModelJsFs.existsSync(sourceFile))\n throw new Error(\"SourceFile does not exists\");\n return JSON.parse(IModelNative.platform.RevisionUtility.getUncompressSize(sourceFile)) as ChangesetSizeInfo;\n }\n}\n"]}
1
+ {"version":3,"file":"RevisionUtility.js","sourceRoot":"","sources":["../../../src/test/RevisionUtility.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 { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { IModelNative } from \"../internal/NativePlatform\";\r\nimport { IModelJsFs } from \"../IModelJsFs\";\r\n\r\nexport interface LzmaParams {\r\n dictSize?: number;\r\n level?: number;\r\n lc?: number;\r\n lp?: number;\r\n pb?: number;\r\n fb?: number;\r\n numHashBytes?: number;\r\n mc?: number;\r\n writeEndMark?: number;\r\n btMode?: number;\r\n numThreads?: number;\r\n blockSize?: number;\r\n numBlockThreads?: number;\r\n numTotalThreads?: number;\r\n algo?: number;\r\n}\r\n\r\nexport interface ChangesetSizeInfo {\r\n compressSize?: number;\r\n uncompressSize?: number;\r\n prefixSize?: number;\r\n}\r\n\r\nexport class RevisionUtility {\r\n public static readonly DEFAULT: LzmaParams = {\r\n algo: 1,\r\n blockSize: 67108864,\r\n btMode: 1,\r\n dictSize: 16777216,\r\n fb: 64,\r\n lc: 3,\r\n level: 7,\r\n lp: 0,\r\n mc: 48,\r\n numBlockThreads: 4,\r\n numHashBytes: 4,\r\n numThreads: 2,\r\n numTotalThreads: 8,\r\n pb: 2,\r\n writeEndMark: 0,\r\n };\r\n\r\n public static recompressRevision(sourceFile: string, targetFile: string, lzmaProps?: LzmaParams): BentleyStatus {\r\n if (!IModelJsFs.existsSync(sourceFile))\r\n throw new Error(\"SourceFile does not exists\");\r\n return IModelNative.platform.RevisionUtility.recompressRevision(sourceFile, targetFile, lzmaProps ? JSON.stringify(lzmaProps) : undefined);\r\n }\r\n public static disassembleRevision(sourceFile: string, targetDir: string): BentleyStatus {\r\n if (!IModelJsFs.existsSync(sourceFile))\r\n throw new Error(\"SourceFile does not exists\");\r\n return IModelNative.platform.RevisionUtility.disassembleRevision(sourceFile, targetDir);\r\n }\r\n public static assembleRevision(targetFile: string, rawChangesetFile: string, prefixFile?: string, lzmaProps?: LzmaParams): BentleyStatus {\r\n if (!IModelJsFs.existsSync(rawChangesetFile))\r\n throw new Error(\"RawChangesetFile does not exists\");\r\n if (prefixFile && !IModelJsFs.existsSync(prefixFile))\r\n throw new Error(\"prefixFile does not exists\");\r\n return IModelNative.platform.RevisionUtility.assembleRevision(targetFile, rawChangesetFile, prefixFile, lzmaProps ? JSON.stringify(lzmaProps) : undefined);\r\n }\r\n public static normalizeLzmaParams(lzmaProps?: LzmaParams): LzmaParams {\r\n return JSON.parse(IModelNative.platform.RevisionUtility.normalizeLzmaParams(lzmaProps ? JSON.stringify(lzmaProps) : undefined)) as LzmaParams;\r\n }\r\n public static computeStatistics(sourceFile: string, addPrefix: boolean = true): any {\r\n if (!IModelJsFs.existsSync(sourceFile))\r\n throw new Error(\"SourceFile does not exists\");\r\n return JSON.parse(IModelNative.platform.RevisionUtility.computeStatistics(sourceFile, addPrefix));\r\n }\r\n public static getUncompressSize(sourceFile: string): ChangesetSizeInfo {\r\n if (!IModelJsFs.existsSync(sourceFile))\r\n throw new Error(\"SourceFile does not exists\");\r\n return JSON.parse(IModelNative.platform.RevisionUtility.getUncompressSize(sourceFile)) as ChangesetSizeInfo;\r\n }\r\n}\r\n"]}
@@ -20,56 +20,56 @@ import { ChannelControl } from "../ChannelControl";
20
20
  * v01.00.02 – adds PropD2 to class D (additive EC schema change, on top of v01.00.01)
21
21
  */
22
22
  const schemas = {
23
- v01x00x00: `<?xml version="1.0" encoding="UTF-8"?>
24
- <ECSchema schemaName="TestDomain" alias="td" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
25
- <ECSchemaReference name="BisCore" version="01.00.23" alias="bis"/>
26
- <ECEntityClass typeName="A">
27
- <BaseClass>bis:GraphicalElement2d</BaseClass>
28
- <ECProperty propertyName="PropA" typeName="string"/>
29
- </ECEntityClass>
30
- <ECEntityClass typeName="C">
31
- <BaseClass>A</BaseClass>
32
- <ECProperty propertyName="PropC" typeName="string"/>
33
- </ECEntityClass>
34
- <ECEntityClass typeName="D">
35
- <BaseClass>A</BaseClass>
36
- <ECProperty propertyName="PropD" typeName="string"/>
37
- </ECEntityClass>
23
+ v01x00x00: `<?xml version="1.0" encoding="UTF-8"?>
24
+ <ECSchema schemaName="TestDomain" alias="td" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
25
+ <ECSchemaReference name="BisCore" version="01.00.23" alias="bis"/>
26
+ <ECEntityClass typeName="A">
27
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
28
+ <ECProperty propertyName="PropA" typeName="string"/>
29
+ </ECEntityClass>
30
+ <ECEntityClass typeName="C">
31
+ <BaseClass>A</BaseClass>
32
+ <ECProperty propertyName="PropC" typeName="string"/>
33
+ </ECEntityClass>
34
+ <ECEntityClass typeName="D">
35
+ <BaseClass>A</BaseClass>
36
+ <ECProperty propertyName="PropD" typeName="string"/>
37
+ </ECEntityClass>
38
38
  </ECSchema>`,
39
- v01x00x01AddPropC2: `<?xml version="1.0" encoding="UTF-8"?>
40
- <ECSchema schemaName="TestDomain" alias="td" version="01.00.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
41
- <ECSchemaReference name="BisCore" version="01.00.23" alias="bis"/>
42
- <ECEntityClass typeName="A">
43
- <BaseClass>bis:GraphicalElement2d</BaseClass>
44
- <ECProperty propertyName="PropA" typeName="string"/>
45
- </ECEntityClass>
46
- <ECEntityClass typeName="C">
47
- <BaseClass>A</BaseClass>
48
- <ECProperty propertyName="PropC" typeName="string"/>
49
- <ECProperty propertyName="PropC2" typeName="string"/>
50
- </ECEntityClass>
51
- <ECEntityClass typeName="D">
52
- <BaseClass>A</BaseClass>
53
- <ECProperty propertyName="PropD" typeName="string"/>
54
- </ECEntityClass>
39
+ v01x00x01AddPropC2: `<?xml version="1.0" encoding="UTF-8"?>
40
+ <ECSchema schemaName="TestDomain" alias="td" version="01.00.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
41
+ <ECSchemaReference name="BisCore" version="01.00.23" alias="bis"/>
42
+ <ECEntityClass typeName="A">
43
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
44
+ <ECProperty propertyName="PropA" typeName="string"/>
45
+ </ECEntityClass>
46
+ <ECEntityClass typeName="C">
47
+ <BaseClass>A</BaseClass>
48
+ <ECProperty propertyName="PropC" typeName="string"/>
49
+ <ECProperty propertyName="PropC2" typeName="string"/>
50
+ </ECEntityClass>
51
+ <ECEntityClass typeName="D">
52
+ <BaseClass>A</BaseClass>
53
+ <ECProperty propertyName="PropD" typeName="string"/>
54
+ </ECEntityClass>
55
55
  </ECSchema>`,
56
- v01x00x02AddPropD2: `<?xml version="1.0" encoding="UTF-8"?>
57
- <ECSchema schemaName="TestDomain" alias="td" version="01.00.02" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
58
- <ECSchemaReference name="BisCore" version="01.00.23" alias="bis"/>
59
- <ECEntityClass typeName="A">
60
- <BaseClass>bis:GraphicalElement2d</BaseClass>
61
- <ECProperty propertyName="PropA" typeName="string"/>
62
- </ECEntityClass>
63
- <ECEntityClass typeName="C">
64
- <BaseClass>A</BaseClass>
65
- <ECProperty propertyName="PropC" typeName="string"/>
66
- <ECProperty propertyName="PropC2" typeName="string"/>
67
- </ECEntityClass>
68
- <ECEntityClass typeName="D">
69
- <BaseClass>A</BaseClass>
70
- <ECProperty propertyName="PropD" typeName="string"/>
71
- <ECProperty propertyName="PropD2" typeName="string"/>
72
- </ECEntityClass>
56
+ v01x00x02AddPropD2: `<?xml version="1.0" encoding="UTF-8"?>
57
+ <ECSchema schemaName="TestDomain" alias="td" version="01.00.02" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
58
+ <ECSchemaReference name="BisCore" version="01.00.23" alias="bis"/>
59
+ <ECEntityClass typeName="A">
60
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
61
+ <ECProperty propertyName="PropA" typeName="string"/>
62
+ </ECEntityClass>
63
+ <ECEntityClass typeName="C">
64
+ <BaseClass>A</BaseClass>
65
+ <ECProperty propertyName="PropC" typeName="string"/>
66
+ <ECProperty propertyName="PropC2" typeName="string"/>
67
+ </ECEntityClass>
68
+ <ECEntityClass typeName="D">
69
+ <BaseClass>A</BaseClass>
70
+ <ECProperty propertyName="PropD" typeName="string"/>
71
+ <ECProperty propertyName="PropD2" typeName="string"/>
72
+ </ECEntityClass>
73
73
  </ECSchema>`,
74
74
  };
75
75
  /**
@@ -80,9 +80,9 @@ const schemas = {
80
80
  function hasECProperty(db, schemaName, className, propertyName) {
81
81
  let found = false;
82
82
  // eslint-disable-next-line @typescript-eslint/no-deprecated
83
- db.withPreparedStatement(`SELECT p.Name FROM ECDbMeta.ECPropertyDef p
84
- JOIN ECDbMeta.ECClassDef c ON p.Class.Id = c.ECInstanceId
85
- JOIN ECDbMeta.ECSchemaDef s ON c.Schema.Id = s.ECInstanceId
83
+ db.withPreparedStatement(`SELECT p.Name FROM ECDbMeta.ECPropertyDef p
84
+ JOIN ECDbMeta.ECClassDef c ON p.Class.Id = c.ECInstanceId
85
+ JOIN ECDbMeta.ECSchemaDef s ON c.Schema.Id = s.ECInstanceId
86
86
  WHERE s.Name=:schema AND c.Name=:class AND p.Name=:prop`, (stmt) => {
87
87
  stmt.bindString("schema", schemaName);
88
88
  stmt.bindString("class", className);