@itwin/core-backend 5.0.0-dev.98 → 5.0.0

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 (408) hide show
  1. package/CHANGELOG.md +109 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +1 -1
  3. package/lib/cjs/BackendHubAccess.js +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.d.ts +10 -2
  6. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  7. package/lib/cjs/BriefcaseManager.js +12 -0
  8. package/lib/cjs/BriefcaseManager.js.map +1 -1
  9. package/lib/cjs/CatalogDb.d.ts +103 -0
  10. package/lib/cjs/CatalogDb.d.ts.map +1 -0
  11. package/lib/cjs/CatalogDb.js +271 -0
  12. package/lib/cjs/CatalogDb.js.map +1 -0
  13. package/lib/cjs/Category.d.ts +41 -4
  14. package/lib/cjs/Category.d.ts.map +1 -1
  15. package/lib/cjs/Category.js +77 -4
  16. package/lib/cjs/Category.js.map +1 -1
  17. package/lib/cjs/ChangeSummaryManager.d.ts.map +1 -1
  18. package/lib/cjs/ChangeSummaryManager.js +12 -5
  19. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  20. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  21. package/lib/cjs/ChangesetECAdaptor.js +1 -0
  22. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  23. package/lib/cjs/CheckpointManager.d.ts +12 -10
  24. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  25. package/lib/cjs/CheckpointManager.js +17 -41
  26. package/lib/cjs/CheckpointManager.js.map +1 -1
  27. package/lib/cjs/ClassRegistry.d.ts +1 -1
  28. package/lib/cjs/ClassRegistry.js +1 -1
  29. package/lib/cjs/ClassRegistry.js.map +1 -1
  30. package/lib/cjs/CloudSqlite.d.ts +104 -20
  31. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  32. package/lib/cjs/CloudSqlite.js +157 -46
  33. package/lib/cjs/CloudSqlite.js.map +1 -1
  34. package/lib/cjs/CodeSpecs.d.ts +1 -1
  35. package/lib/cjs/CodeSpecs.js +1 -1
  36. package/lib/cjs/CodeSpecs.js.map +1 -1
  37. package/lib/cjs/DisplayStyle.d.ts +9 -4
  38. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  39. package/lib/cjs/DisplayStyle.js +30 -3
  40. package/lib/cjs/DisplayStyle.js.map +1 -1
  41. package/lib/cjs/ECDb.d.ts +38 -2
  42. package/lib/cjs/ECDb.d.ts.map +1 -1
  43. package/lib/cjs/ECDb.js +82 -1
  44. package/lib/cjs/ECDb.js.map +1 -1
  45. package/lib/cjs/ECSchemaXmlContext.d.ts +1 -1
  46. package/lib/cjs/ECSchemaXmlContext.js +1 -1
  47. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  48. package/lib/cjs/ECSqlStatement.d.ts +182 -3
  49. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  50. package/lib/cjs/ECSqlStatement.js +225 -6
  51. package/lib/cjs/ECSqlStatement.js.map +1 -1
  52. package/lib/cjs/Element.d.ts +217 -61
  53. package/lib/cjs/Element.d.ts.map +1 -1
  54. package/lib/cjs/Element.js +561 -60
  55. package/lib/cjs/Element.js.map +1 -1
  56. package/lib/cjs/ElementAspect.d.ts +8 -8
  57. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  58. package/lib/cjs/ElementAspect.js +9 -8
  59. package/lib/cjs/ElementAspect.js.map +1 -1
  60. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  61. package/lib/cjs/ElementTreeWalker.js +4 -0
  62. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  63. package/lib/cjs/Entity.d.ts +52 -8
  64. package/lib/cjs/Entity.d.ts.map +1 -1
  65. package/lib/cjs/Entity.js +63 -5
  66. package/lib/cjs/Entity.js.map +1 -1
  67. package/lib/cjs/ExportGraphics.d.ts +54 -8
  68. package/lib/cjs/ExportGraphics.d.ts.map +1 -1
  69. package/lib/cjs/ExportGraphics.js +158 -59
  70. package/lib/cjs/ExportGraphics.js.map +1 -1
  71. package/lib/cjs/IModelDb.d.ts +42 -50
  72. package/lib/cjs/IModelDb.d.ts.map +1 -1
  73. package/lib/cjs/IModelDb.js +189 -90
  74. package/lib/cjs/IModelDb.js.map +1 -1
  75. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  76. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  77. package/lib/cjs/IModelElementCloneContext.js +1 -1
  78. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  79. package/lib/cjs/IModelHost.d.ts +16 -3
  80. package/lib/cjs/IModelHost.d.ts.map +1 -1
  81. package/lib/cjs/IModelHost.js +9 -3
  82. package/lib/cjs/IModelHost.js.map +1 -1
  83. package/lib/cjs/Material.d.ts +20 -1
  84. package/lib/cjs/Material.d.ts.map +1 -1
  85. package/lib/cjs/Material.js +30 -1
  86. package/lib/cjs/Material.js.map +1 -1
  87. package/lib/cjs/Model.d.ts +64 -28
  88. package/lib/cjs/Model.d.ts.map +1 -1
  89. package/lib/cjs/Model.js +115 -27
  90. package/lib/cjs/Model.js.map +1 -1
  91. package/lib/cjs/NativeHost.d.ts.map +1 -1
  92. package/lib/cjs/NativeHost.js +4 -1
  93. package/lib/cjs/NativeHost.js.map +1 -1
  94. package/lib/cjs/Relationship.d.ts.map +1 -1
  95. package/lib/cjs/Relationship.js +2 -0
  96. package/lib/cjs/Relationship.js.map +1 -1
  97. package/lib/cjs/SQLiteDb.d.ts +1 -1
  98. package/lib/cjs/SQLiteDb.d.ts.map +1 -1
  99. package/lib/cjs/SQLiteDb.js +6 -5
  100. package/lib/cjs/SQLiteDb.js.map +1 -1
  101. package/lib/cjs/SqliteStatement.d.ts +1 -1
  102. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  103. package/lib/cjs/SqliteStatement.js +1 -1
  104. package/lib/cjs/SqliteStatement.js.map +1 -1
  105. package/lib/cjs/TextAnnotationElement.d.ts +2 -2
  106. package/lib/cjs/TextAnnotationElement.js +2 -2
  107. package/lib/cjs/TextAnnotationElement.js.map +1 -1
  108. package/lib/cjs/Texture.d.ts +1 -1
  109. package/lib/cjs/Texture.js +1 -1
  110. package/lib/cjs/Texture.js.map +1 -1
  111. package/lib/cjs/TxnManager.d.ts +4 -4
  112. package/lib/cjs/TxnManager.d.ts.map +1 -1
  113. package/lib/cjs/TxnManager.js +2 -1
  114. package/lib/cjs/TxnManager.js.map +1 -1
  115. package/lib/cjs/ViewDefinition.d.ts +114 -14
  116. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  117. package/lib/cjs/ViewDefinition.js +222 -14
  118. package/lib/cjs/ViewDefinition.js.map +1 -1
  119. package/lib/cjs/ViewStateHydrator.js +3 -3
  120. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  121. package/lib/cjs/ViewStore.d.ts.map +1 -1
  122. package/lib/cjs/ViewStore.js +29 -28
  123. package/lib/cjs/ViewStore.js.map +1 -1
  124. package/lib/cjs/core-backend.d.ts +1 -1
  125. package/lib/cjs/core-backend.d.ts.map +1 -1
  126. package/lib/cjs/core-backend.js +21 -1
  127. package/lib/cjs/core-backend.js.map +1 -1
  128. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  129. package/lib/cjs/internal/ChannelAdmin.js +6 -4
  130. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  131. package/lib/cjs/internal/ElementLRUCache.d.ts +28 -0
  132. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -0
  133. package/lib/cjs/internal/ElementLRUCache.js +120 -0
  134. package/lib/cjs/internal/ElementLRUCache.js.map +1 -0
  135. package/lib/cjs/{HubMock.d.ts → internal/HubMock.d.ts} +4 -5
  136. package/lib/cjs/internal/HubMock.d.ts.map +1 -0
  137. package/lib/cjs/{HubMock.js → internal/HubMock.js} +22 -11
  138. package/lib/cjs/internal/HubMock.js.map +1 -0
  139. package/lib/cjs/internal/Symbols.d.ts +2 -2
  140. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  141. package/lib/cjs/internal/Symbols.js +3 -3
  142. package/lib/cjs/internal/Symbols.js.map +1 -1
  143. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +2 -16
  144. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  145. package/lib/cjs/internal/workspace/WorkspaceImpl.js +35 -104
  146. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  147. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  148. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  149. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +4 -3
  150. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  151. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  152. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  153. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  154. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  155. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  156. package/lib/cjs/workspace/Workspace.d.ts +6 -13
  157. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  158. package/lib/cjs/workspace/Workspace.js.map +1 -1
  159. package/lib/cjs/workspace/WorkspaceEditor.d.ts +2 -7
  160. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  161. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  162. package/lib/esm/BackendHubAccess.d.ts +1 -1
  163. package/lib/esm/BackendHubAccess.js +1 -1
  164. package/lib/esm/BackendHubAccess.js.map +1 -1
  165. package/lib/esm/BriefcaseManager.d.ts +10 -2
  166. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  167. package/lib/esm/BriefcaseManager.js +12 -0
  168. package/lib/esm/BriefcaseManager.js.map +1 -1
  169. package/lib/esm/CatalogDb.d.ts +103 -0
  170. package/lib/esm/CatalogDb.d.ts.map +1 -0
  171. package/lib/esm/CatalogDb.js +267 -0
  172. package/lib/esm/CatalogDb.js.map +1 -0
  173. package/lib/esm/Category.d.ts +41 -4
  174. package/lib/esm/Category.d.ts.map +1 -1
  175. package/lib/esm/Category.js +77 -4
  176. package/lib/esm/Category.js.map +1 -1
  177. package/lib/esm/ChangeSummaryManager.d.ts.map +1 -1
  178. package/lib/esm/ChangeSummaryManager.js +12 -5
  179. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  180. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  181. package/lib/esm/ChangesetECAdaptor.js +1 -0
  182. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  183. package/lib/esm/CheckpointManager.d.ts +12 -10
  184. package/lib/esm/CheckpointManager.d.ts.map +1 -1
  185. package/lib/esm/CheckpointManager.js +18 -42
  186. package/lib/esm/CheckpointManager.js.map +1 -1
  187. package/lib/esm/ClassRegistry.d.ts +1 -1
  188. package/lib/esm/ClassRegistry.js +1 -1
  189. package/lib/esm/ClassRegistry.js.map +1 -1
  190. package/lib/esm/CloudSqlite.d.ts +104 -20
  191. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  192. package/lib/esm/CloudSqlite.js +157 -46
  193. package/lib/esm/CloudSqlite.js.map +1 -1
  194. package/lib/esm/CodeSpecs.d.ts +1 -1
  195. package/lib/esm/CodeSpecs.js +1 -1
  196. package/lib/esm/CodeSpecs.js.map +1 -1
  197. package/lib/esm/DisplayStyle.d.ts +9 -4
  198. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  199. package/lib/esm/DisplayStyle.js +30 -3
  200. package/lib/esm/DisplayStyle.js.map +1 -1
  201. package/lib/esm/ECDb.d.ts +38 -2
  202. package/lib/esm/ECDb.d.ts.map +1 -1
  203. package/lib/esm/ECDb.js +83 -2
  204. package/lib/esm/ECDb.js.map +1 -1
  205. package/lib/esm/ECSchemaXmlContext.d.ts +1 -1
  206. package/lib/esm/ECSchemaXmlContext.js +1 -1
  207. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  208. package/lib/esm/ECSqlStatement.d.ts +182 -3
  209. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  210. package/lib/esm/ECSqlStatement.js +223 -5
  211. package/lib/esm/ECSqlStatement.js.map +1 -1
  212. package/lib/esm/Element.d.ts +217 -61
  213. package/lib/esm/Element.d.ts.map +1 -1
  214. package/lib/esm/Element.js +564 -63
  215. package/lib/esm/Element.js.map +1 -1
  216. package/lib/esm/ElementAspect.d.ts +8 -8
  217. package/lib/esm/ElementAspect.d.ts.map +1 -1
  218. package/lib/esm/ElementAspect.js +9 -8
  219. package/lib/esm/ElementAspect.js.map +1 -1
  220. package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
  221. package/lib/esm/ElementTreeWalker.js +4 -0
  222. package/lib/esm/ElementTreeWalker.js.map +1 -1
  223. package/lib/esm/Entity.d.ts +52 -8
  224. package/lib/esm/Entity.d.ts.map +1 -1
  225. package/lib/esm/Entity.js +63 -5
  226. package/lib/esm/Entity.js.map +1 -1
  227. package/lib/esm/ExportGraphics.d.ts +54 -8
  228. package/lib/esm/ExportGraphics.d.ts.map +1 -1
  229. package/lib/esm/ExportGraphics.js +156 -58
  230. package/lib/esm/ExportGraphics.js.map +1 -1
  231. package/lib/esm/IModelDb.d.ts +42 -50
  232. package/lib/esm/IModelDb.d.ts.map +1 -1
  233. package/lib/esm/IModelDb.js +192 -93
  234. package/lib/esm/IModelDb.js.map +1 -1
  235. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  236. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  237. package/lib/esm/IModelElementCloneContext.js +1 -1
  238. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  239. package/lib/esm/IModelHost.d.ts +16 -3
  240. package/lib/esm/IModelHost.d.ts.map +1 -1
  241. package/lib/esm/IModelHost.js +9 -3
  242. package/lib/esm/IModelHost.js.map +1 -1
  243. package/lib/esm/Material.d.ts +20 -1
  244. package/lib/esm/Material.d.ts.map +1 -1
  245. package/lib/esm/Material.js +31 -2
  246. package/lib/esm/Material.js.map +1 -1
  247. package/lib/esm/Model.d.ts +64 -28
  248. package/lib/esm/Model.d.ts.map +1 -1
  249. package/lib/esm/Model.js +116 -28
  250. package/lib/esm/Model.js.map +1 -1
  251. package/lib/esm/NativeHost.d.ts.map +1 -1
  252. package/lib/esm/NativeHost.js +4 -1
  253. package/lib/esm/NativeHost.js.map +1 -1
  254. package/lib/esm/Relationship.d.ts.map +1 -1
  255. package/lib/esm/Relationship.js +2 -0
  256. package/lib/esm/Relationship.js.map +1 -1
  257. package/lib/esm/SQLiteDb.d.ts +1 -1
  258. package/lib/esm/SQLiteDb.d.ts.map +1 -1
  259. package/lib/esm/SQLiteDb.js +6 -5
  260. package/lib/esm/SQLiteDb.js.map +1 -1
  261. package/lib/esm/SqliteStatement.d.ts +1 -1
  262. package/lib/esm/SqliteStatement.d.ts.map +1 -1
  263. package/lib/esm/SqliteStatement.js +1 -1
  264. package/lib/esm/SqliteStatement.js.map +1 -1
  265. package/lib/esm/TextAnnotationElement.d.ts +2 -2
  266. package/lib/esm/TextAnnotationElement.js +2 -2
  267. package/lib/esm/TextAnnotationElement.js.map +1 -1
  268. package/lib/esm/Texture.d.ts +1 -1
  269. package/lib/esm/Texture.js +1 -1
  270. package/lib/esm/Texture.js.map +1 -1
  271. package/lib/esm/TxnManager.d.ts +4 -4
  272. package/lib/esm/TxnManager.d.ts.map +1 -1
  273. package/lib/esm/TxnManager.js +2 -1
  274. package/lib/esm/TxnManager.js.map +1 -1
  275. package/lib/esm/ViewDefinition.d.ts +114 -14
  276. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  277. package/lib/esm/ViewDefinition.js +223 -15
  278. package/lib/esm/ViewDefinition.js.map +1 -1
  279. package/lib/esm/ViewStateHydrator.js +3 -3
  280. package/lib/esm/ViewStateHydrator.js.map +1 -1
  281. package/lib/esm/ViewStore.d.ts.map +1 -1
  282. package/lib/esm/ViewStore.js +30 -29
  283. package/lib/esm/ViewStore.js.map +1 -1
  284. package/lib/esm/core-backend.d.ts +1 -1
  285. package/lib/esm/core-backend.d.ts.map +1 -1
  286. package/lib/esm/core-backend.js +21 -1
  287. package/lib/esm/core-backend.js.map +1 -1
  288. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  289. package/lib/esm/internal/ChannelAdmin.js +7 -5
  290. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  291. package/lib/esm/internal/ElementLRUCache.d.ts +28 -0
  292. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -0
  293. package/lib/esm/internal/ElementLRUCache.js +116 -0
  294. package/lib/esm/internal/ElementLRUCache.js.map +1 -0
  295. package/lib/esm/{HubMock.d.ts → internal/HubMock.d.ts} +4 -5
  296. package/lib/esm/internal/HubMock.d.ts.map +1 -0
  297. package/lib/esm/{HubMock.js → internal/HubMock.js} +22 -11
  298. package/lib/esm/internal/HubMock.js.map +1 -0
  299. package/lib/esm/internal/Symbols.d.ts +2 -2
  300. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  301. package/lib/esm/internal/Symbols.js +2 -2
  302. package/lib/esm/internal/Symbols.js.map +1 -1
  303. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +2 -16
  304. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  305. package/lib/esm/internal/workspace/WorkspaceImpl.js +36 -100
  306. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  307. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  308. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  309. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +4 -3
  310. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  311. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  312. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  313. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  314. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  315. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  316. package/lib/esm/test/ElementLRUCache.test.d.ts +2 -0
  317. package/lib/esm/test/ElementLRUCache.test.d.ts.map +1 -0
  318. package/lib/esm/test/ElementLRUCache.test.js +212 -0
  319. package/lib/esm/test/ElementLRUCache.test.js.map +1 -0
  320. package/lib/esm/test/IModelTestUtils.d.ts +6 -2
  321. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  322. package/lib/esm/test/IModelTestUtils.js +37 -6
  323. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  324. package/lib/esm/test/PrintElementTree.js +1 -0
  325. package/lib/esm/test/PrintElementTree.js.map +1 -1
  326. package/lib/esm/test/SchemaUtils.test.js +2 -0
  327. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  328. package/lib/esm/test/TestChangeSetUtility.js +1 -1
  329. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  330. package/lib/esm/test/TestUtils.d.ts +1 -1
  331. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  332. package/lib/esm/test/TestUtils.js +1 -1
  333. package/lib/esm/test/TestUtils.js.map +1 -1
  334. package/lib/esm/test/ecdb/ECDb.test.js +12 -1
  335. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  336. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js +4 -4
  337. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  338. package/lib/esm/test/ecdb/ECSqlAst.test.js +1 -0
  339. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  340. package/lib/esm/test/ecdb/ECSqlQuery.test.js +6 -23
  341. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  342. package/lib/esm/test/ecdb/ECSqlReader.test.js +1 -1
  343. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  344. package/lib/esm/test/ecdb/ECSqlStatement.test.js +253 -163
  345. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  346. package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -0
  347. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  348. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +1 -0
  349. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  350. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +5 -1
  351. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  352. package/lib/esm/test/element/ElementRoundTrip.test.js +10 -0
  353. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  354. package/lib/esm/test/font/IModelDbFonts.test.js +1 -1
  355. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  356. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +1 -1
  357. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  358. package/lib/esm/test/hubaccess/CheckpointManager.test.js +4 -3
  359. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  360. package/lib/esm/test/imodel/ElementTreeWalker.test.js +1 -0
  361. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  362. package/lib/esm/test/imodel/IModel.test.js +65 -13
  363. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  364. package/lib/esm/test/schema/GenericDomain.test.js +1 -0
  365. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  366. package/lib/esm/test/standalone/ChangeMerge.test.js +1 -1
  367. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  368. package/lib/esm/test/standalone/ChangesetReader.test.js +2 -1
  369. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  370. package/lib/esm/test/standalone/ExportGraphics.test.js +58 -41
  371. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  372. package/lib/esm/test/standalone/GeometryStream.test.js +49 -1
  373. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  374. package/lib/esm/test/standalone/HubMock.test.js +1 -1
  375. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  376. package/lib/esm/test/standalone/IModelLimits.test.d.ts +2 -0
  377. package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
  378. package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
  379. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
  380. package/lib/esm/test/standalone/IModelWrite.test.js +8 -1
  381. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  382. package/lib/esm/test/standalone/MergeConflict.test.js +1 -1
  383. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  384. package/lib/esm/test/standalone/RenderMaterialElement.test.js +1 -0
  385. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  386. package/lib/esm/test/standalone/ServerBasedLocks.test.js +1 -1
  387. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  388. package/lib/esm/test/standalone/SnapshotDb.test.js +25 -5
  389. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  390. package/lib/esm/test/standalone/TxnManager.test.js +1 -1
  391. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  392. package/lib/esm/test/standalone/Workspace.test.js +4 -3
  393. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  394. package/lib/esm/workspace/Workspace.d.ts +6 -13
  395. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  396. package/lib/esm/workspace/Workspace.js.map +1 -1
  397. package/lib/esm/workspace/WorkspaceEditor.d.ts +2 -7
  398. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  399. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  400. package/package.json +13 -13
  401. package/lib/cjs/HubMock.d.ts.map +0 -1
  402. package/lib/cjs/HubMock.js.map +0 -1
  403. package/lib/esm/HubMock.d.ts.map +0 -1
  404. package/lib/esm/HubMock.js.map +0 -1
  405. package/lib/esm/test/CloudSqliteMock.d.ts +0 -37
  406. package/lib/esm/test/CloudSqliteMock.d.ts.map +0 -1
  407. package/lib/esm/test/CloudSqliteMock.js +0 -117
  408. package/lib/esm/test/CloudSqliteMock.js.map +0 -1
@@ -8,8 +8,8 @@
8
8
  import * as fs from "fs";
9
9
  import { join } from "path";
10
10
  import * as touch from "touch";
11
- import { assert, BeEvent, BentleyStatus, ChangeSetStatus, DbChangeStage, DbConflictCause, DbConflictResolution, DbResult, Guid, Id64, IModelStatus, JsonUtils, Logger, LogLevel, OpenMode, } from "@itwin/core-bentley";
12
- import { BriefcaseIdValue, Code, DomainOptions, ECJsNames, ECSqlReader, EntityMetaData, FontMap, IModel, IModelError, IModelNotFoundResponse, ProfileOptions, QueryRowFormat, SchemaState, ViewStoreRpc, } from "@itwin/core-common";
11
+ import { assert, BeEvent, BentleyStatus, ChangeSetStatus, DbChangeStage, DbConflictCause, DbConflictResolution, DbResult, Guid, Id64, IModelStatus, JsonUtils, Logger, LogLevel, LRUMap, OpenMode } from "@itwin/core-bentley";
12
+ import { BriefcaseIdValue, Code, DomainOptions, ECJsNames, ECSqlReader, EntityMetaData, FontMap, IModel, IModelError, IModelNotFoundResponse, ProfileOptions, QueryRowFormat, SchemaState, ViewStoreRpc } from "@itwin/core-common";
13
13
  import { Range2d, Range3d } from "@itwin/core-geometry";
14
14
  import { BackendLoggerCategory } from "./BackendLoggerCategory";
15
15
  import { BriefcaseManager } from "./BriefcaseManager";
@@ -44,9 +44,10 @@ import { SettingsImpl } from "./internal/workspace/SettingsImpl";
44
44
  import { IModelNative } from "./internal/NativePlatform";
45
45
  import { createNoOpLockControl } from "./internal/NoLocks";
46
46
  import { createIModelDbFonts } from "./internal/IModelDbFontsImpl";
47
- import { _close, _hubAccess, _nativeDb, _releaseAllLocks } from "./internal/Symbols";
47
+ import { _cache, _close, _hubAccess, _nativeDb, _releaseAllLocks } from "./internal/Symbols";
48
48
  import { SchemaContext, SchemaJsonLocater } from "@itwin/ecschema-metadata";
49
49
  import { SchemaMap } from "./Schema";
50
+ import { ElementLRUCache } from "./internal/ElementLRUCache";
50
51
  // spell:ignore fontid fontmap
51
52
  const loggerCategory = BackendLoggerCategory.IModelDb;
52
53
  /** @internal */
@@ -97,6 +98,7 @@ export class IModelDb extends IModel {
97
98
  /** @beta */
98
99
  channels = createChannelControl(this);
99
100
  _relationships;
101
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
100
102
  _statementCache = new StatementCache();
101
103
  _sqliteStatementCache = new StatementCache();
102
104
  _codeSpecs;
@@ -105,7 +107,7 @@ export class IModelDb extends IModel {
105
107
  _jsClassMap;
106
108
  _schemaMap;
107
109
  _schemaContext;
108
- /** @deprecated in 5.0.0. Use [[fonts]]. */
110
+ /** @deprecated in 5.0.0 - will not be removed until after 2026-06-13. Use [[fonts]]. */
109
111
  _fontMap; // eslint-disable-line @typescript-eslint/no-deprecated
110
112
  _fonts = createIModelDbFonts(this);
111
113
  _workspace;
@@ -132,6 +134,13 @@ export class IModelDb extends IModel {
132
134
  this._workspace = constructWorkspace(new IModelSettings());
133
135
  return this._workspace;
134
136
  }
137
+ /**
138
+ * get the cloud container for this iModel, if it was opened from one
139
+ * @beta
140
+ */
141
+ get cloudContainer() {
142
+ return this[_nativeDb].cloudContainer;
143
+ }
135
144
  /** Acquire the exclusive schema lock on this iModel.
136
145
  * @note: To acquire the schema lock, all other briefcases must first release *all* their locks. No other briefcases
137
146
  * will be able to acquire *any* locks while the schema lock is held.
@@ -154,7 +163,7 @@ export class IModelDb extends IModel {
154
163
  restartDefaultTxn() {
155
164
  this[_nativeDb].restartDefaultTxn();
156
165
  }
157
- /** @deprecated in 5.0.0. Use [[fonts]]. */
166
+ /** @deprecated in 5.0.0 - will not be removed until after 2026-06-13. Use [[fonts]]. */
158
167
  get fontMap() {
159
168
  return this._fontMap ?? (this._fontMap = new FontMap(this[_nativeDb].readFontMap())); // eslint-disable-line @typescript-eslint/no-deprecated
160
169
  }
@@ -331,8 +340,11 @@ export class IModelDb extends IModel {
331
340
  * @returns the value returned by `callback`.
332
341
  * @see [[withStatement]]
333
342
  * @public
343
+ * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [[createQueryReader]] instead.
334
344
  */
345
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
335
346
  withPreparedStatement(ecsql, callback, logErrors = true) {
347
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
336
348
  const stmt = this._statementCache.findAndRemove(ecsql) ?? this.prepareStatement(ecsql, logErrors);
337
349
  const release = () => this._statementCache.addOrDispose(stmt);
338
350
  try {
@@ -360,8 +372,11 @@ export class IModelDb extends IModel {
360
372
  * @returns the value returned by `callback`.
361
373
  * @see [[withPreparedStatement]]
362
374
  * @public
375
+ * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [[createQueryReader]] instead.
363
376
  */
377
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
364
378
  withStatement(ecsql, callback, logErrors = true) {
379
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
365
380
  const stmt = this.prepareStatement(ecsql, logErrors);
366
381
  const release = () => stmt[Symbol.dispose]();
367
382
  try {
@@ -539,6 +554,7 @@ export class IModelDb extends IModel {
539
554
  if (typeof params.offset === "number" && params.offset > 0)
540
555
  sql += ` OFFSET ${params.offset}`;
541
556
  const ids = new Set();
557
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
542
558
  this.withPreparedStatement(sql, (stmt) => {
543
559
  if (params.bindings)
544
560
  stmt.bindValues(params.bindings);
@@ -561,6 +577,8 @@ export class IModelDb extends IModel {
561
577
  this._jsClassMap = undefined;
562
578
  this._schemaMap = undefined;
563
579
  this._schemaContext = undefined;
580
+ this.elements[_cache].clear();
581
+ this.models[_cache].clear();
564
582
  }
565
583
  /** Update the project extents for this iModel.
566
584
  * <p><em>Example:</em>
@@ -616,6 +634,7 @@ export class IModelDb extends IModel {
616
634
  * @note This will not delete Txns that have already been saved, even if they have not yet been pushed.
617
635
  */
618
636
  abandonChanges() {
637
+ this.clearCaches();
619
638
  this[_nativeDb].abandonChanges();
620
639
  }
621
640
  /**
@@ -629,11 +648,14 @@ export class IModelDb extends IModel {
629
648
  performCheckpoint() {
630
649
  if (!this.isReadonly) {
631
650
  this.saveChanges();
651
+ this.clearCaches();
652
+ this[_nativeDb].concurrentQueryShutdown();
653
+ this[_nativeDb].clearECDbCache();
632
654
  this[_nativeDb].performCheckpoint();
633
655
  }
634
656
  }
635
657
  /** @internal
636
- * @deprecated in 4.8. Use `txns.reverseTxns`.
658
+ * @deprecated in 4.8 - will not be removed until after 2026-06-13. Use `txns.reverseTxns`.
637
659
  */
638
660
  reverseTxns(numOperations) {
639
661
  return this[_nativeDb].reverseTxns(numOperations);
@@ -859,7 +881,7 @@ export class IModelDb extends IModel {
859
881
  }
860
882
  /** The registry of entity metadata for this iModel.
861
883
  * @internal
862
- * @deprecated in 5.0. Please use `schemaContext` from the `iModel` instead.
884
+ * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `schemaContext` from the `iModel` instead.
863
885
  *
864
886
  * @example
865
887
  * ```typescript
@@ -895,7 +917,7 @@ export class IModelDb extends IModel {
895
917
  }
896
918
  /**
897
919
  * Gets the context that allows accessing the metadata (ecschema-metadata package) of this iModel
898
- * @beta
920
+ * @public @preview
899
921
  */
900
922
  get schemaContext() {
901
923
  if (this._schemaContext === undefined) {
@@ -919,8 +941,11 @@ export class IModelDb extends IModel {
919
941
  * @param sql The ECSQL statement to prepare
920
942
  * @param logErrors Determines if error will be logged if statement fail to prepare
921
943
  * @throws [[IModelError]] if there is a problem preparing the statement.
944
+ * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [IModelDb.createQueryReader]($backend) or [ECDb.createQueryReader]($backend) to query.
922
945
  */
946
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
923
947
  prepareStatement(sql, logErrors = true) {
948
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
924
949
  const stmt = new ECSqlStatement();
925
950
  stmt.prepare(this[_nativeDb], sql, logErrors);
926
951
  return stmt;
@@ -928,8 +953,11 @@ export class IModelDb extends IModel {
928
953
  /** Prepare an ECSQL statement.
929
954
  * @param sql The ECSQL statement to prepare
930
955
  * @returns `undefined` if there is a problem preparing the statement.
956
+ * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [IModelDb.createQueryReader]($backend) or [ECDb.createQueryReader]($backend) to query.
931
957
  */
958
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
932
959
  tryPrepareStatement(sql) {
960
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
933
961
  const statement = new ECSqlStatement();
934
962
  const result = statement.tryPrepare(this[_nativeDb], sql);
935
963
  return DbResult.BE_SQLITE_OK === result.status ? statement : undefined;
@@ -955,9 +983,27 @@ export class IModelDb extends IModel {
955
983
  return ClassRegistry.getClass(classFullName, this);
956
984
  }
957
985
  }
986
+ /** Constructs a ResolveInstanceKeyArgs from given parameters
987
+ * @throws [[IModelError]] if the combination of supplied parameters is invalid.
988
+ * @internal
989
+ */
990
+ getInstanceArgs(instanceId, baseClassName, federationGuid, code) {
991
+ if (instanceId && baseClassName) {
992
+ return { partialKey: { id: instanceId, baseClassName } };
993
+ }
994
+ else if (federationGuid) {
995
+ return { federationGuid };
996
+ }
997
+ else if (code) {
998
+ return { code };
999
+ }
1000
+ else {
1001
+ throw new IModelError(IModelStatus.InvalidId, "Either instanceId and baseClassName or federationGuid or code must be specified");
1002
+ }
1003
+ }
958
1004
  /** Get metadata for a class. This method will load the metadata from the iModel into the cache as a side-effect, if necessary.
959
1005
  * @throws [[IModelError]] if the metadata cannot be found nor loaded.
960
- * @deprecated in 5.0. Please use `getSchemaItem` from `SchemaContext` class instead.
1006
+ * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `getSchemaItem` from `SchemaContext` class instead.
961
1007
  *
962
1008
  * @example
963
1009
  * * ```typescript
@@ -983,7 +1029,7 @@ export class IModelDb extends IModel {
983
1029
  return metadata;
984
1030
  }
985
1031
  /** Identical to [[getMetaData]], except it returns `undefined` instead of throwing an error if the metadata cannot be found nor loaded.
986
- * @deprecated in 5.0. Please use `getSchemaItem` from `SchemaContext` class instead.
1032
+ * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `getSchemaItem` from `SchemaContext` class instead.
987
1033
  *
988
1034
  * @example
989
1035
  * * ```typescript
@@ -1011,7 +1057,7 @@ export class IModelDb extends IModel {
1011
1057
  * @param func The callback to be invoked on each property
1012
1058
  * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.
1013
1059
  * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.
1014
- * @deprecated in 5.0. Please use `forEachProperty` instead.
1060
+ * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `forEachProperty` instead.
1015
1061
  *
1016
1062
  * @example
1017
1063
  * ```typescript
@@ -1037,7 +1083,7 @@ export class IModelDb extends IModel {
1037
1083
  * @param func The callback to be invoked on each property
1038
1084
  * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.
1039
1085
  * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.
1040
- * @deprecated in 5.0. Use `forEachProperty` from `SchemaContext` class instead.
1086
+ * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `forEachProperty` from `SchemaContext` class instead.
1041
1087
  *
1042
1088
  * @example
1043
1089
  * ```typescript
@@ -1067,7 +1113,7 @@ export class IModelDb extends IModel {
1067
1113
  }
1068
1114
  /**
1069
1115
  * @internal
1070
- * @deprecated in 5.0. Please use `schemaContext` from `iModel` instead to get metadata.
1116
+ * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `schemaContext` from `iModel` instead to get metadata.
1071
1117
  */
1072
1118
  loadMetaData(classFullName) {
1073
1119
  // eslint-disable-next-line @typescript-eslint/no-deprecated
@@ -1112,6 +1158,7 @@ export class IModelDb extends IModel {
1112
1158
  */
1113
1159
  querySchemaVersion(schemaName) {
1114
1160
  const sql = `SELECT VersionMajor,VersionWrite,VersionMinor FROM ECDbMeta.ECSchemaDef WHERE Name=:schemaName LIMIT 1`;
1161
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1115
1162
  return this.withPreparedStatement(sql, (statement) => {
1116
1163
  statement.bindString("schemaName", schemaName);
1117
1164
  if (DbResult.BE_SQLITE_ROW === statement.step()) {
@@ -1431,11 +1478,13 @@ function processSchemaWriteStatus(status) {
1431
1478
  /** @public */
1432
1479
  (function (IModelDb) {
1433
1480
  /** The collection of models in an [[IModelDb]].
1434
- * @public
1481
+ * @public @preview
1435
1482
  */
1436
1483
  class Models {
1437
1484
  _iModel;
1438
1485
  /** @internal */
1486
+ [_cache] = new LRUMap(500);
1487
+ /** @internal */
1439
1488
  constructor(_iModel) {
1440
1489
  this._iModel = _iModel;
1441
1490
  }
@@ -1445,7 +1494,10 @@ function processSchemaWriteStatus(status) {
1445
1494
  * @see tryGetModelProps
1446
1495
  */
1447
1496
  getModelProps(id) {
1448
- return this.getModelJson({ id });
1497
+ const model = this.tryGetModelProps(id);
1498
+ if (undefined === model)
1499
+ throw new IModelError(IModelStatus.NotFound, `Model=${id}`);
1500
+ return model;
1449
1501
  }
1450
1502
  /** Get the ModelProps with the specified identifier.
1451
1503
  * @param modelId The Model identifier.
@@ -1455,7 +1507,25 @@ function processSchemaWriteStatus(status) {
1455
1507
  * @see getModelProps
1456
1508
  */
1457
1509
  tryGetModelProps(id) {
1458
- return this.tryGetModelJson({ id });
1510
+ try {
1511
+ if (IModelHost.configuration?.disableThinnedNativeInstanceWorkflow) {
1512
+ return this._iModel[_nativeDb].getModel({ id });
1513
+ }
1514
+ const cachedMdl = this[_cache].get(id);
1515
+ if (cachedMdl) {
1516
+ return cachedMdl;
1517
+ }
1518
+ const options = { useJsNames: true };
1519
+ const instanceKey = this.resolveModelKey({ id });
1520
+ const rawInstance = this._iModel[_nativeDb].readInstance(instanceKey, options);
1521
+ const classDef = this._iModel.getJsClass(rawInstance.classFullName);
1522
+ const modelProps = classDef.deserialize({ row: rawInstance, iModel: this._iModel });
1523
+ this[_cache].set(id, modelProps);
1524
+ return modelProps;
1525
+ }
1526
+ catch {
1527
+ return undefined;
1528
+ }
1459
1529
  }
1460
1530
  /** Query for the last modified time for a [[Model]].
1461
1531
  * @param modelId The Id of the model.
@@ -1463,6 +1533,7 @@ function processSchemaWriteStatus(status) {
1463
1533
  */
1464
1534
  queryLastModifiedTime(modelId) {
1465
1535
  const sql = `SELECT LastMod FROM ${Model.classFullName} WHERE ECInstanceId=:modelId`;
1536
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1466
1537
  return this._iModel.withPreparedStatement(sql, (statement) => {
1467
1538
  statement.bindId("modelId", modelId);
1468
1539
  if (DbResult.BE_SQLITE_ROW === statement.step()) {
@@ -1501,32 +1572,22 @@ function processSchemaWriteStatus(status) {
1501
1572
  return model; // modelClass was not specified, cannot call instanceof to validate
1502
1573
  return model instanceof modelClass ? model : undefined;
1503
1574
  }
1504
- /** Read the properties for a Model as a json string.
1505
- * @param modelIdArg a json string with the identity of the model to load. Must have either "id" or "code".
1506
- * @returns a json string with the properties of the model.
1507
- * @throws [[IModelError]] if the model is not found or cannot be loaded.
1508
- * @see tryGetModelJson
1509
- * @internal
1510
- */
1511
- getModelJson(modelIdArg) {
1512
- const modelJson = this.tryGetModelJson(modelIdArg);
1513
- if (undefined === modelJson) {
1514
- throw new IModelError(IModelStatus.NotFound, `Model=(id: ${modelIdArg.id}, code: ${modelIdArg.code})`);
1575
+ resolveModelKey(modelIdArg) {
1576
+ const baseClassName = "BisCore:Model";
1577
+ let args;
1578
+ if (modelIdArg.id) {
1579
+ args = { partialKey: { id: modelIdArg.id, baseClassName } };
1515
1580
  }
1516
- return modelJson;
1517
- }
1518
- /** Read the properties for a Model as a json string.
1519
- * @param modelIdArg a json string with the identity of the model to load. Must have either "id" or "code".
1520
- * @returns a json string with the properties of the model or `undefined` if the model is not found.
1521
- * @see getModelJson
1522
- */
1523
- tryGetModelJson(modelIdArg) {
1524
- try {
1525
- return this._iModel[_nativeDb].getModel(modelIdArg);
1581
+ else if (modelIdArg.code) {
1582
+ const modelId = this._iModel.elements.getElementProps({ code: modelIdArg.code }).id;
1583
+ if (!modelId)
1584
+ throw new IModelError(IModelStatus.NotFound, `Model not found with code: [spec:${modelIdArg.code.spec}, scope:${modelIdArg.code.scope}, value:${modelIdArg.code.value}])`);
1585
+ args = { partialKey: { id: modelId, baseClassName } };
1526
1586
  }
1527
- catch {
1528
- return undefined;
1587
+ else {
1588
+ throw new IModelError(IModelStatus.InvalidId, `Invalid model identifier: ${JSON.stringify(modelIdArg)}`);
1529
1589
  }
1590
+ return this._iModel[_nativeDb].resolveInstanceKey(args);
1530
1591
  }
1531
1592
  /** Get the sub-model of the specified Element.
1532
1593
  * See [[IModelDb.Elements.queryElementIdByCode]] for more on how to find an element by Code.
@@ -1579,6 +1640,8 @@ function processSchemaWriteStatus(status) {
1579
1640
  */
1580
1641
  updateModel(props) {
1581
1642
  try {
1643
+ if (props.id)
1644
+ this[_cache].delete(props.id);
1582
1645
  this._iModel[_nativeDb].updateModel(props);
1583
1646
  }
1584
1647
  catch (err) {
@@ -1595,6 +1658,7 @@ function processSchemaWriteStatus(status) {
1595
1658
  * @see [[TxnManager.onModelGeometryChanged]] for the event emitted in response to such a change.
1596
1659
  */
1597
1660
  updateGeometryGuid(modelId) {
1661
+ this._iModel.models[_cache].delete(modelId);
1598
1662
  const error = this._iModel[_nativeDb].updateModelGeometryGuid(modelId);
1599
1663
  if (error !== IModelStatus.Success)
1600
1664
  throw new IModelError(error, `updating geometry guid for model ${modelId}`);
@@ -1606,6 +1670,7 @@ function processSchemaWriteStatus(status) {
1606
1670
  deleteModel(ids) {
1607
1671
  Id64.toIdSet(ids).forEach((id) => {
1608
1672
  try {
1673
+ this[_cache].delete(id);
1609
1674
  this._iModel[_nativeDb].deleteModel(id);
1610
1675
  }
1611
1676
  catch (err) {
@@ -1639,11 +1704,13 @@ function processSchemaWriteStatus(status) {
1639
1704
  }
1640
1705
  IModelDb.Models = Models;
1641
1706
  /** The collection of elements in an [[IModelDb]].
1642
- * @public
1707
+ * @public @preview
1643
1708
  */
1644
1709
  class Elements {
1645
1710
  _iModel;
1646
1711
  /** @internal */
1712
+ [_cache] = new ElementLRUCache();
1713
+ /** @internal */
1647
1714
  constructor(_iModel) {
1648
1715
  this._iModel = _iModel;
1649
1716
  }
@@ -1659,50 +1726,40 @@ function processSchemaWriteStatus(status) {
1659
1726
  return !stmt.nextRow() ? undefined : stmt.getValueId(0);
1660
1727
  }) : undefined;
1661
1728
  }
1662
- /** Read element data from the iModel as JSON
1663
- * @param elementIdArg a json string with the identity of the element to load. Must have one of "id", "federationGuid", or "code".
1664
- * @returns The JSON properties of the element.
1665
- * @throws [[IModelError]] if the element is not found or cannot be loaded.
1666
- * @see tryGetElementJson
1667
- * @internal
1668
- */
1669
- getElementJson(elementId) {
1670
- const elementProps = this.tryGetElementJson(elementId);
1671
- if (undefined === elementProps)
1672
- throw new IModelError(IModelStatus.NotFound, `reading element={id: ${elementId.id} federationGuid: ${elementId.federationGuid}, code: ${elementId.code}}`);
1673
- return elementProps;
1674
- }
1675
- /** Read element data from the iModel as JSON
1676
- * @param loadProps - a json string with the identity of the element to load. Must have one of "id", "federationGuid", or "code".
1677
- * @returns The JSON properties of the element or `undefined` if the element is not found.
1678
- * @throws [[IModelError]] if the element exists, but cannot be loaded.
1679
- * @see getElementJson
1680
- */
1681
- tryGetElementJson(loadProps) {
1682
- try {
1683
- return this._iModel[_nativeDb].getElement(loadProps);
1684
- }
1685
- catch {
1686
- return undefined;
1687
- }
1688
- }
1689
1729
  /** Get properties of an Element by Id, FederationGuid, or Code
1690
1730
  * @throws [[IModelError]] if the element is not found or cannot be loaded.
1691
1731
  * @see tryGetElementProps
1692
1732
  */
1693
1733
  getElementProps(props) {
1734
+ const elProp = this.tryGetElementProps(props);
1735
+ if (undefined === elProp)
1736
+ throw new IModelError(IModelStatus.NotFound, `element not found`);
1737
+ return elProp;
1738
+ }
1739
+ resolveElementKey(props) {
1740
+ const baseClassName = "BisCore:Element";
1741
+ let args;
1694
1742
  if (typeof props === "string") {
1695
- props = Id64.isId64(props) ? { id: props } : { federationGuid: props };
1743
+ args = Id64.isId64(props) ? { partialKey: { id: props, baseClassName } } : { federationGuid: props };
1696
1744
  }
1697
1745
  else if (props instanceof Code) {
1698
- props = { code: props };
1746
+ args = { code: props };
1699
1747
  }
1700
- try {
1701
- return this._iModel[_nativeDb].getElement(props);
1702
- }
1703
- catch (err) {
1704
- throw new IModelError(err.errorNumber, err.message);
1748
+ else {
1749
+ if (props.id) {
1750
+ args = { partialKey: { id: props.id, baseClassName } };
1751
+ }
1752
+ else if (props.federationGuid) {
1753
+ args = { federationGuid: props.federationGuid };
1754
+ }
1755
+ else if (props.code) {
1756
+ args = { code: props.code };
1757
+ }
1758
+ else {
1759
+ throw new IModelError(IModelStatus.InvalidId, "Element Id or FederationGuid or Code is required");
1760
+ }
1705
1761
  }
1762
+ return this._iModel[_nativeDb].resolveInstanceKey(args);
1706
1763
  }
1707
1764
  /** Get properties of an Element by Id, FederationGuid, or Code
1708
1765
  * @returns The properties of the element or `undefined` if the element is not found.
@@ -1710,14 +1767,32 @@ function processSchemaWriteStatus(status) {
1710
1767
  * @note Useful for cases when an element may or may not exist and throwing an `Error` would be overkill.
1711
1768
  * @see getElementProps
1712
1769
  */
1713
- tryGetElementProps(elementId) {
1714
- if (typeof elementId === "string") {
1715
- elementId = Id64.isId64(elementId) ? { id: elementId } : { federationGuid: elementId };
1770
+ tryGetElementProps(props) {
1771
+ if (typeof props === "string") {
1772
+ props = Id64.isId64(props) ? { id: props } : { federationGuid: props };
1716
1773
  }
1717
- else if (elementId instanceof Code) {
1718
- elementId = { code: elementId };
1774
+ else if (props instanceof Code) {
1775
+ props = { code: props };
1776
+ }
1777
+ try {
1778
+ if (IModelHost.configuration?.disableThinnedNativeInstanceWorkflow) {
1779
+ return this._iModel[_nativeDb].getElement(props);
1780
+ }
1781
+ const cachedElm = this[_cache].get(props);
1782
+ if (cachedElm) {
1783
+ return cachedElm.elProps;
1784
+ }
1785
+ const options = { ...props, useJsNames: true };
1786
+ const instanceKey = this.resolveElementKey(props);
1787
+ const rawInstance = this._iModel[_nativeDb].readInstance(instanceKey, options);
1788
+ const classDef = this._iModel.getJsClass(rawInstance.classFullName);
1789
+ const elementProps = classDef.deserialize({ row: rawInstance, iModel: this._iModel, options: { element: props } });
1790
+ this[_cache].set({ elProps: elementProps, loadOptions: props });
1791
+ return elementProps;
1792
+ }
1793
+ catch {
1794
+ return undefined;
1719
1795
  }
1720
- return this.tryGetElementJson(elementId);
1721
1796
  }
1722
1797
  /** Get an element by Id, FederationGuid, or Code
1723
1798
  * @param elementId either the element's Id, Code, or FederationGuid, or an ElementLoadProps
@@ -1750,7 +1825,7 @@ function processSchemaWriteStatus(status) {
1750
1825
  elementId = { code: elementId };
1751
1826
  else
1752
1827
  elementId.onlyBaseProperties = false; // we must load all properties to construct the element.
1753
- const elementProps = this.tryGetElementJson(elementId);
1828
+ const elementProps = this.tryGetElementProps(elementId);
1754
1829
  if (undefined === elementProps)
1755
1830
  return undefined; // no Element with that elementId found
1756
1831
  const element = this._iModel.constructEntity(elementProps);
@@ -1774,6 +1849,7 @@ function processSchemaWriteStatus(status) {
1774
1849
  throw new IModelError(IModelStatus.InvalidCodeSpec, "Invalid CodeSpec");
1775
1850
  if (code.value === undefined)
1776
1851
  throw new IModelError(IModelStatus.InvalidCode, "Invalid Code");
1852
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1777
1853
  return this._iModel.withPreparedStatement("SELECT ECInstanceId FROM BisCore:Element WHERE CodeSpec.Id=? AND CodeScope.Id=? AND CodeValue=?", (stmt) => {
1778
1854
  stmt.bindId(1, code.spec);
1779
1855
  stmt.bindId(2, Id64.fromString(code.scope));
@@ -1789,6 +1865,7 @@ function processSchemaWriteStatus(status) {
1789
1865
  */
1790
1866
  queryLastModifiedTime(elementId) {
1791
1867
  const sql = "SELECT LastMod FROM BisCore:Element WHERE ECInstanceId=:elementId";
1868
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1792
1869
  return this._iModel.withPreparedStatement(sql, (statement) => {
1793
1870
  statement.bindId("elementId", elementId);
1794
1871
  if (DbResult.BE_SQLITE_ROW === statement.step())
@@ -1812,6 +1889,11 @@ function processSchemaWriteStatus(status) {
1812
1889
  */
1813
1890
  insertElement(elProps, options) {
1814
1891
  try {
1892
+ this[_cache].delete({
1893
+ id: elProps.id,
1894
+ federationGuid: elProps.federationGuid,
1895
+ code: elProps.code,
1896
+ });
1815
1897
  return elProps.id = this._iModel[_nativeDb].insertElement(elProps, options);
1816
1898
  }
1817
1899
  catch (err) {
@@ -1833,6 +1915,11 @@ function processSchemaWriteStatus(status) {
1833
1915
  */
1834
1916
  updateElement(elProps) {
1835
1917
  try {
1918
+ this[_cache].delete({
1919
+ id: elProps.id,
1920
+ federationGuid: elProps.federationGuid,
1921
+ code: elProps.code,
1922
+ });
1836
1923
  this._iModel[_nativeDb].updateElement(elProps);
1837
1924
  }
1838
1925
  catch (err) {
@@ -1850,6 +1937,7 @@ function processSchemaWriteStatus(status) {
1850
1937
  const iModel = this._iModel;
1851
1938
  Id64.toIdSet(ids).forEach((id) => {
1852
1939
  try {
1940
+ this[_cache].delete({ id });
1853
1941
  iModel[_nativeDb].deleteElement(id);
1854
1942
  }
1855
1943
  catch (err) {
@@ -1940,6 +2028,7 @@ function processSchemaWriteStatus(status) {
1940
2028
  */
1941
2029
  queryChildren(elementId) {
1942
2030
  const sql = "SELECT ECInstanceId FROM BisCore:Element WHERE Parent.Id=:elementId";
2031
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1943
2032
  return this._iModel.withPreparedStatement(sql, (statement) => {
1944
2033
  statement.bindId("elementId", elementId);
1945
2034
  const childIds = [];
@@ -1955,6 +2044,7 @@ function processSchemaWriteStatus(status) {
1955
2044
  * @throws [[IModelError]] if the element does not exist
1956
2045
  */
1957
2046
  queryParent(elementId) {
2047
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1958
2048
  return this._iModel.withPreparedStatement(`select parent.id from ${Element.classFullName} where ecinstanceid=?`, (stmt) => {
1959
2049
  stmt.bindId(1, elementId);
1960
2050
  if (stmt.step() !== DbResult.BE_SQLITE_ROW)
@@ -1971,6 +2061,7 @@ function processSchemaWriteStatus(status) {
1971
2061
  return false; // Special case since the RepositoryModel does not sub-model the root Subject
1972
2062
  // A sub-model will have the same Id value as the element it is describing
1973
2063
  const sql = "SELECT ECInstanceId FROM BisCore:Model WHERE ECInstanceId=:elementId";
2064
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1974
2065
  return this._iModel.withPreparedStatement(sql, (statement) => {
1975
2066
  statement.bindId("elementId", elementId);
1976
2067
  return DbResult.BE_SQLITE_ROW === statement.step();
@@ -1985,6 +2076,7 @@ function processSchemaWriteStatus(status) {
1985
2076
  */
1986
2077
  _queryAspects(elementId, fromClassFullName, excludedClassFullNames) {
1987
2078
  const sql = `SELECT ECInstanceId,ECClassId FROM ${fromClassFullName} WHERE Element.Id=:elementId ORDER BY ECClassId,ECInstanceId`; // ORDER BY to maximize statement reuse
2079
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1988
2080
  return this._iModel.withPreparedStatement(sql, (statement) => {
1989
2081
  statement.bindId("elementId", elementId);
1990
2082
  const aspects = [];
@@ -2003,6 +2095,7 @@ function processSchemaWriteStatus(status) {
2003
2095
  */
2004
2096
  _queryAspect(aspectInstanceId, aspectClassName) {
2005
2097
  const sql = `SELECT * FROM ${aspectClassName} WHERE ECInstanceId=:aspectInstanceId`;
2098
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2006
2099
  const aspect = this._iModel.withPreparedStatement(sql, (statement) => {
2007
2100
  statement.bindId("aspectInstanceId", aspectInstanceId);
2008
2101
  if (DbResult.BE_SQLITE_ROW === statement.step()) {
@@ -2023,6 +2116,7 @@ function processSchemaWriteStatus(status) {
2023
2116
  */
2024
2117
  getAspect(aspectInstanceId) {
2025
2118
  const sql = "SELECT ECClassId FROM BisCore:ElementAspect WHERE ECInstanceId=:aspectInstanceId";
2119
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2026
2120
  const aspectClassFullName = this._iModel.withPreparedStatement(sql, (statement) => {
2027
2121
  statement.bindId("aspectInstanceId", aspectInstanceId);
2028
2122
  return (DbResult.BE_SQLITE_ROW === statement.step()) ? statement.getValue(0).getClassNameForClassId().replace(".", ":") : undefined;
@@ -2034,6 +2128,7 @@ function processSchemaWriteStatus(status) {
2034
2128
  }
2035
2129
  static classMap = new Map();
2036
2130
  runInstanceQuery(sql, elementId, excludedClassFullNames) {
2131
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2037
2132
  return this._iModel.withPreparedStatement(sql, (statement) => {
2038
2133
  statement.bindId("elementId", elementId);
2039
2134
  const aspects = [];
@@ -2083,8 +2178,11 @@ function processSchemaWriteStatus(status) {
2083
2178
  let classIdList = IModelDb.Elements.classMap.get(aspectClassFullName);
2084
2179
  if (classIdList === undefined) {
2085
2180
  const classIds = [];
2181
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2086
2182
  this._iModel.withPreparedStatement(`select SourceECInstanceId from meta.ClassHasAllBaseClasses where TargetECInstanceId = (select ECInstanceId from meta.ECClassDef where Name='${fullClassName[1]}'
2087
- and Schema.Id = (select ECInstanceId from meta.ECSchemaDef where Name='${fullClassName[0]}')) and SourceECInstanceId != TargetECInstanceId`, (statement) => {
2183
+ and Schema.Id = (select ECInstanceId from meta.ECSchemaDef where Name='${fullClassName[0]}')) and SourceECInstanceId != TargetECInstanceId`,
2184
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
2185
+ (statement) => {
2088
2186
  while (statement.step() === DbResult.BE_SQLITE_ROW)
2089
2187
  classIds.push(statement.getValue(0).getId());
2090
2188
  });
@@ -2152,7 +2250,7 @@ function processSchemaWriteStatus(status) {
2152
2250
  }
2153
2251
  IModelDb.Elements = Elements;
2154
2252
  /** The collection of views in an [[IModelDb]].
2155
- * @public
2253
+ * @public @preview
2156
2254
  */
2157
2255
  class Views {
2158
2256
  _iModel;
@@ -2328,7 +2426,7 @@ function processSchemaWriteStatus(status) {
2328
2426
  }
2329
2427
  /** Set the default view property the iModel.
2330
2428
  * @param viewId The Id of the ViewDefinition to use as the default
2331
- * @deprecated in 4.2.x. Avoid setting this property - it is not practical for one single view to serve the needs of the many applications
2429
+ * @deprecated in 4.2.x - will not be removed until after 2026-06-13. Avoid setting this property - it is not practical for one single view to serve the needs of the many applications
2332
2430
  * that might wish to view the contents of the iModel.
2333
2431
  */
2334
2432
  setDefaultViewId(viewId) {
@@ -2342,9 +2440,9 @@ function processSchemaWriteStatus(status) {
2342
2440
  }
2343
2441
  IModelDb.Views = Views;
2344
2442
  /** Represents the current state of a pollable tile content request.
2345
- * Note: lack of a "completed" state because polling a completed request returns the content as a Uint8Array.
2346
- * @internal
2347
- */
2443
+ * Note: lack of a "completed" state because polling a completed request returns the content as a Uint8Array.
2444
+ * @internal
2445
+ */
2348
2446
  let TileContentState;
2349
2447
  (function (TileContentState) {
2350
2448
  TileContentState[TileContentState["New"] = 0] = "New";
@@ -2584,7 +2682,7 @@ export class BriefcaseDb extends IModelDb {
2584
2682
  const file = { path: args.fileName, key: args.key };
2585
2683
  const openMode = (args.readonly || args.watchForChanges) ? OpenMode.Readonly : OpenMode.ReadWrite;
2586
2684
  const nativeDb = this.openDgnDb(file, openMode, undefined, args);
2587
- const briefcaseDb = new BriefcaseDb({ nativeDb, key: file.key ?? Guid.createValue(), openMode, briefcaseId: nativeDb.getBriefcaseId() });
2685
+ const briefcaseDb = new this({ nativeDb, key: file.key ?? Guid.createValue(), openMode, briefcaseId: nativeDb.getBriefcaseId() });
2588
2686
  // If they asked to watch for changes, set an fs.watch on the "-watch" file (only it is modified while we hold this connection.)
2589
2687
  // Whenever there are changes, restart our defaultTxn. That loads the changes from the other connection and sends
2590
2688
  // notifications as if they happened on this connection. Note: the watcher is called only when the backend event loop cycles.
@@ -2593,6 +2691,7 @@ export class BriefcaseDb extends IModelDb {
2593
2691
  touch.sync(briefcaseDb.watchFilePathName);
2594
2692
  // Restart default txn to trigger events when watch file is changed by some other process.
2595
2693
  const watcher = fs.watch(briefcaseDb.watchFilePathName, { persistent: false }, () => {
2694
+ nativeDb.clearECDbCache();
2596
2695
  nativeDb.restartDefaultTxn();
2597
2696
  briefcaseDb.changeset = briefcaseDb[_nativeDb].getCurrentChangeset();
2598
2697
  });
@@ -2932,7 +3031,7 @@ class RefreshV2CheckpointSas {
2932
3031
  Logger.logInfo(BackendLoggerCategory.Authorization, "attempting to refresh sasToken for checkpoint");
2933
3032
  try {
2934
3033
  // this exchanges the supplied user accessToken for an expiring blob-store token to read the checkpoint.
2935
- const container = iModel[_nativeDb].cloudContainer;
3034
+ const container = iModel.cloudContainer;
2936
3035
  if (!container)
2937
3036
  throw new Error("checkpoint is not from a cloud container");
2938
3037
  assert(undefined !== iModel.iTwinId);
@@ -3058,7 +3157,7 @@ export class SnapshotDb extends IModelDb {
3058
3157
  file.key = `${nativeDb.getIModelId()}:${nativeDb.getCurrentChangeset().id}`;
3059
3158
  }
3060
3159
  assert(undefined !== file.key);
3061
- const db = new SnapshotDb(nativeDb, file.key);
3160
+ const db = new this(nativeDb, file.key);
3062
3161
  this.onOpened.raiseEvent(db);
3063
3162
  return db;
3064
3163
  }
@@ -3084,7 +3183,7 @@ export class SnapshotDb extends IModelDb {
3084
3183
  snapshot._restartDefaultTxnTimer = setTimeout(() => {
3085
3184
  snapshot.restartDefaultTxn();
3086
3185
  }, (10 * 60) * 1000).unref(); // 10 minutes
3087
- const cloudContainer = snapshot[_nativeDb].cloudContainer;
3186
+ const cloudContainer = snapshot.cloudContainer;
3088
3187
  if (cloudContainer !== undefined) {
3089
3188
  snapshot._refreshSas = new RefreshV2CheckpointSas(cloudContainer.accessToken, checkpoint.reattachSafetySeconds);
3090
3189
  }
@@ -3158,7 +3257,7 @@ export class StandaloneDb extends BriefcaseDb {
3158
3257
  nativeDb.setITwinId(Guid.empty);
3159
3258
  nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);
3160
3259
  nativeDb.saveChanges();
3161
- const db = new StandaloneDb({ nativeDb, key: Guid.createValue(), briefcaseId: BriefcaseIdValue.Unassigned, openMode: OpenMode.ReadWrite });
3260
+ const db = new this({ nativeDb, key: Guid.createValue(), briefcaseId: BriefcaseIdValue.Unassigned, openMode: OpenMode.ReadWrite });
3162
3261
  db.channels.addAllowedChannel(ChannelControl.sharedChannelName);
3163
3262
  return db;
3164
3263
  }
@@ -3204,7 +3303,7 @@ export class StandaloneDb extends BriefcaseDb {
3204
3303
  if (iTwinId !== Guid.empty) // a "standalone" iModel means it is not associated with an iTwin
3205
3304
  throw new IModelError(IModelStatus.WrongIModel, `${filePath} is not a Standalone iModel. iTwinId=${iTwinId}`);
3206
3305
  assert(undefined !== file.key);
3207
- const db = new StandaloneDb({ nativeDb, key: file.key, openMode, briefcaseId: BriefcaseIdValue.Unassigned });
3306
+ const db = new this({ nativeDb, key: file.key, openMode, briefcaseId: BriefcaseIdValue.Unassigned });
3208
3307
  return db;
3209
3308
  }
3210
3309
  catch (error) {