@itwin/core-backend 5.9.0-dev.8 → 5.9.0-dev.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/lib/cjs/BackendHubAccess.d.ts +38 -0
  2. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  3. package/lib/cjs/BackendHubAccess.js.map +1 -1
  4. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  5. package/lib/cjs/BisCoreSchema.js.map +1 -1
  6. package/lib/cjs/BlobContainerService.js.map +1 -1
  7. package/lib/cjs/BriefcaseManager.js.map +1 -1
  8. package/lib/cjs/CatalogDb.js.map +1 -1
  9. package/lib/cjs/Category.js.map +1 -1
  10. package/lib/cjs/ChangeSummaryManager.js +2 -2
  11. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  12. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  13. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  14. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  15. package/lib/cjs/ChannelControl.js.map +1 -1
  16. package/lib/cjs/CheckpointManager.js.map +1 -1
  17. package/lib/cjs/ClassRegistry.js +5 -5
  18. package/lib/cjs/ClassRegistry.js.map +1 -1
  19. package/lib/cjs/CloudSqlite.js.map +1 -1
  20. package/lib/cjs/CodeService.js.map +1 -1
  21. package/lib/cjs/CodeSpecs.js.map +1 -1
  22. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  23. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  24. package/lib/cjs/DevTools.js.map +1 -1
  25. package/lib/cjs/DisplayStyle.js.map +1 -1
  26. package/lib/cjs/ECDb.js.map +1 -1
  27. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  28. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  29. package/lib/cjs/ECSqlStatement.js.map +1 -1
  30. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  31. package/lib/cjs/EditTxn.js.map +1 -1
  32. package/lib/cjs/Element.js.map +1 -1
  33. package/lib/cjs/ElementAspect.js.map +1 -1
  34. package/lib/cjs/ElementGraphics.js.map +1 -1
  35. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  36. package/lib/cjs/Entity.js.map +1 -1
  37. package/lib/cjs/EntityReferences.js.map +1 -1
  38. package/lib/cjs/ExportGraphics.js.map +1 -1
  39. package/lib/cjs/ExternalSource.js.map +1 -1
  40. package/lib/cjs/FontFile.js.map +1 -1
  41. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  42. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  43. package/lib/cjs/GeometrySummary.js +47 -47
  44. package/lib/cjs/GeometrySummary.js.map +1 -1
  45. package/lib/cjs/IModelDb.js +9 -9
  46. package/lib/cjs/IModelDb.js.map +1 -1
  47. package/lib/cjs/IModelDbFonts.js.map +1 -1
  48. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  49. package/lib/cjs/IModelHost.js.map +1 -1
  50. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  51. package/lib/cjs/IModelJsFs.js.map +1 -1
  52. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  53. package/lib/cjs/IpcHost.d.ts.map +1 -1
  54. package/lib/cjs/IpcHost.js +13 -4
  55. package/lib/cjs/IpcHost.js.map +1 -1
  56. package/lib/cjs/LineStyle.js.map +1 -1
  57. package/lib/cjs/LocalHub.js +1 -1
  58. package/lib/cjs/LocalHub.js.map +1 -1
  59. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  60. package/lib/cjs/LockControl.d.ts +85 -1
  61. package/lib/cjs/LockControl.d.ts.map +1 -1
  62. package/lib/cjs/LockControl.js.map +1 -1
  63. package/lib/cjs/Material.js.map +1 -1
  64. package/lib/cjs/Model.js.map +1 -1
  65. package/lib/cjs/NativeAppStorage.js.map +1 -1
  66. package/lib/cjs/NativeHost.js.map +1 -1
  67. package/lib/cjs/NavigationRelationship.js.map +1 -1
  68. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  69. package/lib/cjs/PropertyStore.js.map +1 -1
  70. package/lib/cjs/Relationship.js.map +1 -1
  71. package/lib/cjs/RpcBackend.js.map +1 -1
  72. package/lib/cjs/SQLiteDb.js.map +1 -1
  73. package/lib/cjs/Schema.js.map +1 -1
  74. package/lib/cjs/SchemaSync.js.map +1 -1
  75. package/lib/cjs/SchemaUtils.js.map +1 -1
  76. package/lib/cjs/SheetIndex.js.map +1 -1
  77. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  78. package/lib/cjs/SqliteStatement.js.map +1 -1
  79. package/lib/cjs/StashManager.js.map +1 -1
  80. package/lib/cjs/Texture.js.map +1 -1
  81. package/lib/cjs/TileStorage.js.map +1 -1
  82. package/lib/cjs/TxnManager.d.ts +100 -4
  83. package/lib/cjs/TxnManager.d.ts.map +1 -1
  84. package/lib/cjs/TxnManager.js +171 -8
  85. package/lib/cjs/TxnManager.js.map +1 -1
  86. package/lib/cjs/ViewDefinition.js.map +1 -1
  87. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  88. package/lib/cjs/ViewStore.js.map +1 -1
  89. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  90. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  91. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  92. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  93. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  94. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  95. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  96. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  97. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  98. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  99. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  100. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  101. package/lib/cjs/core-backend.js.map +1 -1
  102. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  103. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  104. package/lib/cjs/domains/GenericElements.js.map +1 -1
  105. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  106. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  107. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  108. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  109. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  110. package/lib/cjs/internal/HubMock.d.ts +2 -0
  111. package/lib/cjs/internal/HubMock.d.ts.map +1 -1
  112. package/lib/cjs/internal/HubMock.js +7 -0
  113. package/lib/cjs/internal/HubMock.js.map +1 -1
  114. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  115. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  116. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  117. package/lib/cjs/internal/NoLocks.d.ts.map +1 -1
  118. package/lib/cjs/internal/NoLocks.js +6 -0
  119. package/lib/cjs/internal/NoLocks.js.map +1 -1
  120. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  121. package/lib/cjs/internal/ServerBasedLocks.d.ts +12 -0
  122. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  123. package/lib/cjs/internal/ServerBasedLocks.js +285 -4
  124. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  125. package/lib/cjs/internal/Symbols.js.map +1 -1
  126. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  127. package/lib/cjs/internal/cross-package.js.map +1 -1
  128. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  129. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  130. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  131. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  132. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  133. package/lib/cjs/rpc/multipart.js.map +1 -1
  134. package/lib/cjs/rpc/tracing.js.map +1 -1
  135. package/lib/cjs/rpc/web/logging.js.map +1 -1
  136. package/lib/cjs/rpc/web/request.js.map +1 -1
  137. package/lib/cjs/rpc/web/response.js.map +1 -1
  138. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  139. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  140. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  141. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  142. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  143. package/lib/cjs/workspace/Settings.js.map +1 -1
  144. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  145. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  146. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  147. package/lib/cjs/workspace/Workspace.js.map +1 -1
  148. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  149. package/lib/esm/BackendHubAccess.d.ts +38 -0
  150. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  151. package/lib/esm/BackendHubAccess.js.map +1 -1
  152. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  153. package/lib/esm/BisCoreSchema.js.map +1 -1
  154. package/lib/esm/BlobContainerService.js.map +1 -1
  155. package/lib/esm/BriefcaseManager.js.map +1 -1
  156. package/lib/esm/CatalogDb.js.map +1 -1
  157. package/lib/esm/Category.js.map +1 -1
  158. package/lib/esm/ChangeSummaryManager.js +2 -2
  159. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  160. package/lib/esm/ChangedElementsDb.js.map +1 -1
  161. package/lib/esm/ChangesetECAdaptor.js +248 -248
  162. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  163. package/lib/esm/ChannelControl.js.map +1 -1
  164. package/lib/esm/CheckpointManager.js.map +1 -1
  165. package/lib/esm/ClassRegistry.js +5 -5
  166. package/lib/esm/ClassRegistry.js.map +1 -1
  167. package/lib/esm/CloudSqlite.js.map +1 -1
  168. package/lib/esm/CodeService.js.map +1 -1
  169. package/lib/esm/CodeSpecs.js.map +1 -1
  170. package/lib/esm/ConcurrentQuery.js.map +1 -1
  171. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  172. package/lib/esm/DevTools.js.map +1 -1
  173. package/lib/esm/DisplayStyle.js.map +1 -1
  174. package/lib/esm/ECDb.js.map +1 -1
  175. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  176. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  177. package/lib/esm/ECSqlStatement.js.map +1 -1
  178. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  179. package/lib/esm/EditTxn.js.map +1 -1
  180. package/lib/esm/Element.js.map +1 -1
  181. package/lib/esm/ElementAspect.js.map +1 -1
  182. package/lib/esm/ElementGraphics.js.map +1 -1
  183. package/lib/esm/ElementTreeWalker.js.map +1 -1
  184. package/lib/esm/Entity.js.map +1 -1
  185. package/lib/esm/EntityReferences.js.map +1 -1
  186. package/lib/esm/ExportGraphics.js.map +1 -1
  187. package/lib/esm/ExternalSource.js.map +1 -1
  188. package/lib/esm/FontFile.js.map +1 -1
  189. package/lib/esm/GeoCoordConfig.js.map +1 -1
  190. package/lib/esm/GeographicCRSServices.js.map +1 -1
  191. package/lib/esm/GeometrySummary.js +47 -47
  192. package/lib/esm/GeometrySummary.js.map +1 -1
  193. package/lib/esm/IModelDb.js +9 -9
  194. package/lib/esm/IModelDb.js.map +1 -1
  195. package/lib/esm/IModelDbFonts.js.map +1 -1
  196. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  197. package/lib/esm/IModelHost.js.map +1 -1
  198. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  199. package/lib/esm/IModelJsFs.js.map +1 -1
  200. package/lib/esm/ImageSourceConversion.js.map +1 -1
  201. package/lib/esm/IpcHost.d.ts.map +1 -1
  202. package/lib/esm/IpcHost.js +13 -4
  203. package/lib/esm/IpcHost.js.map +1 -1
  204. package/lib/esm/LineStyle.js.map +1 -1
  205. package/lib/esm/LocalHub.js +1 -1
  206. package/lib/esm/LocalHub.js.map +1 -1
  207. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  208. package/lib/esm/LockControl.d.ts +85 -1
  209. package/lib/esm/LockControl.d.ts.map +1 -1
  210. package/lib/esm/LockControl.js.map +1 -1
  211. package/lib/esm/Material.js.map +1 -1
  212. package/lib/esm/Model.js.map +1 -1
  213. package/lib/esm/NativeAppStorage.js.map +1 -1
  214. package/lib/esm/NativeHost.js.map +1 -1
  215. package/lib/esm/NavigationRelationship.js.map +1 -1
  216. package/lib/esm/PromiseMemoizer.js.map +1 -1
  217. package/lib/esm/PropertyStore.js.map +1 -1
  218. package/lib/esm/Relationship.js.map +1 -1
  219. package/lib/esm/RpcBackend.js.map +1 -1
  220. package/lib/esm/SQLiteDb.js.map +1 -1
  221. package/lib/esm/Schema.js.map +1 -1
  222. package/lib/esm/SchemaSync.js.map +1 -1
  223. package/lib/esm/SchemaUtils.js.map +1 -1
  224. package/lib/esm/SheetIndex.js.map +1 -1
  225. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  226. package/lib/esm/SqliteStatement.js.map +1 -1
  227. package/lib/esm/StashManager.js.map +1 -1
  228. package/lib/esm/Texture.js.map +1 -1
  229. package/lib/esm/TileStorage.js.map +1 -1
  230. package/lib/esm/TxnManager.d.ts +100 -4
  231. package/lib/esm/TxnManager.d.ts.map +1 -1
  232. package/lib/esm/TxnManager.js +171 -8
  233. package/lib/esm/TxnManager.js.map +1 -1
  234. package/lib/esm/ViewDefinition.js.map +1 -1
  235. package/lib/esm/ViewStateHydrator.js.map +1 -1
  236. package/lib/esm/ViewStore.js.map +1 -1
  237. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  238. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  239. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  240. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  241. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  242. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  243. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  244. package/lib/esm/core-backend.js.map +1 -1
  245. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  246. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  247. package/lib/esm/domains/GenericElements.js.map +1 -1
  248. package/lib/esm/domains/GenericSchema.js.map +1 -1
  249. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  250. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  251. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  252. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  253. package/lib/esm/internal/HubMock.d.ts +2 -0
  254. package/lib/esm/internal/HubMock.d.ts.map +1 -1
  255. package/lib/esm/internal/HubMock.js +7 -0
  256. package/lib/esm/internal/HubMock.js.map +1 -1
  257. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  258. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  259. package/lib/esm/internal/NativePlatform.js.map +1 -1
  260. package/lib/esm/internal/NoLocks.d.ts.map +1 -1
  261. package/lib/esm/internal/NoLocks.js +6 -0
  262. package/lib/esm/internal/NoLocks.js.map +1 -1
  263. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  264. package/lib/esm/internal/ServerBasedLocks.d.ts +12 -0
  265. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
  266. package/lib/esm/internal/ServerBasedLocks.js +286 -5
  267. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  268. package/lib/esm/internal/Symbols.js.map +1 -1
  269. package/lib/esm/internal/annotations/fields.js.map +1 -1
  270. package/lib/esm/internal/cross-package.js.map +1 -1
  271. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  272. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  273. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  274. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  275. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  276. package/lib/esm/rpc/multipart.js.map +1 -1
  277. package/lib/esm/rpc/tracing.js.map +1 -1
  278. package/lib/esm/rpc/web/logging.js.map +1 -1
  279. package/lib/esm/rpc/web/request.js.map +1 -1
  280. package/lib/esm/rpc/web/response.js.map +1 -1
  281. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  282. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  283. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  284. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  285. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  286. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  287. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  288. package/lib/esm/test/AttachDb.test.js +11 -11
  289. package/lib/esm/test/AttachDb.test.js.map +1 -1
  290. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  291. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  292. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  293. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  294. package/lib/esm/test/IModelHost.test.js.map +1 -1
  295. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  296. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  297. package/lib/esm/test/IpcHost.test.js.map +1 -1
  298. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  299. package/lib/esm/test/PrintElementTree.js.map +1 -1
  300. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  301. package/lib/esm/test/RevisionUtility.js.map +1 -1
  302. package/lib/esm/test/SchemaUtils.test.js +25 -25
  303. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  304. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  305. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  306. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  307. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  308. package/lib/esm/test/TestEditTxn.js.map +1 -1
  309. package/lib/esm/test/TestUtils.js.map +1 -1
  310. package/lib/esm/test/annotations/Fields.test.js +53 -53
  311. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  312. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  313. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  314. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  315. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  316. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  317. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  318. package/lib/esm/test/categories/Category.test.js.map +1 -1
  319. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  320. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  321. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  322. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  323. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  324. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  325. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  326. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  327. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  328. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  329. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  330. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  331. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  332. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  333. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  334. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  335. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  336. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  337. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  338. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  339. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  340. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  341. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  342. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  343. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  344. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  345. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  346. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  347. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  348. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  349. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  350. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  351. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  352. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  353. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  354. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  355. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  356. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  357. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  358. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  359. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  360. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  361. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  362. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  363. package/lib/esm/test/hubaccess/CheckpointManager.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 +145 -145
  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 +44 -44
  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 +13 -13
  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/misc/DevTools.test.js.map +1 -1
  382. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  383. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  384. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  385. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  386. package/lib/esm/test/rpc/response.test.js.map +1 -1
  387. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  388. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  389. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  390. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  391. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  392. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  393. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  394. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  395. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  396. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  397. package/lib/esm/test/standalone/ChangesetReader.test.js +135 -135
  398. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  399. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  400. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  401. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  402. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  403. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  404. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  405. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  406. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  407. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  408. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  409. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  410. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  411. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  412. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  413. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  414. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  415. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  416. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  417. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  418. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  419. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  420. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  421. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  422. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  423. package/lib/esm/test/standalone/ServerBasedLocks.test.js +907 -3
  424. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  425. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  426. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  427. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  428. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  429. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  430. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  431. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  432. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  433. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  434. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  435. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  436. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  437. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  438. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  439. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  440. package/lib/esm/workspace/Settings.js.map +1 -1
  441. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  442. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  443. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  444. package/lib/esm/workspace/Workspace.js.map +1 -1
  445. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  446. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"StashManager.js","sourceRoot":"","sources":["../../src/StashManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { DbResult, GuidString, Id64Array, Id64String, ITwinError, Logger, OpenMode } from \"@itwin/core-bentley\";\r\nimport { ChangesetIdWithIndex, LocalDirName, LockState, TxnProps } from \"@itwin/core-common\";\r\nimport { existsSync, mkdirSync, readdirSync, statSync, unlinkSync } from \"node:fs\";\r\nimport * as path from \"node:path\";\r\nimport { BriefcaseManager } from \"./BriefcaseManager\";\r\nimport { BriefcaseDb } from \"./IModelDb\";\r\nimport { _elementWasCreated, _getHubAccess, _hubAccess, _nativeDb, _resetIModelDb } from \"./internal/Symbols\";\r\nimport { SQLiteDb } from \"./SQLiteDb\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\n\r\nconst loggerCategory = BackendLoggerCategory.StashManager;\r\n\r\n/**\r\n * Properties of a stash\r\n * @internal\r\n */\r\nexport interface StashProps {\r\n /** Unique identifier for the stash */\r\n readonly id: GuidString;\r\n\r\n /** ID of the iModel being stashed */\r\n readonly iModelId: GuidString;\r\n\r\n /** ID of the briefcase being stashed */\r\n readonly briefcaseId: number;\r\n\r\n /** ISO local Timestamp of the stash */\r\n readonly timestamp: string;\r\n\r\n /** Description of the stash */\r\n readonly description: string;\r\n\r\n /** Hash of the stash */\r\n readonly hash: string;\r\n\r\n /** Parent changeset of the stash */\r\n readonly parentChangeset: ChangesetIdWithIndex;\r\n\r\n /** ID sequences for the stash */\r\n readonly idSequences: {\r\n element: Id64String;\r\n instance: Id64String;\r\n };\r\n\r\n /** Transaction properties for the stash */\r\n readonly txns: TxnProps[];\r\n\r\n /** Number of locks acquired by the stash */\r\n readonly acquiredLocks: number;\r\n}\r\n\r\n/**\r\n * Properties for creating a stash\r\n * @internal\r\n */\r\nexport interface CreateStashProps {\r\n /** Briefcase database instance */\r\n readonly db: BriefcaseDb;\r\n /** description of the stash */\r\n readonly description: string;\r\n /** discard all local changes and unless retainLocks flag is set, all locks will be released */\r\n readonly discardLocalChanges?: true;\r\n /** retains all locks after discarding local changes */\r\n readonly retainLocks?: true;\r\n}\r\n\r\n/**\r\n * Arguments for stash operations\r\n * @internal\r\n */\r\nexport interface StashArgs {\r\n readonly db: BriefcaseDb;\r\n readonly stash: Id64String | StashProps;\r\n}\r\n\r\nenum LockOrigin {\r\n Acquired = 0,\r\n NewElement = 1,\r\n Discovered = 2,\r\n};\r\n\r\n/**\r\n * An error originating from the StashManager API.\r\n * @internal\r\n */\r\nexport namespace StashError {\r\n export const scope = \"itwin-StashManager\";\r\n export type Key =\r\n \"readonly\" |\r\n \"no-file\" |\r\n \"no-stashes\" |\r\n \"invalid-stash\" |\r\n \"nothing-to-stash\" |\r\n \"unsaved-changes\" |\r\n \"pending-schema-changes\" |\r\n \"stash-not-found\";\r\n\r\n /** Instantiate and throw a StashError */\r\n export function throwError(key: Key, message: string): never {\r\n ITwinError.throwError<ITwinError>({ iTwinErrorId: { scope, key }, message });\r\n }\r\n /** Determine whether an error object is a StashError */\r\n export function isError(error: unknown, key?: Key): error is ITwinError {\r\n return ITwinError.isError<ITwinError>(error, scope, key);\r\n }\r\n}\r\n\r\n/**\r\n * Stash manager allow stash, drop, apply and merge stashes\r\n * @internal\r\n */\r\nexport class StashManager {\r\n\r\n private static readonly STASHES_ROOT_DIR_NAME: string = \".stashes\";\r\n /**\r\n * Retrieves the root folder path for stash files associated with the specified BriefcaseDb.\r\n *\r\n * @param db - The BriefcaseDb instance for which to determine the stash root folder.\r\n * @param ensureExists - If true, the stash root directory will be created if it does not already exist.\r\n * @returns The absolute path to the stash root directory.\r\n */\r\n private static getStashRootFolder(db: BriefcaseDb, ensureExists: boolean): LocalDirName {\r\n if (!db.isOpen || db.isReadonly)\r\n StashError.throwError(\"readonly\", \"Database is not open or is readonly\");\r\n\r\n if (!existsSync(db[_nativeDb].getFilePath())) {\r\n StashError.throwError(\"no-file\", \"Database file does not exist\");\r\n }\r\n\r\n const stashDir = path.join(path.dirname(db[_nativeDb].getFilePath()), this.STASHES_ROOT_DIR_NAME, `${db.briefcaseId}`);\r\n if (ensureExists && !existsSync(stashDir)) {\r\n mkdirSync(stashDir, { recursive: true });\r\n }\r\n return stashDir;\r\n }\r\n\r\n /**\r\n * Retrieves the stash ID from the provided arguments.\r\n *\r\n * If the `stash` property of `args` is a string, it returns the string in lowercase.\r\n * If the `stash` property is an object, it returns the `id` property of the object in lowercase.\r\n *\r\n * @param args - The arguments containing the stash information, which can be either a string or an object with an `id` property.\r\n * @returns The stash ID as a lowercase string.\r\n */\r\n private static getStashId(args: StashArgs) {\r\n return (typeof args.stash === \"string\" ? args.stash : args.stash.id).toLowerCase();\r\n }\r\n\r\n /**\r\n * Retrieves the file path to the stash file associated with the provided arguments.\r\n *\r\n * @param args - The arguments required to identify the stash, including the database reference.\r\n * @returns The absolute path to the stash file.\r\n */\r\n private static getStashFilePath(args: StashArgs) {\r\n const stashRoot = this.getStashRootFolder(args.db, false);\r\n if (!existsSync(stashRoot)) {\r\n StashError.throwError(\"no-stashes\", \"No stashes exist for this briefcase\");\r\n }\r\n\r\n const stashFilePath = path.join(stashRoot, `${this.getStashId(args)}.stash`);\r\n if (!existsSync(stashFilePath)) {\r\n StashError.throwError(\"invalid-stash\", \"Invalid stash\");\r\n }\r\n return stashFilePath;\r\n }\r\n\r\n /**\r\n * Queries the stash database for lock IDs matching the specified state and origin.\r\n *\r\n * @param args - The arguments required to access the stash database.\r\n * @param state - The lock state to filter by.\r\n * @param origin - The lock origin to filter by.\r\n * @returns An array of lock IDs (`Id64Array`) that match the given state and origin.\r\n */\r\n private static queryLocks(args: StashArgs, state: LockState, origin: LockOrigin): Id64Array {\r\n return this.withStash(args, (stashDb) => {\r\n const query = `SELECT JSON_GROUP_ARRAY(FORMAT('0x%x', Id)) FROM [locks] WHERE State = ${state} AND origin = ${origin}`;\r\n return stashDb.withPreparedSqliteStatement(query, (stmt) => {\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n return JSON.parse(stmt.getValueString(0)) as Id64Array;\r\n }\r\n return [];\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Acquire locks for the specified stash. If this fail then stash should not be applied.\r\n * @param args The stash arguments.\r\n */\r\n private static async acquireLocks(args: StashArgs) {\r\n const shared = this.queryLocks(args, LockState.Shared, LockOrigin.Acquired);\r\n await args.db.locks.acquireLocks({ shared });\r\n\r\n const exclusive = this.queryLocks(args, LockState.Exclusive, LockOrigin.Acquired);\r\n await args.db.locks.acquireLocks({ exclusive });\r\n\r\n const newElements = this.queryLocks(args, LockState.Shared, LockOrigin.NewElement);\r\n for (const id of newElements) {\r\n if (!args.db.locks.holdsExclusiveLock(id)) {\r\n args.db.locks[_elementWasCreated](id);\r\n }\r\n }\r\n }\r\n /**\r\n * Creates a stash of changes for the specified briefcase.\r\n *\r\n * This method generates a stash in the stash root directory for the given briefcase, using the provided description and iModelId.\r\n * Optionally, it can reset the briefcase by releasing all locks after stashing.\r\n *\r\n * @param args - The properties required to create a stash, including the briefcase, description, iModelId, and an optional resetBriefcase flag.\r\n * @returns A promise that resolves to the properties of the created stash.\r\n */\r\n public static async stash(args: CreateStashProps): Promise<StashProps> {\r\n if (!args.db.txns.hasPendingTxns) {\r\n StashError.throwError(\"nothing-to-stash\", \"Nothing to stash\");\r\n }\r\n\r\n if (args.db.txns.hasUnsavedChanges) {\r\n StashError.throwError(\"unsaved-changes\", \"Unsaved changes exist\");\r\n }\r\n\r\n if (args.db.txns.hasPendingSchemaChanges) {\r\n StashError.throwError(\"pending-schema-changes\", \"Pending schema changeset. Stashing is not currently supported for schema changes\");\r\n }\r\n\r\n const stashRootDir = this.getStashRootFolder(args.db, true);\r\n const iModelId = args.db.iModelId;\r\n const stash = args.db[_nativeDb].stashChanges({ stashRootDir, description: args.description, iModelId }) as StashProps;\r\n if (args.discardLocalChanges) {\r\n await args.db.discardChanges({ retainLocks: args.retainLocks });\r\n }\r\n\r\n Logger.logInfo(loggerCategory, `Stashed changes`, () => stash);\r\n return stash;\r\n }\r\n\r\n /**\r\n * Retrieves the stash properties from the database for the given arguments.\r\n *\r\n * @param args - The arguments required to locate and access the stash.\r\n * @returns The stash file properties if found; otherwise, `undefined`.\r\n */\r\n public static tryGetStash(args: StashArgs): StashProps | undefined {\r\n try {\r\n return this.getStash(args);\r\n } catch (error: any) {\r\n Logger.logError(loggerCategory, `Error getting stash with ${this.getStashId(args)}: ${error.message}`);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Retrieves the stash properties from the database using the provided arguments.\r\n *\r\n * @param args - The arguments required to access the stash.\r\n * @returns The stash properties parsed from the database.\r\n */\r\n public static getStash(args: StashArgs): StashProps {\r\n return this.withStash(args, (stashDb) => {\r\n const stashProps = stashDb.withPreparedSqliteStatement(\"SELECT [val] FROM [be_Local] WHERE [name]='$stash_info'\", (stmt) => {\r\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\r\n StashError.throwError(\"invalid-stash\", \"Invalid stash\");\r\n return JSON.parse(stmt.getValueString(0)) as StashProps;\r\n });\r\n return stashProps;\r\n });\r\n }\r\n\r\n /**\r\n * Executes a callback function with a read-only SQLite database connection to a stash file.\r\n *\r\n * @typeParam T - The return type of the callback function.\r\n * @param args - Arguments required to determine the stash file path.\r\n * @param callback - A function that receives an open {@link SQLiteDb} instance connected to the stash file.\r\n * @returns The value returned by the callback function.\r\n */\r\n private static withStash<T>(args: StashArgs, callback: (stashDb: SQLiteDb) => T): T {\r\n const stashFile = this.getStashFilePath(args);\r\n if (!existsSync(stashFile)) {\r\n StashError.throwError(\"invalid-stash\", \"Invalid stash\");\r\n }\r\n\r\n const stashDb = new SQLiteDb();\r\n stashDb.openDb(stashFile, OpenMode.Readonly);\r\n try {\r\n return callback(stashDb);\r\n } finally {\r\n stashDb.closeDb();\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves all stash files associated with the specified {@link BriefcaseDb}.\r\n * @param db - The {@link BriefcaseDb} instance for which to retrieve stash files.\r\n * @returns An array of `StashProps` representing the found stash files, sorted by timestamp.\r\n */\r\n public static getStashes(db: BriefcaseDb): StashProps[] {\r\n const stashes: StashProps[] = [];\r\n const stashDir = this.getStashRootFolder(db, false);\r\n if (!existsSync(stashDir)) {\r\n return stashes;\r\n }\r\n readdirSync(stashDir).filter((file) => {\r\n const filePath = path.join(stashDir, file);\r\n if (existsSync(filePath) && statSync(filePath).isFile() && file.endsWith(\".stash\")) {\r\n const id = file.slice(0, -path.extname(file).length)\r\n const stash = this.tryGetStash({ db, stash: id });\r\n if (stash) {\r\n stashes.push(stash);\r\n }\r\n }\r\n });\r\n stashes.sort((a, b) => Date.parse(b.timestamp) - Date.parse(a.timestamp));\r\n return stashes;\r\n }\r\n\r\n /**\r\n * Deletes the stash file associated with the specified stash ID or properties from the given {@link BriefcaseDb}.\r\n *\r\n * @param db - The {@link BriefcaseDb} instance from which the stash should be dropped.\r\n * @param stashId - The unique identifier (GuidString) or properties (StashProps) of the stash to be deleted.\r\n * @returns Returns `true` if the stash file was successfully deleted, otherwise returns `false`.\r\n */\r\n public static dropStash(args: StashArgs): boolean {\r\n try {\r\n const stashFile = this.getStashFilePath(args);\r\n unlinkSync(stashFile);\r\n return true;\r\n } catch (error: any) {\r\n Logger.logError(loggerCategory, `Error dropping stash: ${error}`);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Removes all stashes associated with the specified {@link BriefcaseDb}.\r\n *\r\n * @param db - The {@link BriefcaseDb} instance from which all stashes will be removed.\r\n */\r\n public static dropAllStashes(db: BriefcaseDb): void {\r\n this.getStashes(db).forEach((stash) => {\r\n this.dropStash({ db, stash });\r\n });\r\n }\r\n\r\n /**\r\n * Queries the hub for the changeset information associated with the given stash.\r\n *\r\n * @param args - The arguments including the stash properties.\r\n * @returns A promise resolving to the changeset ID and index.\r\n */\r\n private static async queryChangeset(args: StashArgs & { stash: StashProps }): Promise<ChangesetIdWithIndex> {\r\n return IModelHost[_hubAccess].queryChangeset({\r\n iModelId: args.stash.iModelId,\r\n changeset: args.stash.parentChangeset,\r\n accessToken: await IModelHost.getAccessToken()\r\n });\r\n }\r\n /**\r\n * Restores the specified stash to the given {@link BriefcaseDb}. This operation will discard any local changes made to db and reverse the tip to the state of the stash and then apply stash. This will restore the undo stack.\r\n *\r\n * @param args - The arguments including the target database and stash properties.\r\n */\r\n public static async restore(args: StashArgs): Promise<void> {\r\n const { db } = args;\r\n Logger.logInfo(loggerCategory, `Restoring stash: ${this.getStashId(args)}`);\r\n\r\n const stash = this.tryGetStash(args);\r\n if (!stash) {\r\n StashError.throwError(\"stash-not-found\", `Stash not found ${this.getStashId(args)}`);\r\n }\r\n\r\n if (db.txns.hasUnsavedChanges) {\r\n StashError.throwError(\"unsaved-changes\", `Unsaved changes are present.`);\r\n }\r\n\r\n if (db.iModelId !== stash.iModelId) {\r\n StashError.throwError(\"invalid-stash\", `Stash does not belong to this iModel`);\r\n }\r\n\r\n if (db.briefcaseId !== stash.briefcaseId) {\r\n StashError.throwError(\"invalid-stash\", `Stash does not belong to this briefcase`);\r\n }\r\n\r\n const stashFile = this.getStashFilePath({ db, stash });\r\n // we need to retain lock that overlapped with stash locks instead of all locks\r\n await db.discardChanges({ retainLocks: true });\r\n await this.acquireLocks(args);\r\n if (db.changeset.id !== stash.parentChangeset.id) {\r\n // Changeset ID mismatch\r\n Logger.logWarning(loggerCategory, \"Changeset ID mismatch\");\r\n const stashChangeset = await this.queryChangeset({ db, stash });\r\n await BriefcaseManager.pullAndApplyChangesets(db, { toIndex: stashChangeset.index });\r\n }\r\n\r\n db[_nativeDb].stashRestore(stashFile);\r\n db[_resetIModelDb]();\r\n db[_nativeDb].saveChanges();\r\n Logger.logInfo(loggerCategory, `Restored stash: ${this.getStashId(args)}`);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"StashManager.js","sourceRoot":"","sources":["../../src/StashManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { DbResult, GuidString, Id64Array, Id64String, ITwinError, Logger, OpenMode } from \"@itwin/core-bentley\";\nimport { ChangesetIdWithIndex, LocalDirName, LockState, TxnProps } from \"@itwin/core-common\";\nimport { existsSync, mkdirSync, readdirSync, statSync, unlinkSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport { BriefcaseManager } from \"./BriefcaseManager\";\nimport { BriefcaseDb } from \"./IModelDb\";\nimport { _elementWasCreated, _getHubAccess, _hubAccess, _nativeDb, _resetIModelDb } from \"./internal/Symbols\";\nimport { SQLiteDb } from \"./SQLiteDb\";\nimport { IModelHost } from \"./IModelHost\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\n\nconst loggerCategory = BackendLoggerCategory.StashManager;\n\n/**\n * Properties of a stash\n * @internal\n */\nexport interface StashProps {\n /** Unique identifier for the stash */\n readonly id: GuidString;\n\n /** ID of the iModel being stashed */\n readonly iModelId: GuidString;\n\n /** ID of the briefcase being stashed */\n readonly briefcaseId: number;\n\n /** ISO local Timestamp of the stash */\n readonly timestamp: string;\n\n /** Description of the stash */\n readonly description: string;\n\n /** Hash of the stash */\n readonly hash: string;\n\n /** Parent changeset of the stash */\n readonly parentChangeset: ChangesetIdWithIndex;\n\n /** ID sequences for the stash */\n readonly idSequences: {\n element: Id64String;\n instance: Id64String;\n };\n\n /** Transaction properties for the stash */\n readonly txns: TxnProps[];\n\n /** Number of locks acquired by the stash */\n readonly acquiredLocks: number;\n}\n\n/**\n * Properties for creating a stash\n * @internal\n */\nexport interface CreateStashProps {\n /** Briefcase database instance */\n readonly db: BriefcaseDb;\n /** description of the stash */\n readonly description: string;\n /** discard all local changes and unless retainLocks flag is set, all locks will be released */\n readonly discardLocalChanges?: true;\n /** retains all locks after discarding local changes */\n readonly retainLocks?: true;\n}\n\n/**\n * Arguments for stash operations\n * @internal\n */\nexport interface StashArgs {\n readonly db: BriefcaseDb;\n readonly stash: Id64String | StashProps;\n}\n\nenum LockOrigin {\n Acquired = 0,\n NewElement = 1,\n Discovered = 2,\n};\n\n/**\n * An error originating from the StashManager API.\n * @internal\n */\nexport namespace StashError {\n export const scope = \"itwin-StashManager\";\n export type Key =\n \"readonly\" |\n \"no-file\" |\n \"no-stashes\" |\n \"invalid-stash\" |\n \"nothing-to-stash\" |\n \"unsaved-changes\" |\n \"pending-schema-changes\" |\n \"stash-not-found\";\n\n /** Instantiate and throw a StashError */\n export function throwError(key: Key, message: string): never {\n ITwinError.throwError<ITwinError>({ iTwinErrorId: { scope, key }, message });\n }\n /** Determine whether an error object is a StashError */\n export function isError(error: unknown, key?: Key): error is ITwinError {\n return ITwinError.isError<ITwinError>(error, scope, key);\n }\n}\n\n/**\n * Stash manager allow stash, drop, apply and merge stashes\n * @internal\n */\nexport class StashManager {\n\n private static readonly STASHES_ROOT_DIR_NAME: string = \".stashes\";\n /**\n * Retrieves the root folder path for stash files associated with the specified BriefcaseDb.\n *\n * @param db - The BriefcaseDb instance for which to determine the stash root folder.\n * @param ensureExists - If true, the stash root directory will be created if it does not already exist.\n * @returns The absolute path to the stash root directory.\n */\n private static getStashRootFolder(db: BriefcaseDb, ensureExists: boolean): LocalDirName {\n if (!db.isOpen || db.isReadonly)\n StashError.throwError(\"readonly\", \"Database is not open or is readonly\");\n\n if (!existsSync(db[_nativeDb].getFilePath())) {\n StashError.throwError(\"no-file\", \"Database file does not exist\");\n }\n\n const stashDir = path.join(path.dirname(db[_nativeDb].getFilePath()), this.STASHES_ROOT_DIR_NAME, `${db.briefcaseId}`);\n if (ensureExists && !existsSync(stashDir)) {\n mkdirSync(stashDir, { recursive: true });\n }\n return stashDir;\n }\n\n /**\n * Retrieves the stash ID from the provided arguments.\n *\n * If the `stash` property of `args` is a string, it returns the string in lowercase.\n * If the `stash` property is an object, it returns the `id` property of the object in lowercase.\n *\n * @param args - The arguments containing the stash information, which can be either a string or an object with an `id` property.\n * @returns The stash ID as a lowercase string.\n */\n private static getStashId(args: StashArgs) {\n return (typeof args.stash === \"string\" ? args.stash : args.stash.id).toLowerCase();\n }\n\n /**\n * Retrieves the file path to the stash file associated with the provided arguments.\n *\n * @param args - The arguments required to identify the stash, including the database reference.\n * @returns The absolute path to the stash file.\n */\n private static getStashFilePath(args: StashArgs) {\n const stashRoot = this.getStashRootFolder(args.db, false);\n if (!existsSync(stashRoot)) {\n StashError.throwError(\"no-stashes\", \"No stashes exist for this briefcase\");\n }\n\n const stashFilePath = path.join(stashRoot, `${this.getStashId(args)}.stash`);\n if (!existsSync(stashFilePath)) {\n StashError.throwError(\"invalid-stash\", \"Invalid stash\");\n }\n return stashFilePath;\n }\n\n /**\n * Queries the stash database for lock IDs matching the specified state and origin.\n *\n * @param args - The arguments required to access the stash database.\n * @param state - The lock state to filter by.\n * @param origin - The lock origin to filter by.\n * @returns An array of lock IDs (`Id64Array`) that match the given state and origin.\n */\n private static queryLocks(args: StashArgs, state: LockState, origin: LockOrigin): Id64Array {\n return this.withStash(args, (stashDb) => {\n const query = `SELECT JSON_GROUP_ARRAY(FORMAT('0x%x', Id)) FROM [locks] WHERE State = ${state} AND origin = ${origin}`;\n return stashDb.withPreparedSqliteStatement(query, (stmt) => {\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n return JSON.parse(stmt.getValueString(0)) as Id64Array;\n }\n return [];\n });\n });\n }\n\n /**\n * Acquire locks for the specified stash. If this fail then stash should not be applied.\n * @param args The stash arguments.\n */\n private static async acquireLocks(args: StashArgs) {\n const shared = this.queryLocks(args, LockState.Shared, LockOrigin.Acquired);\n await args.db.locks.acquireLocks({ shared });\n\n const exclusive = this.queryLocks(args, LockState.Exclusive, LockOrigin.Acquired);\n await args.db.locks.acquireLocks({ exclusive });\n\n const newElements = this.queryLocks(args, LockState.Shared, LockOrigin.NewElement);\n for (const id of newElements) {\n if (!args.db.locks.holdsExclusiveLock(id)) {\n args.db.locks[_elementWasCreated](id);\n }\n }\n }\n /**\n * Creates a stash of changes for the specified briefcase.\n *\n * This method generates a stash in the stash root directory for the given briefcase, using the provided description and iModelId.\n * Optionally, it can reset the briefcase by releasing all locks after stashing.\n *\n * @param args - The properties required to create a stash, including the briefcase, description, iModelId, and an optional resetBriefcase flag.\n * @returns A promise that resolves to the properties of the created stash.\n */\n public static async stash(args: CreateStashProps): Promise<StashProps> {\n if (!args.db.txns.hasPendingTxns) {\n StashError.throwError(\"nothing-to-stash\", \"Nothing to stash\");\n }\n\n if (args.db.txns.hasUnsavedChanges) {\n StashError.throwError(\"unsaved-changes\", \"Unsaved changes exist\");\n }\n\n if (args.db.txns.hasPendingSchemaChanges) {\n StashError.throwError(\"pending-schema-changes\", \"Pending schema changeset. Stashing is not currently supported for schema changes\");\n }\n\n const stashRootDir = this.getStashRootFolder(args.db, true);\n const iModelId = args.db.iModelId;\n const stash = args.db[_nativeDb].stashChanges({ stashRootDir, description: args.description, iModelId }) as StashProps;\n if (args.discardLocalChanges) {\n await args.db.discardChanges({ retainLocks: args.retainLocks });\n }\n\n Logger.logInfo(loggerCategory, `Stashed changes`, () => stash);\n return stash;\n }\n\n /**\n * Retrieves the stash properties from the database for the given arguments.\n *\n * @param args - The arguments required to locate and access the stash.\n * @returns The stash file properties if found; otherwise, `undefined`.\n */\n public static tryGetStash(args: StashArgs): StashProps | undefined {\n try {\n return this.getStash(args);\n } catch (error: any) {\n Logger.logError(loggerCategory, `Error getting stash with ${this.getStashId(args)}: ${error.message}`);\n }\n return undefined;\n }\n\n /**\n * Retrieves the stash properties from the database using the provided arguments.\n *\n * @param args - The arguments required to access the stash.\n * @returns The stash properties parsed from the database.\n */\n public static getStash(args: StashArgs): StashProps {\n return this.withStash(args, (stashDb) => {\n const stashProps = stashDb.withPreparedSqliteStatement(\"SELECT [val] FROM [be_Local] WHERE [name]='$stash_info'\", (stmt) => {\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\n StashError.throwError(\"invalid-stash\", \"Invalid stash\");\n return JSON.parse(stmt.getValueString(0)) as StashProps;\n });\n return stashProps;\n });\n }\n\n /**\n * Executes a callback function with a read-only SQLite database connection to a stash file.\n *\n * @typeParam T - The return type of the callback function.\n * @param args - Arguments required to determine the stash file path.\n * @param callback - A function that receives an open {@link SQLiteDb} instance connected to the stash file.\n * @returns The value returned by the callback function.\n */\n private static withStash<T>(args: StashArgs, callback: (stashDb: SQLiteDb) => T): T {\n const stashFile = this.getStashFilePath(args);\n if (!existsSync(stashFile)) {\n StashError.throwError(\"invalid-stash\", \"Invalid stash\");\n }\n\n const stashDb = new SQLiteDb();\n stashDb.openDb(stashFile, OpenMode.Readonly);\n try {\n return callback(stashDb);\n } finally {\n stashDb.closeDb();\n }\n }\n\n /**\n * Retrieves all stash files associated with the specified {@link BriefcaseDb}.\n * @param db - The {@link BriefcaseDb} instance for which to retrieve stash files.\n * @returns An array of `StashProps` representing the found stash files, sorted by timestamp.\n */\n public static getStashes(db: BriefcaseDb): StashProps[] {\n const stashes: StashProps[] = [];\n const stashDir = this.getStashRootFolder(db, false);\n if (!existsSync(stashDir)) {\n return stashes;\n }\n readdirSync(stashDir).filter((file) => {\n const filePath = path.join(stashDir, file);\n if (existsSync(filePath) && statSync(filePath).isFile() && file.endsWith(\".stash\")) {\n const id = file.slice(0, -path.extname(file).length)\n const stash = this.tryGetStash({ db, stash: id });\n if (stash) {\n stashes.push(stash);\n }\n }\n });\n stashes.sort((a, b) => Date.parse(b.timestamp) - Date.parse(a.timestamp));\n return stashes;\n }\n\n /**\n * Deletes the stash file associated with the specified stash ID or properties from the given {@link BriefcaseDb}.\n *\n * @param db - The {@link BriefcaseDb} instance from which the stash should be dropped.\n * @param stashId - The unique identifier (GuidString) or properties (StashProps) of the stash to be deleted.\n * @returns Returns `true` if the stash file was successfully deleted, otherwise returns `false`.\n */\n public static dropStash(args: StashArgs): boolean {\n try {\n const stashFile = this.getStashFilePath(args);\n unlinkSync(stashFile);\n return true;\n } catch (error: any) {\n Logger.logError(loggerCategory, `Error dropping stash: ${error}`);\n }\n return false;\n }\n\n /**\n * Removes all stashes associated with the specified {@link BriefcaseDb}.\n *\n * @param db - The {@link BriefcaseDb} instance from which all stashes will be removed.\n */\n public static dropAllStashes(db: BriefcaseDb): void {\n this.getStashes(db).forEach((stash) => {\n this.dropStash({ db, stash });\n });\n }\n\n /**\n * Queries the hub for the changeset information associated with the given stash.\n *\n * @param args - The arguments including the stash properties.\n * @returns A promise resolving to the changeset ID and index.\n */\n private static async queryChangeset(args: StashArgs & { stash: StashProps }): Promise<ChangesetIdWithIndex> {\n return IModelHost[_hubAccess].queryChangeset({\n iModelId: args.stash.iModelId,\n changeset: args.stash.parentChangeset,\n accessToken: await IModelHost.getAccessToken()\n });\n }\n /**\n * Restores the specified stash to the given {@link BriefcaseDb}. This operation will discard any local changes made to db and reverse the tip to the state of the stash and then apply stash. This will restore the undo stack.\n *\n * @param args - The arguments including the target database and stash properties.\n */\n public static async restore(args: StashArgs): Promise<void> {\n const { db } = args;\n Logger.logInfo(loggerCategory, `Restoring stash: ${this.getStashId(args)}`);\n\n const stash = this.tryGetStash(args);\n if (!stash) {\n StashError.throwError(\"stash-not-found\", `Stash not found ${this.getStashId(args)}`);\n }\n\n if (db.txns.hasUnsavedChanges) {\n StashError.throwError(\"unsaved-changes\", `Unsaved changes are present.`);\n }\n\n if (db.iModelId !== stash.iModelId) {\n StashError.throwError(\"invalid-stash\", `Stash does not belong to this iModel`);\n }\n\n if (db.briefcaseId !== stash.briefcaseId) {\n StashError.throwError(\"invalid-stash\", `Stash does not belong to this briefcase`);\n }\n\n const stashFile = this.getStashFilePath({ db, stash });\n // we need to retain lock that overlapped with stash locks instead of all locks\n await db.discardChanges({ retainLocks: true });\n await this.acquireLocks(args);\n if (db.changeset.id !== stash.parentChangeset.id) {\n // Changeset ID mismatch\n Logger.logWarning(loggerCategory, \"Changeset ID mismatch\");\n const stashChangeset = await this.queryChangeset({ db, stash });\n await BriefcaseManager.pullAndApplyChangesets(db, { toIndex: stashChangeset.index });\n }\n\n db[_nativeDb].stashRestore(stashFile);\n db[_resetIModelDb]();\n db[_nativeDb].saveChanges();\n Logger.logInfo(loggerCategory, `Restored stash: ${this.getStashId(args)}`);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Texture.js","sourceRoot":"","sources":["../../src/Texture.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/** @packageDocumentation\r\n * @module Elements\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Base64EncodedString, BisCodeSpec, Code, CodeScopeProps, CodeSpec, ImageSourceFormat, TextureProps,\r\n} from \"@itwin/core-common\";\r\nimport { DefinitionElement } from \"./Element\";\r\nimport { EditTxn } from \"./EditTxn\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { _implicitTxn } from \"./internal/Symbols\";\r\n\r\n/** A [TextureProps]($common) in which the image data can be specified either as a base-64-encoded string or a Uint8Array.\r\n * @see [[Texture]] constructor.\r\n * @beta\r\n */\r\nexport interface TextureCreateProps extends Omit<TextureProps, \"data\"> {\r\n data: Base64EncodedString | Uint8Array;\r\n}\r\n\r\n/** Defines a rendering texture that is associated with a Material and applied to surface geometry.\r\n * @public @preview\r\n */\r\nexport class Texture extends DefinitionElement {\r\n /** @internal */\r\n public static override get className(): string { return \"Texture\"; }\r\n public format: ImageSourceFormat;\r\n public data: Uint8Array;\r\n public description?: string;\r\n\r\n /** @beta */\r\n protected constructor(props: TextureCreateProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.format = props.format;\r\n this.data = typeof props.data === \"string\" ? Base64EncodedString.toUint8Array(props.data) : props.data;\r\n this.description = props.description;\r\n }\r\n\r\n public override toJSON(): TextureProps {\r\n const val = super.toJSON() as TextureProps;\r\n val.format = this.format;\r\n val.data = Base64EncodedString.fromUint8Array(this.data);\r\n val.description = this.description;\r\n return val;\r\n }\r\n\r\n /** Create a Code for a Texture given a name that is meant to be unique within the scope of the specified DefinitionModel.\r\n * @param iModel The IModelDb\r\n * @param scopeModelId The Id of the DefinitionModel that contains the Texture and provides the scope for its name.\r\n * @param name The Texture name\r\n */\r\n public static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, name: string): Code {\r\n const codeSpec: CodeSpec = iModel.codeSpecs.getByName(BisCodeSpec.texture);\r\n return 0 === name.length ? Code.createEmpty() : new Code({ spec: codeSpec.id, scope: scopeModelId, value: name });\r\n }\r\n\r\n /** Create a texture with the given parameters.\r\n * @param iModelDb The iModel to contain the texture.\r\n * @param definitionModelId The [[DefinitionModel]] to contain the texture.\r\n * @param name The name to serve as the texture's [Code]($common) value.\r\n * @param format The format of the image data.\r\n * @param data The image data in the format specified by `format`.\r\n * @param description An optional description of the texture\r\n * @returns The newly constructed Texture element.\r\n * @throws [[IModelError]] if unable to create the element.\r\n * @see [[insertTexture]] to insert a new texture into the iModel.\r\n */\r\n public static createTexture(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Texture {\r\n const textureProps: TextureCreateProps = {\r\n classFullName: this.classFullName,\r\n code: this.createCode(iModelDb, definitionModelId, name),\r\n format,\r\n data,\r\n description,\r\n model: definitionModelId,\r\n isPrivate: false,\r\n };\r\n\r\n return new Texture(textureProps, iModelDb);\r\n }\r\n\r\n /** Insert a new texture into a [[DefinitionModel]].\r\n * @param iModelDb The iModel to contain the texture.\r\n * @param definitionModelId The [[DefinitionModel]] to contain the texture.\r\n * @param name The name to serve as the texture's [Code]($common) value.\r\n * @param format The format of the image data.\r\n * @param data The image data in the format specified by `format`.\r\n * @param description An optional description of the texture\r\n * @returns The Id of the newly-inserted texture element.\r\n * @throws [[IModelError]] if unable to insert the element.\r\n * @see [[insertTexture]] to insert a new texture into the iModel.\r\n * @beta\r\n */\r\n public static insertTexture(txn: EditTxn, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Id64String;\r\n /** Insert a new texture into a [[DefinitionModel]].\r\n * @deprecated Use Texture.insertTexture(txn, ...) instead.\r\n */\r\n public static insertTexture(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Id64String;\r\n public static insertTexture(txnOrDb: EditTxn | IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Id64String {\r\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\r\n const texture = this.createTexture(txn.iModel, definitionModelId, name, format, data, description);\r\n return texture.insert(txn);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Texture.js","sourceRoot":"","sources":["../../src/Texture.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/** @packageDocumentation\n * @module Elements\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport {\n Base64EncodedString, BisCodeSpec, Code, CodeScopeProps, CodeSpec, ImageSourceFormat, TextureProps,\n} from \"@itwin/core-common\";\nimport { DefinitionElement } from \"./Element\";\nimport { EditTxn } from \"./EditTxn\";\nimport { IModelDb } from \"./IModelDb\";\nimport { _implicitTxn } from \"./internal/Symbols\";\n\n/** A [TextureProps]($common) in which the image data can be specified either as a base-64-encoded string or a Uint8Array.\n * @see [[Texture]] constructor.\n * @beta\n */\nexport interface TextureCreateProps extends Omit<TextureProps, \"data\"> {\n data: Base64EncodedString | Uint8Array;\n}\n\n/** Defines a rendering texture that is associated with a Material and applied to surface geometry.\n * @public @preview\n */\nexport class Texture extends DefinitionElement {\n /** @internal */\n public static override get className(): string { return \"Texture\"; }\n public format: ImageSourceFormat;\n public data: Uint8Array;\n public description?: string;\n\n /** @beta */\n protected constructor(props: TextureCreateProps, iModel: IModelDb) {\n super(props, iModel);\n this.format = props.format;\n this.data = typeof props.data === \"string\" ? Base64EncodedString.toUint8Array(props.data) : props.data;\n this.description = props.description;\n }\n\n public override toJSON(): TextureProps {\n const val = super.toJSON() as TextureProps;\n val.format = this.format;\n val.data = Base64EncodedString.fromUint8Array(this.data);\n val.description = this.description;\n return val;\n }\n\n /** Create a Code for a Texture given a name that is meant to be unique within the scope of the specified DefinitionModel.\n * @param iModel The IModelDb\n * @param scopeModelId The Id of the DefinitionModel that contains the Texture and provides the scope for its name.\n * @param name The Texture name\n */\n public static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, name: string): Code {\n const codeSpec: CodeSpec = iModel.codeSpecs.getByName(BisCodeSpec.texture);\n return 0 === name.length ? Code.createEmpty() : new Code({ spec: codeSpec.id, scope: scopeModelId, value: name });\n }\n\n /** Create a texture with the given parameters.\n * @param iModelDb The iModel to contain the texture.\n * @param definitionModelId The [[DefinitionModel]] to contain the texture.\n * @param name The name to serve as the texture's [Code]($common) value.\n * @param format The format of the image data.\n * @param data The image data in the format specified by `format`.\n * @param description An optional description of the texture\n * @returns The newly constructed Texture element.\n * @throws [[IModelError]] if unable to create the element.\n * @see [[insertTexture]] to insert a new texture into the iModel.\n */\n public static createTexture(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Texture {\n const textureProps: TextureCreateProps = {\n classFullName: this.classFullName,\n code: this.createCode(iModelDb, definitionModelId, name),\n format,\n data,\n description,\n model: definitionModelId,\n isPrivate: false,\n };\n\n return new Texture(textureProps, iModelDb);\n }\n\n /** Insert a new texture into a [[DefinitionModel]].\n * @param iModelDb The iModel to contain the texture.\n * @param definitionModelId The [[DefinitionModel]] to contain the texture.\n * @param name The name to serve as the texture's [Code]($common) value.\n * @param format The format of the image data.\n * @param data The image data in the format specified by `format`.\n * @param description An optional description of the texture\n * @returns The Id of the newly-inserted texture element.\n * @throws [[IModelError]] if unable to insert the element.\n * @see [[insertTexture]] to insert a new texture into the iModel.\n * @beta\n */\n public static insertTexture(txn: EditTxn, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Id64String;\n /** Insert a new texture into a [[DefinitionModel]].\n * @deprecated Use Texture.insertTexture(txn, ...) instead.\n */\n public static insertTexture(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Id64String;\n public static insertTexture(txnOrDb: EditTxn | IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Id64String {\n const txn = txnOrDb instanceof EditTxn ? txnOrDb : txnOrDb[_implicitTxn];\n const texture = this.createTexture(txn.iModel, definitionModelId, name, format, data, description);\n return texture.insert(txn);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TileStorage.js","sourceRoot":"","sources":["../../src/TileStorage.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 { gunzip, gzip } from \"zlib\";\r\nimport { promisify } from \"util\";\r\nimport type { Metadata, ObjectReference, ServerStorage, TransferConfig } from \"@itwin/object-storage-core\";\r\nimport { getTileObjectReference } from \"@itwin/core-common\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { IModelHost } from \"./IModelHost\";\r\n\r\n/**\r\n * Identifies a tile in cloud tile cache.\r\n * @beta\r\n */\r\nexport interface TileId {\r\n treeId: string;\r\n contentId: string;\r\n guid: string;\r\n}\r\n\r\n/**\r\n * Facilitates interaction with cloud tile cache.\r\n * @beta\r\n */\r\nexport class TileStorage {\r\n /**\r\n * Allows using the underlying `ServerStorage` API directly.\r\n * @see https://github.com/iTwin/object-storage/\r\n */\r\n public readonly storage: ServerStorage;\r\n\r\n public constructor(storage: ServerStorage) {\r\n this.storage = storage;\r\n }\r\n\r\n private _initializedIModels: Set<string> = new Set();\r\n\r\n /**\r\n * Ensures any required cloud storage resources for a specific iModel are ready to use.\r\n */\r\n public async initialize(iModelId: string): Promise<void> {\r\n if (this._initializedIModels.has(iModelId))\r\n return;\r\n if (!(await this.storage.baseDirectoryExists({ baseDirectory: iModelId }))) {\r\n try {\r\n await this.storage.createBaseDirectory({ baseDirectory: iModelId });\r\n } catch (e: any) {\r\n // Ignore 409 errors. This is what Azure blob storage returns when the container already exists.\r\n // Usually this means multiple backends tried to initialize tile storage at the same time.\r\n if(e.statusCode !== 409)\r\n throw e;\r\n }\r\n }\r\n this._initializedIModels.add(iModelId);\r\n }\r\n\r\n /**\r\n * Returns config that can be used by frontends to download tiles\r\n * @param iModelId Id of the iModel\r\n * @param expiresInSeconds Optional number of seconds until the download URL expires. Defaults to expiring exactly at midnight of next Sunday to enable persistent client-side caching.\r\n * It is recommended to set this to a shorter period when using S3-compatible storage - an exact expiry date cannot be ensured due to limitations in their API.\r\n * @see [TileStorage]($frontend)\r\n */\r\n public async getDownloadConfig(iModelId: string, expiresInSeconds?: number): Promise<TransferConfig> {\r\n try {\r\n if (expiresInSeconds !== undefined)\r\n return await this.storage.getDownloadConfig({ baseDirectory: iModelId }, { expiresInSeconds });\r\n const expiresOn = new Date();\r\n expiresOn.setDate(expiresOn.getDate() + (7 - expiresOn.getDay())); // next Sunday\r\n expiresOn.setHours(0, 0, 0, 0); // exactly at midnight\r\n return await this.storage.getDownloadConfig({ baseDirectory: iModelId }, { expiresOn });\r\n } catch (err) {\r\n this.logException(\"Failed to get download config\", err);\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Uploads a tile to the cloud cache.\r\n */\r\n public async uploadTile(iModelId: string, changesetId: string, treeId: string, contentId: string, content: Uint8Array, guid?: string, metadata?: Metadata): Promise<void> {\r\n try {\r\n await this.storage.upload(\r\n getTileObjectReference(iModelId, changesetId, treeId, contentId, guid),\r\n Buffer.from(IModelHost.compressCachedTiles ? await promisify(gzip)(content.buffer) : content.buffer),\r\n metadata,\r\n IModelHost.compressCachedTiles ? { contentEncoding: \"gzip\" } : undefined,\r\n );\r\n } catch (err) {\r\n this.logException(\"Failed to upload tile\", err);\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Downloads a tile from the cloud cache.\r\n */\r\n public async downloadTile(iModelId: string, changesetId: string, treeId: string, contentId: string, guid?: string): Promise<Uint8Array> {\r\n try {\r\n const buffer = await this.storage.download(\r\n getTileObjectReference(iModelId, changesetId, treeId, contentId, guid),\r\n \"buffer\",\r\n );\r\n return IModelHost.compressCachedTiles ? await promisify(gunzip)(buffer) : buffer;\r\n } catch (err) {\r\n this.logException(\"Failed to download tile\", err);\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Returns an async iterator of all tiles that are found in the cloud cache.\r\n */\r\n public async *getCachedTilesGenerator(iModelId: string): AsyncGenerator<TileId> {\r\n const iterator = this.getCachedTilePages(iModelId);\r\n for await (const page of iterator) {\r\n for (const tile of page) {\r\n yield tile;\r\n }\r\n }\r\n }\r\n\r\n private async *getCachedTilePages(iModelId: string): AsyncGenerator<TileId[]> {\r\n const iterator = this.storage.getListObjectsPagedIterator({ baseDirectory: iModelId }, 500);\r\n let prevPage: IteratorResult<ObjectReference[], any> | undefined;\r\n do {\r\n // initiate loading the next page\r\n const page = iterator.next();\r\n // process results from the previous page\r\n if (prevPage)\r\n yield this.convertPage(prevPage.value);\r\n // finish loading the next page\r\n prevPage = await page;\r\n } while (!prevPage.done);\r\n }\r\n\r\n private convertPage(page: ObjectReference[]): TileId[] {\r\n return page\r\n .map((objectReference) => ({\r\n parts: objectReference.relativeDirectory?.split(\"/\") ?? [\"\"],\r\n objectName: objectReference.objectName,\r\n }))\r\n .filter(({ parts, objectName }) => {\r\n if (parts[0] !== \"tiles\")\r\n return false;\r\n if (parts.length !== 3) {\r\n Logger.logWarning(BackendLoggerCategory.IModelTileStorage, \"Malformed tile id found in tile cache: {tileId}\", { tileId: [...parts, objectName].join(\"/\") });\r\n return false;\r\n }\r\n return true;\r\n }).map(({ parts, objectName }) => {\r\n // relativeDirectory = tiles/<treeId>/<guid>\r\n // objectName = <contentId>\r\n return {\r\n treeId: parts[1],\r\n contentId: objectName,\r\n guid: parts[2],\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Returns a list of all tiles that are found in the cloud cache.\r\n */\r\n public async getCachedTiles(iModelId: string): Promise<TileId[]> {\r\n const results: TileId[] = [];\r\n for await (const page of this.getCachedTilePages(iModelId)) {\r\n results.push(...page);\r\n }\r\n return results;\r\n }\r\n\r\n /**\r\n * Returns a boolean indicating whether a tile exists in the cloud cache\r\n */\r\n public async isTileCached(iModelId: string, changesetId: string, treeId: string, contentId: string, guid?: string): Promise<boolean> {\r\n return this.storage.objectExists(getTileObjectReference(iModelId, changesetId, treeId, contentId, guid));\r\n }\r\n\r\n private logException(message: string, err: unknown): void {\r\n Logger.logError(\r\n BackendLoggerCategory.IModelTileStorage,\r\n err,\r\n { errorMessage: message },\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TileStorage.js","sourceRoot":"","sources":["../../src/TileStorage.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 { gunzip, gzip } from \"zlib\";\nimport { promisify } from \"util\";\nimport type { Metadata, ObjectReference, ServerStorage, TransferConfig } from \"@itwin/object-storage-core\";\nimport { getTileObjectReference } from \"@itwin/core-common\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { IModelHost } from \"./IModelHost\";\n\n/**\n * Identifies a tile in cloud tile cache.\n * @beta\n */\nexport interface TileId {\n treeId: string;\n contentId: string;\n guid: string;\n}\n\n/**\n * Facilitates interaction with cloud tile cache.\n * @beta\n */\nexport class TileStorage {\n /**\n * Allows using the underlying `ServerStorage` API directly.\n * @see https://github.com/iTwin/object-storage/\n */\n public readonly storage: ServerStorage;\n\n public constructor(storage: ServerStorage) {\n this.storage = storage;\n }\n\n private _initializedIModels: Set<string> = new Set();\n\n /**\n * Ensures any required cloud storage resources for a specific iModel are ready to use.\n */\n public async initialize(iModelId: string): Promise<void> {\n if (this._initializedIModels.has(iModelId))\n return;\n if (!(await this.storage.baseDirectoryExists({ baseDirectory: iModelId }))) {\n try {\n await this.storage.createBaseDirectory({ baseDirectory: iModelId });\n } catch (e: any) {\n // Ignore 409 errors. This is what Azure blob storage returns when the container already exists.\n // Usually this means multiple backends tried to initialize tile storage at the same time.\n if(e.statusCode !== 409)\n throw e;\n }\n }\n this._initializedIModels.add(iModelId);\n }\n\n /**\n * Returns config that can be used by frontends to download tiles\n * @param iModelId Id of the iModel\n * @param expiresInSeconds Optional number of seconds until the download URL expires. Defaults to expiring exactly at midnight of next Sunday to enable persistent client-side caching.\n * It is recommended to set this to a shorter period when using S3-compatible storage - an exact expiry date cannot be ensured due to limitations in their API.\n * @see [TileStorage]($frontend)\n */\n public async getDownloadConfig(iModelId: string, expiresInSeconds?: number): Promise<TransferConfig> {\n try {\n if (expiresInSeconds !== undefined)\n return await this.storage.getDownloadConfig({ baseDirectory: iModelId }, { expiresInSeconds });\n const expiresOn = new Date();\n expiresOn.setDate(expiresOn.getDate() + (7 - expiresOn.getDay())); // next Sunday\n expiresOn.setHours(0, 0, 0, 0); // exactly at midnight\n return await this.storage.getDownloadConfig({ baseDirectory: iModelId }, { expiresOn });\n } catch (err) {\n this.logException(\"Failed to get download config\", err);\n throw err;\n }\n }\n\n /**\n * Uploads a tile to the cloud cache.\n */\n public async uploadTile(iModelId: string, changesetId: string, treeId: string, contentId: string, content: Uint8Array, guid?: string, metadata?: Metadata): Promise<void> {\n try {\n await this.storage.upload(\n getTileObjectReference(iModelId, changesetId, treeId, contentId, guid),\n Buffer.from(IModelHost.compressCachedTiles ? await promisify(gzip)(content.buffer) : content.buffer),\n metadata,\n IModelHost.compressCachedTiles ? { contentEncoding: \"gzip\" } : undefined,\n );\n } catch (err) {\n this.logException(\"Failed to upload tile\", err);\n throw err;\n }\n }\n\n /**\n * Downloads a tile from the cloud cache.\n */\n public async downloadTile(iModelId: string, changesetId: string, treeId: string, contentId: string, guid?: string): Promise<Uint8Array> {\n try {\n const buffer = await this.storage.download(\n getTileObjectReference(iModelId, changesetId, treeId, contentId, guid),\n \"buffer\",\n );\n return IModelHost.compressCachedTiles ? await promisify(gunzip)(buffer) : buffer;\n } catch (err) {\n this.logException(\"Failed to download tile\", err);\n throw err;\n }\n }\n\n /**\n * Returns an async iterator of all tiles that are found in the cloud cache.\n */\n public async *getCachedTilesGenerator(iModelId: string): AsyncGenerator<TileId> {\n const iterator = this.getCachedTilePages(iModelId);\n for await (const page of iterator) {\n for (const tile of page) {\n yield tile;\n }\n }\n }\n\n private async *getCachedTilePages(iModelId: string): AsyncGenerator<TileId[]> {\n const iterator = this.storage.getListObjectsPagedIterator({ baseDirectory: iModelId }, 500);\n let prevPage: IteratorResult<ObjectReference[], any> | undefined;\n do {\n // initiate loading the next page\n const page = iterator.next();\n // process results from the previous page\n if (prevPage)\n yield this.convertPage(prevPage.value);\n // finish loading the next page\n prevPage = await page;\n } while (!prevPage.done);\n }\n\n private convertPage(page: ObjectReference[]): TileId[] {\n return page\n .map((objectReference) => ({\n parts: objectReference.relativeDirectory?.split(\"/\") ?? [\"\"],\n objectName: objectReference.objectName,\n }))\n .filter(({ parts, objectName }) => {\n if (parts[0] !== \"tiles\")\n return false;\n if (parts.length !== 3) {\n Logger.logWarning(BackendLoggerCategory.IModelTileStorage, \"Malformed tile id found in tile cache: {tileId}\", { tileId: [...parts, objectName].join(\"/\") });\n return false;\n }\n return true;\n }).map(({ parts, objectName }) => {\n // relativeDirectory = tiles/<treeId>/<guid>\n // objectName = <contentId>\n return {\n treeId: parts[1],\n contentId: objectName,\n guid: parts[2],\n };\n });\n }\n\n /**\n * Returns a list of all tiles that are found in the cloud cache.\n */\n public async getCachedTiles(iModelId: string): Promise<TileId[]> {\n const results: TileId[] = [];\n for await (const page of this.getCachedTilePages(iModelId)) {\n results.push(...page);\n }\n return results;\n }\n\n /**\n * Returns a boolean indicating whether a tile exists in the cloud cache\n */\n public async isTileCached(iModelId: string, changesetId: string, treeId: string, contentId: string, guid?: string): Promise<boolean> {\n return this.storage.objectExists(getTileObjectReference(iModelId, changesetId, treeId, contentId, guid));\n }\n\n private logException(message: string, err: unknown): void {\n Logger.logError(\n BackendLoggerCategory.IModelTileStorage,\n err,\n { errorMessage: message },\n );\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * @module iModels
3
3
  */
4
4
  import { BeEvent, DbConflictResolution, DbResult, Id64String, IModelStatus } from "@itwin/core-bentley";
5
- import { ChangesetIdWithIndex, ChangesetIndexAndId, ChangesetProps, EntityIdAndClassIdIterable, ModelGeometryChangesProps, ModelIdAndGeometryGuid, TxnProps } from "@itwin/core-common";
5
+ import { ChangesetIdWithIndex, ChangesetIndexAndId, ChangesetProps, EntityIdAndClassIdIterable, ModelGeometryChangesProps, ModelIdAndGeometryGuid, ReinstateTxnArgs, ReverseTxnArgs, TxnProps } from "@itwin/core-common";
6
6
  import { BriefcaseDb } from "./IModelDb";
7
7
  import { RelationshipProps } from "./Relationship";
8
8
  import { DbRebaseChangesetConflictArgs, RebaseChangesetConflictArgs } from "./internal/ChangesetConflictArgs";
@@ -482,6 +482,7 @@ export declare class TxnManager {
482
482
  /** Return the depth of the multi-Txn stack. Generally for diagnostic use only. */
483
483
  getMultiTxnOperationDepth(): number;
484
484
  /** Reverse (undo) the most recent operation(s) to this IModelDb.
485
+ * @note Consider using [[reverseTxnsAsync]] instead.
485
486
  * @param numOperations the number of operations to reverse. If this is greater than 1, the entire set of operations will
486
487
  * be reinstated together when/if ReinstateTxn is called.
487
488
  * @note If there are any outstanding uncommitted changes, they are reversed.
@@ -490,27 +491,122 @@ export declare class TxnManager {
490
491
  * @note If numOperations is too large only the operations are reversible are reversed.
491
492
  */
492
493
  reverseTxns(numOperations: number): IModelStatus;
493
- /** Reverse the most recent operation. */
494
+ /** Reverse the most recent operation.
495
+ * @note Consider using [[reverseSingleTxnAsync]] instead.
496
+ */
494
497
  reverseSingleTxn(): IModelStatus;
495
- /** Reverse all changes back to the beginning of the session. */
498
+ /** Reverse all changes back to the beginning of the session.
499
+ * @note Consider using [[reverseAllTxnsAsync]] instead.
500
+ */
496
501
  reverseAll(): IModelStatus;
497
502
  /** Reverse all changes back to a previously saved TxnId.
503
+ * @note Consider using [[reverseToTxnAsync]] instead.
498
504
  * @param txnId a TxnId obtained from a previous call to GetCurrentTxnId.
499
505
  * @returns Success if the transactions were reversed, error status otherwise.
500
506
  * @see [[getCurrentTxnId]] [[cancelTo]]
501
507
  */
502
508
  reverseTo(txnId: TxnIdString): IModelStatus;
503
509
  /** Reverse and then cancel (make non-reinstatable) all changes back to a previous TxnId.
510
+ * @note Consider using [[cancelToTxnAsync]] instead.
504
511
  * @param txnId a TxnId obtained from a previous call to [[getCurrentTxnId]]
505
512
  * @returns Success if the transactions were reversed and cleared, error status otherwise.
506
513
  */
507
514
  cancelTo(txnId: TxnIdString): IModelStatus;
515
+ /** Reverse (undo) the most recent operation(s) to this IModelDb. By default, this method also
516
+ * abandons the locks that were acquired for those operations.
517
+ * @beta
518
+ * @note This method will also abandon locks associated with any later, reversed Txns, if they have not
519
+ * already been abandoned. For example, if a call to [[reverseTxns]] reverses Txn 2 without abandoning
520
+ * its locks, and then this method is called to reverse Txn 1, it will abandon the locks associated
521
+ * with _both_ Txn 1 and Txn 2.
522
+ * @note If you do not want to abandon any locks, set [ReverseTxnArgs.retainLocks]($common) to true.
523
+ * @note If there are any outstanding uncommitted changes, they are reversed.
524
+ * @note The term "operation" is used rather than Txn, since multiple Txns can be grouped together via [[beginMultiTxnOperation]]. So,
525
+ * even if numOperations is 1, multiple Txns may be reversed if they were grouped together when they were made.
526
+ * @note If numOperations is too large only the operations are reversible are reversed.
527
+ * @param numOperations the number of operations to reverse. If this is greater than 1, the entire set of operations will
528
+ * be reinstated together when/if ReinstateTxn is called.
529
+ * @param args Optional arguments to control the behavior of the reverse operation, such as whether to retain locks.
530
+ * @returns A Promise that resolves to success if the transactions were reversed, or rejects with an IModelError otherwise.
531
+ */
532
+ reverseTxnsAsync(numOperations: number, args?: ReverseTxnArgs): Promise<void>;
533
+ /** Reverse (undo) the most recent operation to this IModelDb. By default, this method also
534
+ * abandons the locks that were acquired for that operation.
535
+ * @beta
536
+ * @note This method will also abandon locks associated with any later, reversed Txns, if they have not
537
+ * already been abandoned. For example, if a call to [[reverseTxns]] reverses Txn 2 without abandoning
538
+ * its locks, and then this method is called to reverse Txn 1, it will abandon the locks associated
539
+ * with _both_ Txn 1 and Txn 2.
540
+ * @note If there are any outstanding uncommitted changes, they are reversed.
541
+ * @note The term "operation" is used rather than Txn, since multiple Txns can be grouped together via [[beginMultiTxnOperation]]. So,
542
+ * even though this method reverses only one operation, multiple Txns may be reversed if they were grouped together when they were made.
543
+ * @note If there are no reversible operations, this method does nothing and returns Success.
544
+ * @param args Optional arguments to control the behavior of the reverse operation, such as whether to retain locks.
545
+ * @returns A Promise that resolves to success if the transactions were reversed, or rejects with an IModelError otherwise.
546
+ */
547
+ reverseSingleTxnAsync(args?: ReverseTxnArgs): Promise<void>;
548
+ /** Reverse (undo) all operations back to the beginning of the session. By default, this method also
549
+ * abandons the locks that were acquired for those operations.
550
+ * @beta
551
+ * @note This method will also abandon locks associated with any later, reversed Txns, if they have not
552
+ * already been abandoned. For example, if a call to [[reverseTxns]] reverses Txn 2 without abandoning
553
+ * its locks, and then this method is called to reverse Txn 1, it will abandon the locks associated
554
+ * with _both_ Txn 1 and Txn 2.
555
+ * @note If there are any outstanding uncommitted changes, they are reversed.
556
+ * @note If there are no reversible operations, this method does nothing and returns Success.
557
+ * @param args Optional arguments to control the behavior of the reverse operation, such as whether to retain locks.
558
+ * @returns A Promise that resolves to success if the transactions were reversed, or rejects with an IModelError otherwise.
559
+ */
560
+ reverseAllTxnsAsync(args?: ReverseTxnArgs): Promise<void>;
561
+ /** Reverse (undo) all operations back to a previously saved TxnId. By default, this method also
562
+ * abandons the locks that were acquired for those operations.
563
+ * @beta
564
+ * @note This method will also abandon locks associated with any later, reversed Txns, if they have not
565
+ * already been abandoned. For example, if a call to [[reverseTxns]] reverses Txn 2 without abandoning
566
+ * its locks, and then this method is called to reverse Txn 1, it will abandon the locks associated
567
+ * with _both_ Txn 1 and Txn 2.
568
+ * @note If there are any outstanding uncommitted changes, they are reversed.
569
+ * @param txnId a TxnId obtained from a previous call to GetCurrentTxnId.
570
+ * @param args Optional arguments to control the behavior of the reverse operation, such as whether to abandon locks.
571
+ * @returns A Promise that resolves to success if the transactions were reversed, or rejects with an IModelError otherwise.
572
+ * @see [[getCurrentTxnId]] [[cancelTo]]
573
+ */
574
+ reverseToTxnAsync(txnId: TxnIdString, args?: ReverseTxnArgs): Promise<void>;
575
+ /** Reverse and then cancel (make non-reinstatable) all operations back to a previous TxnId. By default, this
576
+ * method also abandons the locks that were acquired for those operations.
577
+ * @beta
578
+ * @note This method will also abandon locks associated with any later, reversed Txns, if they have not
579
+ * already been abandoned. For example, if a call to [[reverseTxns]] reverses Txn 2 without abandoning
580
+ * its locks, and then this method is called to reverse Txn 1, it will abandon the locks associated
581
+ * with _both_ Txn 1 and Txn 2.
582
+ * @note If there are any outstanding uncommitted changes, they are reversed.
583
+ * @param txnId a TxnId obtained from a previous call to [[getCurrentTxnId]]
584
+ * @param args Optional arguments to control the behavior of the reverse operation, such as whether to abandon locks.
585
+ * @returns A promise that resolves to success if the transactions were reversed and cleared, or rejects with an IModelError otherwise.
586
+ */
587
+ cancelToTxnAsync(txnId: TxnIdString, args?: ReverseTxnArgs): Promise<void>;
588
+ private withLockAbandonment;
508
589
  /** Reinstate the most recently reversed transaction. Since at any time multiple transactions can be reversed, it
509
590
  * may take multiple calls to this method to reinstate all reversed operations.
510
591
  * @returns Success if a reversed transaction was reinstated, error status otherwise.
511
592
  * @note If there are any outstanding uncommitted changes, they are canceled before the Txn is reinstated.
593
+ * @note This method will return [[IModelStatus.LockNotHeld]] and will not reinstate the Txn if the locks
594
+ * originally acquired by the Txn have been abandoned. Use [[reinstateTxnAsync]] to re-acquire the locks
595
+ * and reinstate the Txn in a single operation.
512
596
  */
513
597
  reinstateTxn(): IModelStatus;
598
+ /** Reinstate the most recently reversed transaction. This method will first attempt
599
+ * to re-acquire the required locks, if they were abandoned after the operation was reversed.
600
+ * Since at any time multiple transactions can be reversed, it may take multiple calls to this
601
+ * method to reinstate all reversed operations.
602
+ * @beta
603
+ * @note If there are any outstanding unsaved changes, they are canceled before the Txn is reinstated. Unless
604
+ * [ReinstateTxnArgs.retainLocks]($common) is true, the locks associated with the unsaved changes are also abandoned.
605
+ * @param args Optional arguments to control the behavior of the reinstate operation, such as whether to retain
606
+ * locks when abandoning unsaved changes.
607
+ * @returns A Promise that resolves to success if a reversed transaction was reinstated, or rejects with an IModelError otherwise.
608
+ */
609
+ reinstateTxnAsync(args?: ReinstateTxnArgs): Promise<void>;
514
610
  /** Get the Id of the first transaction, if any.
515
611
  */
516
612
  queryFirstTxnId(): TxnIdString;
@@ -551,7 +647,7 @@ export declare class TxnManager {
551
647
  get hasLocalChanges(): boolean;
552
648
  /** Destroy the record of all local changes that have yet to be saved and/or pushed.
553
649
  * This permanently eradicates your changes - use with caution!
554
- * Typically, callers will want to subsequently use [[LockControl.releaseAllLocks]].
650
+ * Typically, callers will want to subsequently use [[LockControl.abandonAllLocks]].
555
651
  * After calling this function, [[hasLocalChanges]], [[hasPendingTxns]], and [[hasUnsavedChanges]] will all be `false`.
556
652
  */
557
653
  deleteAllTxns(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"TxnManager.d.ts","sourceRoot":"","sources":["../../src/TxnManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TxnManager.d.ts","sourceRoot":"","sources":["../../src/TxnManager.ts"],"names":[],"mappings":"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"}