@itwin/core-backend 5.2.0-dev.7 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +2 -0
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BackendLoggerCategory.d.ts +6 -0
  6. package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
  7. package/lib/cjs/BackendLoggerCategory.js +6 -0
  8. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  9. package/lib/cjs/BisCoreSchema.js.map +1 -1
  10. package/lib/cjs/BlobContainerService.js.map +1 -1
  11. package/lib/cjs/BriefcaseManager.d.ts +57 -3
  12. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  13. package/lib/cjs/BriefcaseManager.js +151 -42
  14. package/lib/cjs/BriefcaseManager.js.map +1 -1
  15. package/lib/cjs/CatalogDb.js.map +1 -1
  16. package/lib/cjs/Category.js.map +1 -1
  17. package/lib/cjs/ChangeSummaryManager.js +2 -2
  18. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  19. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  20. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  21. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  22. package/lib/cjs/ChannelControl.js.map +1 -1
  23. package/lib/cjs/CheckpointManager.js.map +1 -1
  24. package/lib/cjs/ClassRegistry.js +5 -5
  25. package/lib/cjs/ClassRegistry.js.map +1 -1
  26. package/lib/cjs/CloudSqlite.d.ts +4 -0
  27. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  28. package/lib/cjs/CloudSqlite.js.map +1 -1
  29. package/lib/cjs/CodeService.js.map +1 -1
  30. package/lib/cjs/CodeSpecs.js.map +1 -1
  31. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  32. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  33. package/lib/cjs/DevTools.js.map +1 -1
  34. package/lib/cjs/DisplayStyle.js.map +1 -1
  35. package/lib/cjs/ECDb.d.ts +8 -0
  36. package/lib/cjs/ECDb.d.ts.map +1 -1
  37. package/lib/cjs/ECDb.js +22 -0
  38. package/lib/cjs/ECDb.js.map +1 -1
  39. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  40. package/lib/cjs/ECSqlStatement.js.map +1 -1
  41. package/lib/cjs/Element.js.map +1 -1
  42. package/lib/cjs/ElementAspect.js.map +1 -1
  43. package/lib/cjs/ElementGraphics.js.map +1 -1
  44. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  45. package/lib/cjs/Entity.js.map +1 -1
  46. package/lib/cjs/EntityReferences.js.map +1 -1
  47. package/lib/cjs/ExportGraphics.js.map +1 -1
  48. package/lib/cjs/ExternalSource.js.map +1 -1
  49. package/lib/cjs/FontFile.js.map +1 -1
  50. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  51. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  52. package/lib/cjs/GeometrySummary.js +47 -47
  53. package/lib/cjs/GeometrySummary.js.map +1 -1
  54. package/lib/cjs/IModelDb.d.ts +54 -3
  55. package/lib/cjs/IModelDb.d.ts.map +1 -1
  56. package/lib/cjs/IModelDb.js +96 -18
  57. package/lib/cjs/IModelDb.js.map +1 -1
  58. package/lib/cjs/IModelDbFonts.js.map +1 -1
  59. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  60. package/lib/cjs/IModelHost.d.ts +11 -1
  61. package/lib/cjs/IModelHost.d.ts.map +1 -1
  62. package/lib/cjs/IModelHost.js +5 -0
  63. package/lib/cjs/IModelHost.js.map +1 -1
  64. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +1 -5
  65. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -1
  66. package/lib/cjs/IModelIncrementalSchemaLocater.js +0 -6
  67. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  68. package/lib/cjs/IModelJsFs.js.map +1 -1
  69. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  70. package/lib/cjs/IpcHost.js.map +1 -1
  71. package/lib/cjs/LineStyle.js.map +1 -1
  72. package/lib/cjs/LocalHub.js +1 -1
  73. package/lib/cjs/LocalHub.js.map +1 -1
  74. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  75. package/lib/cjs/LockControl.js.map +1 -1
  76. package/lib/cjs/Material.js.map +1 -1
  77. package/lib/cjs/Model.js.map +1 -1
  78. package/lib/cjs/NativeAppStorage.js.map +1 -1
  79. package/lib/cjs/NativeHost.js.map +1 -1
  80. package/lib/cjs/NavigationRelationship.js.map +1 -1
  81. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  82. package/lib/cjs/PropertyStore.js.map +1 -1
  83. package/lib/cjs/Relationship.js.map +1 -1
  84. package/lib/cjs/RpcBackend.js.map +1 -1
  85. package/lib/cjs/SQLiteDb.js.map +1 -1
  86. package/lib/cjs/Schema.js.map +1 -1
  87. package/lib/cjs/SchemaSync.js.map +1 -1
  88. package/lib/cjs/SchemaUtils.js.map +1 -1
  89. package/lib/cjs/SheetIndex.js.map +1 -1
  90. package/lib/cjs/SqliteChangesetReader.d.ts +8 -0
  91. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  92. package/lib/cjs/SqliteChangesetReader.js +11 -0
  93. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  94. package/lib/cjs/SqliteStatement.js.map +1 -1
  95. package/lib/cjs/StashManager.d.ts +175 -0
  96. package/lib/cjs/StashManager.d.ts.map +1 -0
  97. package/lib/cjs/StashManager.js +306 -0
  98. package/lib/cjs/StashManager.js.map +1 -0
  99. package/lib/cjs/Texture.js.map +1 -1
  100. package/lib/cjs/TileStorage.js.map +1 -1
  101. package/lib/cjs/TxnManager.d.ts +226 -15
  102. package/lib/cjs/TxnManager.d.ts.map +1 -1
  103. package/lib/cjs/TxnManager.js +249 -23
  104. package/lib/cjs/TxnManager.js.map +1 -1
  105. package/lib/cjs/ViewDefinition.js.map +1 -1
  106. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  107. package/lib/cjs/ViewStore.js.map +1 -1
  108. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +10 -1
  109. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  110. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +15 -6
  111. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  112. package/lib/cjs/annotations/FrameGeometry.js +6 -6
  113. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  114. package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -2
  115. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  116. package/lib/cjs/annotations/LeaderGeometry.js +8 -7
  117. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  118. package/lib/cjs/annotations/TextAnnotationElement.d.ts +145 -36
  119. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  120. package/lib/cjs/annotations/TextAnnotationElement.js +234 -106
  121. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  122. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +2 -0
  123. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  124. package/lib/cjs/annotations/TextAnnotationGeometry.js +26 -19
  125. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  126. package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -1
  127. package/lib/cjs/annotations/TextBlockGeometry.js +11 -3
  128. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  129. package/lib/cjs/annotations/TextBlockLayout.d.ts +51 -38
  130. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
  131. package/lib/cjs/annotations/TextBlockLayout.js +252 -156
  132. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  133. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  134. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  135. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  136. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  137. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  138. package/lib/cjs/core-backend.js.map +1 -1
  139. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  140. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  141. package/lib/cjs/domains/GenericElements.js.map +1 -1
  142. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  143. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  144. package/lib/cjs/internal/ChannelAdmin.js +1 -1
  145. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  146. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  147. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  148. package/lib/cjs/internal/HubMock.js.map +1 -1
  149. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  150. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  151. package/lib/cjs/internal/NoLocks.js.map +1 -1
  152. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  153. package/lib/cjs/internal/Symbols.d.ts +1 -0
  154. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  155. package/lib/cjs/internal/Symbols.js +2 -1
  156. package/lib/cjs/internal/Symbols.js.map +1 -1
  157. package/lib/cjs/internal/annotations/fields.d.ts +2 -12
  158. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  159. package/lib/cjs/internal/annotations/fields.js +49 -45
  160. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  161. package/lib/cjs/internal/cross-package.js.map +1 -1
  162. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  163. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  164. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  165. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  166. package/lib/cjs/rpc/multipart.js.map +1 -1
  167. package/lib/cjs/rpc/tracing.js.map +1 -1
  168. package/lib/cjs/rpc/web/logging.js.map +1 -1
  169. package/lib/cjs/rpc/web/request.js.map +1 -1
  170. package/lib/cjs/rpc/web/response.js.map +1 -1
  171. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  172. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  173. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  174. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  175. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  176. package/lib/cjs/workspace/Settings.js.map +1 -1
  177. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  178. package/lib/cjs/workspace/Workspace.d.ts +1 -1
  179. package/lib/cjs/workspace/Workspace.js.map +1 -1
  180. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  181. package/lib/esm/BackendHubAccess.d.ts +2 -0
  182. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  183. package/lib/esm/BackendHubAccess.js.map +1 -1
  184. package/lib/esm/BackendLoggerCategory.d.ts +6 -0
  185. package/lib/esm/BackendLoggerCategory.d.ts.map +1 -1
  186. package/lib/esm/BackendLoggerCategory.js +6 -0
  187. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  188. package/lib/esm/BisCoreSchema.js.map +1 -1
  189. package/lib/esm/BlobContainerService.js.map +1 -1
  190. package/lib/esm/BriefcaseManager.d.ts +57 -3
  191. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  192. package/lib/esm/BriefcaseManager.js +152 -43
  193. package/lib/esm/BriefcaseManager.js.map +1 -1
  194. package/lib/esm/CatalogDb.js.map +1 -1
  195. package/lib/esm/Category.js.map +1 -1
  196. package/lib/esm/ChangeSummaryManager.js +2 -2
  197. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  198. package/lib/esm/ChangedElementsDb.js.map +1 -1
  199. package/lib/esm/ChangesetECAdaptor.js +248 -248
  200. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  201. package/lib/esm/ChannelControl.js.map +1 -1
  202. package/lib/esm/CheckpointManager.js.map +1 -1
  203. package/lib/esm/ClassRegistry.js +5 -5
  204. package/lib/esm/ClassRegistry.js.map +1 -1
  205. package/lib/esm/CloudSqlite.d.ts +4 -0
  206. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  207. package/lib/esm/CloudSqlite.js.map +1 -1
  208. package/lib/esm/CodeService.js.map +1 -1
  209. package/lib/esm/CodeSpecs.js.map +1 -1
  210. package/lib/esm/ConcurrentQuery.js.map +1 -1
  211. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  212. package/lib/esm/DevTools.js.map +1 -1
  213. package/lib/esm/DisplayStyle.js.map +1 -1
  214. package/lib/esm/ECDb.d.ts +8 -0
  215. package/lib/esm/ECDb.d.ts.map +1 -1
  216. package/lib/esm/ECDb.js +22 -0
  217. package/lib/esm/ECDb.js.map +1 -1
  218. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  219. package/lib/esm/ECSqlStatement.js.map +1 -1
  220. package/lib/esm/Element.js.map +1 -1
  221. package/lib/esm/ElementAspect.js.map +1 -1
  222. package/lib/esm/ElementGraphics.js.map +1 -1
  223. package/lib/esm/ElementTreeWalker.js.map +1 -1
  224. package/lib/esm/Entity.js.map +1 -1
  225. package/lib/esm/EntityReferences.js.map +1 -1
  226. package/lib/esm/ExportGraphics.js.map +1 -1
  227. package/lib/esm/ExternalSource.js.map +1 -1
  228. package/lib/esm/FontFile.js.map +1 -1
  229. package/lib/esm/GeoCoordConfig.js.map +1 -1
  230. package/lib/esm/GeographicCRSServices.js.map +1 -1
  231. package/lib/esm/GeometrySummary.js +47 -47
  232. package/lib/esm/GeometrySummary.js.map +1 -1
  233. package/lib/esm/IModelDb.d.ts +54 -3
  234. package/lib/esm/IModelDb.d.ts.map +1 -1
  235. package/lib/esm/IModelDb.js +97 -19
  236. package/lib/esm/IModelDb.js.map +1 -1
  237. package/lib/esm/IModelDbFonts.js.map +1 -1
  238. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  239. package/lib/esm/IModelHost.d.ts +11 -1
  240. package/lib/esm/IModelHost.d.ts.map +1 -1
  241. package/lib/esm/IModelHost.js +5 -0
  242. package/lib/esm/IModelHost.js.map +1 -1
  243. package/lib/esm/IModelIncrementalSchemaLocater.d.ts +1 -5
  244. package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -1
  245. package/lib/esm/IModelIncrementalSchemaLocater.js +0 -6
  246. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  247. package/lib/esm/IModelJsFs.js.map +1 -1
  248. package/lib/esm/ImageSourceConversion.js.map +1 -1
  249. package/lib/esm/IpcHost.js.map +1 -1
  250. package/lib/esm/LineStyle.js.map +1 -1
  251. package/lib/esm/LocalHub.js +1 -1
  252. package/lib/esm/LocalHub.js.map +1 -1
  253. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  254. package/lib/esm/LockControl.js.map +1 -1
  255. package/lib/esm/Material.js.map +1 -1
  256. package/lib/esm/Model.js.map +1 -1
  257. package/lib/esm/NativeAppStorage.js.map +1 -1
  258. package/lib/esm/NativeHost.js.map +1 -1
  259. package/lib/esm/NavigationRelationship.js.map +1 -1
  260. package/lib/esm/PromiseMemoizer.js.map +1 -1
  261. package/lib/esm/PropertyStore.js.map +1 -1
  262. package/lib/esm/Relationship.js.map +1 -1
  263. package/lib/esm/RpcBackend.js.map +1 -1
  264. package/lib/esm/SQLiteDb.js.map +1 -1
  265. package/lib/esm/Schema.js.map +1 -1
  266. package/lib/esm/SchemaSync.js.map +1 -1
  267. package/lib/esm/SchemaUtils.js.map +1 -1
  268. package/lib/esm/SheetIndex.js.map +1 -1
  269. package/lib/esm/SqliteChangesetReader.d.ts +8 -0
  270. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  271. package/lib/esm/SqliteChangesetReader.js +11 -0
  272. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  273. package/lib/esm/SqliteStatement.js.map +1 -1
  274. package/lib/esm/StashManager.d.ts +175 -0
  275. package/lib/esm/StashManager.d.ts.map +1 -0
  276. package/lib/esm/StashManager.js +301 -0
  277. package/lib/esm/StashManager.js.map +1 -0
  278. package/lib/esm/Texture.js.map +1 -1
  279. package/lib/esm/TileStorage.js.map +1 -1
  280. package/lib/esm/TxnManager.d.ts +226 -15
  281. package/lib/esm/TxnManager.d.ts.map +1 -1
  282. package/lib/esm/TxnManager.js +247 -21
  283. package/lib/esm/TxnManager.js.map +1 -1
  284. package/lib/esm/ViewDefinition.js.map +1 -1
  285. package/lib/esm/ViewStateHydrator.js.map +1 -1
  286. package/lib/esm/ViewStore.js.map +1 -1
  287. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +10 -1
  288. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  289. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +13 -5
  290. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  291. package/lib/esm/annotations/FrameGeometry.js +6 -6
  292. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  293. package/lib/esm/annotations/LeaderGeometry.d.ts +3 -2
  294. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  295. package/lib/esm/annotations/LeaderGeometry.js +8 -7
  296. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  297. package/lib/esm/annotations/TextAnnotationElement.d.ts +145 -36
  298. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  299. package/lib/esm/annotations/TextAnnotationElement.js +235 -107
  300. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  301. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +2 -0
  302. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  303. package/lib/esm/annotations/TextAnnotationGeometry.js +26 -19
  304. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  305. package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -1
  306. package/lib/esm/annotations/TextBlockGeometry.js +11 -3
  307. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  308. package/lib/esm/annotations/TextBlockLayout.d.ts +51 -38
  309. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
  310. package/lib/esm/annotations/TextBlockLayout.js +253 -157
  311. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  312. package/lib/esm/core-backend.js.map +1 -1
  313. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  314. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  315. package/lib/esm/domains/GenericElements.js.map +1 -1
  316. package/lib/esm/domains/GenericSchema.js.map +1 -1
  317. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  318. package/lib/esm/internal/ChannelAdmin.js +1 -1
  319. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  320. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  321. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  322. package/lib/esm/internal/HubMock.js.map +1 -1
  323. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  324. package/lib/esm/internal/NativePlatform.js.map +1 -1
  325. package/lib/esm/internal/NoLocks.js.map +1 -1
  326. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  327. package/lib/esm/internal/Symbols.d.ts +1 -0
  328. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  329. package/lib/esm/internal/Symbols.js +1 -0
  330. package/lib/esm/internal/Symbols.js.map +1 -1
  331. package/lib/esm/internal/annotations/fields.d.ts +2 -12
  332. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  333. package/lib/esm/internal/annotations/fields.js +51 -47
  334. package/lib/esm/internal/annotations/fields.js.map +1 -1
  335. package/lib/esm/internal/cross-package.js.map +1 -1
  336. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  337. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  338. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  339. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  340. package/lib/esm/rpc/multipart.js.map +1 -1
  341. package/lib/esm/rpc/tracing.js.map +1 -1
  342. package/lib/esm/rpc/web/logging.js.map +1 -1
  343. package/lib/esm/rpc/web/request.js.map +1 -1
  344. package/lib/esm/rpc/web/response.js.map +1 -1
  345. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  346. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  347. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  348. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  349. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  350. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  351. package/lib/esm/test/AnnotationTestUtils.d.ts +5 -1
  352. package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
  353. package/lib/esm/test/AnnotationTestUtils.js +7 -2
  354. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  355. package/lib/esm/test/AttachDb.test.js +11 -11
  356. package/lib/esm/test/AttachDb.test.js.map +1 -1
  357. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  358. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  359. package/lib/esm/test/IModelHost.test.js.map +1 -1
  360. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  361. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  362. package/lib/esm/test/IpcHost.test.js.map +1 -1
  363. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  364. package/lib/esm/test/PrintElementTree.js.map +1 -1
  365. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  366. package/lib/esm/test/RevisionUtility.js.map +1 -1
  367. package/lib/esm/test/SchemaUtils.test.js +25 -25
  368. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  369. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  370. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  371. package/lib/esm/test/TestUtils.js.map +1 -1
  372. package/lib/esm/test/annotations/Fields.test.js +195 -78
  373. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  374. package/lib/esm/test/annotations/FrameGeometry.test.js +4 -4
  375. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  376. package/lib/esm/test/annotations/LeaderGeometry.test.js +19 -17
  377. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  378. package/lib/esm/test/annotations/TextAnnotation.test.js +410 -59
  379. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  380. package/lib/esm/test/annotations/TextBlock.test.js +627 -193
  381. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  382. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  383. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts +46 -0
  384. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -1
  385. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +20 -2
  386. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  387. package/lib/esm/test/categories/Category.test.js.map +1 -1
  388. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  389. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  390. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  391. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  392. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  393. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  394. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  395. package/lib/esm/test/ecdb/ECDb.test.js +128 -58
  396. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  397. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  398. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  399. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  400. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  401. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  402. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  403. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  404. package/lib/esm/test/ecdb/ECSqlStatement.test.js +326 -326
  405. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  406. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  407. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  408. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  409. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  410. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  411. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  412. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  413. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  414. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  415. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  416. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  417. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  418. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  419. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  420. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  421. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  422. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  423. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  424. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  425. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  426. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  427. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  428. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  429. package/lib/esm/test/hubaccess/Rebase.test.d.ts +2 -0
  430. package/lib/esm/test/hubaccess/Rebase.test.d.ts.map +1 -0
  431. package/lib/esm/test/hubaccess/Rebase.test.js +640 -0
  432. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -0
  433. package/lib/esm/test/imageData.js.map +1 -1
  434. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  435. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  436. package/lib/esm/test/imodel/IModel.test.js +44 -44
  437. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  438. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  439. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  440. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +20 -20
  441. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  442. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +3 -3
  443. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  444. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  445. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  446. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +16 -1
  447. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -1
  448. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +47 -0
  449. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  450. package/lib/esm/test/index.js.map +1 -1
  451. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  452. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  453. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  454. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  455. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  456. package/lib/esm/test/rpc/response.test.js.map +1 -1
  457. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  458. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  459. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  460. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  461. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  462. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  463. package/lib/esm/test/standalone/ChangeMerge.test.js +15 -19
  464. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  465. package/lib/esm/test/standalone/ChangesetReader.test.js +248 -118
  466. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  467. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  468. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  469. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  470. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  471. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  472. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  473. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  474. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  475. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  476. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  477. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  478. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  479. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  480. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  481. package/lib/esm/test/standalone/MergeConflict.test.js +3 -3
  482. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  483. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  484. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  485. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  486. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  487. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  488. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  489. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  490. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  491. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  492. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  493. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  494. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  495. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  496. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  497. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  498. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  499. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  500. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  501. package/lib/esm/workspace/Settings.js.map +1 -1
  502. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  503. package/lib/esm/workspace/Workspace.d.ts +1 -1
  504. package/lib/esm/workspace/Workspace.js.map +1 -1
  505. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  506. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACzE,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QAEF,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAChG,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,UAAU;YACrB,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { _hubAccess, _nativeDb } from \"../../internal/Symbols\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"Checkpoint Manager\", () => {\n\n afterEach(() => {\n sinon.restore();\n });\n\n it(\"open missing local file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n const request = {\n localFile: path.join(V2CheckpointManager.getFolder(), Guid.createValue()),\n checkpoint,\n };\n const db = IModelTestUtils.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n\n it(\"open a bad bim file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n\n // Setup a local file\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\n if (!IModelJsFs.existsSync(folder))\n IModelJsFs.recursiveMkDirSync(folder);\n\n const outputFile = path.join(V2CheckpointManager.getFolder(), `${checkpoint.changeset.id}.bim`);\n if (IModelJsFs.existsSync(outputFile))\n IModelJsFs.unlinkSync(outputFile);\n\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\n\n // Attempt to open the file\n const request = {\n localFile: outputFile,\n checkpoint,\n };\n const db = IModelTestUtils.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n});\n"]}
1
+ {"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACzE,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QAEF,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAChG,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,UAAU;YACrB,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { _hubAccess, _nativeDb } from \"../../internal/Symbols\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"Checkpoint Manager\", () => {\r\n\r\n afterEach(() => {\r\n sinon.restore();\r\n });\r\n\r\n it(\"open missing local file should return undefined\", async () => {\r\n const checkpoint = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n const request = {\r\n localFile: path.join(V2CheckpointManager.getFolder(), Guid.createValue()),\r\n checkpoint,\r\n };\r\n const db = IModelTestUtils.tryOpenLocalFile(request);\r\n assert.isUndefined(db);\r\n });\r\n\r\n it(\"open a bad bim file should return undefined\", async () => {\r\n const checkpoint = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n\r\n // Setup a local file\r\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\r\n if (!IModelJsFs.existsSync(folder))\r\n IModelJsFs.recursiveMkDirSync(folder);\r\n\r\n const outputFile = path.join(V2CheckpointManager.getFolder(), `${checkpoint.changeset.id}.bim`);\r\n if (IModelJsFs.existsSync(outputFile))\r\n IModelJsFs.unlinkSync(outputFile);\r\n\r\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\r\n\r\n // Attempt to open the file\r\n const request = {\r\n localFile: outputFile,\r\n checkpoint,\r\n };\r\n const db = IModelTestUtils.tryOpenLocalFile(request);\r\n assert.isUndefined(db);\r\n });\r\n});\r\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Rebase.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rebase.test.d.ts","sourceRoot":"","sources":["../../../../src/test/hubaccess/Rebase.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,640 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import * as chai from "chai";
6
+ import * as chaiAsPromised from "chai-as-promised";
7
+ import { HubWrappers, IModelTestUtils, KnownTestLocations } from "..";
8
+ import { BriefcaseManager, ChannelControl, DrawingCategory, IModelHost, SqliteChangesetReader } from "../../core-backend";
9
+ import { HubMock } from "../../internal/HubMock";
10
+ import { Code, IModel, SubCategoryAppearance } from "@itwin/core-common";
11
+ import { Guid } from "@itwin/core-bentley";
12
+ import { StashManager } from "../../StashManager";
13
+ chai.use(chaiAsPromised);
14
+ class TestIModel {
15
+ iModelId = "";
16
+ drawingModelId = "";
17
+ drawingCategoryId = "";
18
+ briefcases = [];
19
+ _data = 0;
20
+ constructor() { }
21
+ async startup() {
22
+ HubMock.startup("TestIModel", KnownTestLocations.outputDir);
23
+ this.iModelId = await HubMock.createNewIModel({ iTwinId: HubMock.iTwinId, iModelName: "Test", description: "TestSubject" });
24
+ const b1 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId: HubMock.iTwinId, iModelId: this.iModelId });
25
+ b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);
26
+ b1.saveChanges();
27
+ const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
28
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
29
+ <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
30
+ <ECEntityClass typeName="a1">
31
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
32
+ <ECProperty propertyName="prop1" typeName="string" />
33
+ </ECEntityClass>
34
+ <ECRelationshipClass typeName="A1OwnsA1" modifier="None" strength="embedding">
35
+ <BaseClass>bis:ElementOwnsChildElements</BaseClass>
36
+ <Source multiplicity="(0..1)" roleLabel="owns" polymorphic="true">
37
+ <Class class="a1"/>
38
+ </Source>
39
+ <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="false">
40
+ <Class class="a1"/>
41
+ </Target>
42
+ </ECRelationshipClass>
43
+ </ECSchema>`;
44
+ await b1.importSchemaStrings([schema1]);
45
+ chai.expect(b1.txns.hasPendingTxns).to.be.true;
46
+ await b1.pushChanges({ description: "schema1" });
47
+ const codeProps = Code.createEmpty();
48
+ codeProps.value = "DrawingModel";
49
+ await b1.locks.acquireLocks({ shared: IModel.dictionaryId });
50
+ this.drawingModelId = IModelTestUtils.createAndInsertDrawingPartitionAndModel(b1, codeProps, true)[1];
51
+ let drawingCategoryId = DrawingCategory.queryCategoryIdByName(b1, IModel.dictionaryId, "MyDrawingCategory");
52
+ if (undefined === drawingCategoryId)
53
+ drawingCategoryId = DrawingCategory.insert(b1, IModel.dictionaryId, "MyDrawingCategory", new SubCategoryAppearance());
54
+ this.drawingCategoryId = drawingCategoryId;
55
+ b1.saveChanges();
56
+ await b1.pushChanges({ description: "drawing category" });
57
+ b1.close();
58
+ }
59
+ async openBriefcase() {
60
+ const b = await HubWrappers.downloadAndOpenBriefcase({ iTwinId: HubMock.iTwinId, iModelId: this.iModelId });
61
+ b.channels.addAllowedChannel(ChannelControl.sharedChannelName);
62
+ b.saveChanges();
63
+ this.briefcases.push(b);
64
+ return b;
65
+ }
66
+ async insertElement(b, markAsIndirect) {
67
+ await b.locks.acquireLocks({ shared: [this.drawingModelId] });
68
+ const baseProps = {
69
+ classFullName: "TestDomain:a1",
70
+ model: this.drawingModelId,
71
+ category: this.drawingCategoryId,
72
+ code: Code.createEmpty(),
73
+ };
74
+ let id = "";
75
+ if (markAsIndirect) {
76
+ b.txns.withIndirectTxnMode(() => {
77
+ id = b.elements.insertElement({ ...baseProps, prop1: `${this._data++}` });
78
+ });
79
+ return id;
80
+ }
81
+ return b.elements.insertElement({ ...baseProps, prop1: `${this._data++}` });
82
+ }
83
+ async insertElement2(b, args) {
84
+ await b.locks.acquireLocks({ shared: [this.drawingModelId] });
85
+ const props = {
86
+ classFullName: "TestDomain:a1",
87
+ model: this.drawingModelId,
88
+ category: this.drawingCategoryId,
89
+ code: Code.createEmpty(),
90
+ parent: args?.parent,
91
+ prop1: args?.prop1 ?? `${this._data++}`
92
+ };
93
+ let id = "";
94
+ if (args?.markAsIndirect) {
95
+ b.txns.withIndirectTxnMode(() => {
96
+ id = b.elements.insertElement(props);
97
+ });
98
+ return id;
99
+ }
100
+ return b.elements.insertElement(props);
101
+ }
102
+ async updateElement(b, id, markAsIndirect) {
103
+ await b.locks.acquireLocks({ shared: [this.drawingModelId], exclusive: [id] });
104
+ const elProps = b.elements.getElementProps(id);
105
+ if (markAsIndirect) {
106
+ b.txns.withIndirectTxnMode(() => {
107
+ b.elements.updateElement({ ...elProps, prop1: `${this._data++}` });
108
+ });
109
+ }
110
+ else {
111
+ b.elements.updateElement({ ...elProps, prop1: `${this._data++}` });
112
+ }
113
+ }
114
+ async deleteElement(b, id, markAsIndirect) {
115
+ await b.locks.acquireLocks({ shared: [this.drawingModelId], exclusive: [id] });
116
+ if (markAsIndirect) {
117
+ b.txns.withIndirectTxnMode(() => {
118
+ b.elements.deleteElement(id);
119
+ });
120
+ }
121
+ else {
122
+ b.elements.deleteElement(id);
123
+ }
124
+ }
125
+ async shutdown() {
126
+ this.briefcases.forEach(b => b.close());
127
+ HubMock.shutdown();
128
+ }
129
+ }
130
+ describe("rebase changes & stashing api", function () {
131
+ let testIModel;
132
+ before(async () => {
133
+ if (!IModelHost.isValid)
134
+ await IModelHost.startup();
135
+ });
136
+ this.beforeEach(async () => {
137
+ testIModel = new TestIModel();
138
+ await testIModel.startup();
139
+ });
140
+ this.afterEach(async () => {
141
+ await testIModel.shutdown();
142
+ });
143
+ it("save changes args", async () => {
144
+ const b1 = await testIModel.openBriefcase();
145
+ await testIModel.insertElement(b1);
146
+ b1.saveChanges({
147
+ source: "test",
148
+ description: "test description",
149
+ appData: {
150
+ test: "test",
151
+ foo: [1, 2, 3],
152
+ bar: { baz: "qux" }
153
+ }
154
+ });
155
+ let lastTxn = b1.txns.getLastSavedTxnProps();
156
+ chai.assert.isDefined(lastTxn);
157
+ if (lastTxn) {
158
+ chai.expect(lastTxn.props.source).to.be.equals("test");
159
+ chai.expect(lastTxn.props.description).to.be.equals("test description");
160
+ chai.expect(lastTxn.props.appData).to.not.be.undefined;
161
+ chai.expect(lastTxn.props.appData?.test).to.be.eq("test");
162
+ chai.expect(lastTxn.props.appData?.foo).to.be.deep.eq([1, 2, 3]);
163
+ chai.expect(lastTxn.props.appData?.bar).to.be.deep.eq({ baz: "qux" });
164
+ chai.expect(lastTxn.nextId).to.be.undefined;
165
+ chai.expect(lastTxn.prevId).to.be.undefined;
166
+ chai.expect(lastTxn.type).to.be.eq("Data");
167
+ chai.expect(lastTxn.id).to.be.eq('0x100000000');
168
+ chai.expect(lastTxn.reversed).to.be.false;
169
+ chai.expect(lastTxn.grouped).to.be.false;
170
+ }
171
+ await testIModel.insertElement(b1);
172
+ b1.saveChanges({
173
+ source: "test2",
174
+ description: "test description 2",
175
+ appData: {
176
+ test: "test 2",
177
+ foo: [11, 12, 13],
178
+ bar: { baz: "qux2" }
179
+ }
180
+ });
181
+ lastTxn = b1.txns.getLastSavedTxnProps();
182
+ chai.assert.isDefined(lastTxn);
183
+ if (lastTxn) {
184
+ chai.expect(lastTxn.props.source).to.be.equals("test2");
185
+ chai.expect(lastTxn.props.description).to.be.equals("test description 2");
186
+ chai.expect(lastTxn.props.appData).to.not.be.undefined;
187
+ chai.expect(lastTxn.props.appData?.test).to.be.eq("test 2");
188
+ chai.expect(lastTxn.props.appData?.foo).to.be.deep.eq([11, 12, 13]);
189
+ chai.expect(lastTxn.props.appData?.bar).to.be.deep.eq({ baz: "qux2" });
190
+ chai.expect(lastTxn.nextId).to.be.undefined;
191
+ chai.expect(lastTxn.prevId).to.be.equal('0x100000000');
192
+ chai.expect(lastTxn.type).to.be.eq("Data");
193
+ chai.expect(lastTxn.id).to.be.eq('0x100000001');
194
+ chai.expect(lastTxn.reversed).to.be.false;
195
+ chai.expect(lastTxn.grouped).to.be.false;
196
+ }
197
+ await testIModel.insertElement(b1);
198
+ b1.saveChanges("new element");
199
+ lastTxn = b1.txns.getLastSavedTxnProps();
200
+ chai.assert.isDefined(lastTxn);
201
+ if (lastTxn) {
202
+ chai.expect(lastTxn.props.source).is.undefined;
203
+ chai.expect(lastTxn.props.description).to.be.equals("new element");
204
+ chai.expect(lastTxn.props.appData).to.be.undefined;
205
+ chai.expect(lastTxn.nextId).to.be.undefined;
206
+ chai.expect(lastTxn.prevId).to.be.equal('0x100000001');
207
+ chai.expect(lastTxn.type).to.be.eq("Data");
208
+ chai.expect(lastTxn.id).to.be.eq('0x100000002');
209
+ chai.expect(lastTxn.reversed).to.be.false;
210
+ chai.expect(lastTxn.grouped).to.be.false;
211
+ }
212
+ await b1.pushChanges({ description: "new element" });
213
+ chai.expect(b1.txns.isUndoPossible).is.false;
214
+ chai.expect(b1.txns.isRedoPossible).is.false;
215
+ lastTxn = b1.txns.getLastSavedTxnProps();
216
+ chai.assert.isUndefined(lastTxn);
217
+ });
218
+ it("direct / indirect", async () => {
219
+ const b1 = await testIModel.openBriefcase();
220
+ const directElId = await testIModel.insertElement(b1);
221
+ const indirectElId = await testIModel.insertElement(b1, true);
222
+ chai.expect(directElId).to.not.be.undefined;
223
+ chai.expect(indirectElId).to.not.be.undefined;
224
+ b1.saveChanges({ description: "insert element 1 direct and 1 indirect" });
225
+ const txn = b1.txns.getLastSavedTxnProps();
226
+ chai.assert.isDefined(txn);
227
+ if (txn) {
228
+ let checkCount = 0;
229
+ const reader = SqliteChangesetReader.openTxn({ txnId: txn?.id, db: b1 });
230
+ while (reader.step()) {
231
+ if (reader.primaryKeyValues.length === 0)
232
+ continue;
233
+ if (reader.tableName !== "bis_Element")
234
+ continue;
235
+ const iid = reader.primaryKeyValues[0];
236
+ if (iid === directElId) {
237
+ chai.expect(reader.isIndirect).to.be.false;
238
+ }
239
+ if (iid === indirectElId) {
240
+ chai.expect(reader.isIndirect).to.be.true;
241
+ }
242
+ checkCount++;
243
+ }
244
+ chai.expect(checkCount).to.be.equals(2);
245
+ }
246
+ await b1.pushChanges({ description: "insert element 1 direct and 1 indirect" });
247
+ chai.expect(b1.txns.isUndoPossible).is.false;
248
+ chai.expect(b1.txns.isRedoPossible).is.false;
249
+ const lastTxn = b1.txns.getLastSavedTxnProps();
250
+ chai.assert.isUndefined(lastTxn);
251
+ });
252
+ it("rebase handler", async () => {
253
+ const b1 = await testIModel.openBriefcase();
254
+ const b2 = await testIModel.openBriefcase();
255
+ const e1 = await testIModel.insertElement(b1);
256
+ const e2 = await testIModel.insertElement(b1, true);
257
+ b1.saveChanges();
258
+ await b1.pushChanges({ description: "insert element 1 direct and 1 indirect" });
259
+ await b2.pullChanges();
260
+ await testIModel.updateElement(b1, e1);
261
+ await testIModel.updateElement(b1, e2, true);
262
+ b1.saveChanges();
263
+ await b1.pushChanges({ description: "update element 1 direct and 1 indirect" });
264
+ await testIModel.insertElement(b2);
265
+ await testIModel.insertElement(b2, true);
266
+ b2.saveChanges("first change");
267
+ await testIModel.insertElement(b2);
268
+ await testIModel.insertElement(b2, true);
269
+ b2.saveChanges("second change");
270
+ await testIModel.insertElement(b2);
271
+ await testIModel.insertElement(b2, true);
272
+ b2.saveChanges("third change");
273
+ b2.txns.rebaser.setCustomHandler({
274
+ shouldReinstate: (_txn) => {
275
+ return true;
276
+ },
277
+ recompute: async (_txn) => {
278
+ await testIModel.insertElement(b2);
279
+ await testIModel.insertElement(b2, true);
280
+ },
281
+ });
282
+ await b1.pullChanges();
283
+ });
284
+ it("stash & drop", async () => {
285
+ const b1 = await testIModel.openBriefcase();
286
+ const e1 = await testIModel.insertElement(b1);
287
+ b1.saveChanges();
288
+ await b1.pushChanges({ description: "insert element 1 direct and 1 indirect" });
289
+ const e2 = await testIModel.insertElement(b1);
290
+ b1.saveChanges();
291
+ await b1.pushChanges({ description: "insert element 1 direct and 1 indirect" });
292
+ await testIModel.insertElement(b1);
293
+ b1.saveChanges(`first`);
294
+ await testIModel.updateElement(b1, e1);
295
+ b1.saveChanges(`second`);
296
+ await testIModel.deleteElement(b1, e2);
297
+ b1.saveChanges(`third`);
298
+ await testIModel.insertElement(b1);
299
+ b1.saveChanges(`fourth`);
300
+ const stash1 = await StashManager.stash({ db: b1, description: "stash test 1" });
301
+ chai.expect(stash1).to.exist;
302
+ chai.assert(Guid.isGuid(stash1.id));
303
+ chai.expect(stash1.description).to.equals("stash test 1");
304
+ chai.expect(stash1.briefcaseId).equals(b1.briefcaseId);
305
+ chai.expect(stash1.iModelId).to.equals(b1.iModelId);
306
+ chai.expect(stash1.timestamp).to.exist;
307
+ chai.expect(stash1.description).to.exist;
308
+ chai.expect(stash1.hash).length(64);
309
+ chai.expect(stash1.parentChangeset).to.exist;
310
+ chai.expect(stash1.idSequences.element).to.equals("0x30000000004");
311
+ chai.expect(stash1.idSequences.instance).to.equals("0x30000000000");
312
+ chai.expect(stash1.acquiredLocks).equals(4);
313
+ chai.expect(stash1.txns).to.exist;
314
+ chai.expect(stash1.txns).to.have.lengthOf(4);
315
+ chai.expect(stash1.txns[0].props.description).to.equal("first");
316
+ chai.expect(stash1.txns[1].props.description).to.equal("second");
317
+ chai.expect(stash1.txns[2].props.description).to.equal("third");
318
+ chai.expect(stash1.txns[3].props.description).to.equal("fourth");
319
+ chai.expect(stash1.txns[0].id).to.equals("0x100000000");
320
+ chai.expect(stash1.txns[1].id).to.equals("0x100000001");
321
+ chai.expect(stash1.txns[2].id).to.equals("0x100000002");
322
+ chai.expect(stash1.txns[3].id).to.equals("0x100000003");
323
+ await testIModel.insertElement(b1);
324
+ b1.saveChanges(`fifth`);
325
+ await testIModel.updateElement(b1, e1);
326
+ b1.saveChanges(`sixth`);
327
+ await testIModel.insertElement(b1);
328
+ b1.saveChanges(`seventh`);
329
+ const stash2 = await StashManager.stash({ db: b1, description: "stash test 2" });
330
+ chai.expect(stash2).to.exist;
331
+ chai.expect(stash2.description).to.equals("stash test 2");
332
+ chai.expect(stash2.hash).length(64);
333
+ chai.expect(stash2.parentChangeset).to.exist;
334
+ chai.expect(stash2.idSequences.element).to.equals("0x30000000006");
335
+ chai.expect(stash2.idSequences.instance).to.equals("0x30000000000");
336
+ chai.expect(stash2.acquiredLocks).equals(4);
337
+ chai.expect(stash2.txns).to.exist;
338
+ chai.expect(stash2.txns).to.have.lengthOf(7);
339
+ chai.expect(stash2.txns[0].props.description).to.equal("first");
340
+ chai.expect(stash2.txns[1].props.description).to.equal("second");
341
+ chai.expect(stash2.txns[2].props.description).to.equal("third");
342
+ chai.expect(stash2.txns[3].props.description).to.equal("fourth");
343
+ chai.expect(stash2.txns[4].props.description).to.equal("fifth");
344
+ chai.expect(stash2.txns[5].props.description).to.equal("sixth");
345
+ chai.expect(stash2.txns[6].props.description).to.equal("seventh");
346
+ chai.expect(stash2.txns[0].id).to.equals("0x100000000");
347
+ chai.expect(stash2.txns[1].id).to.equals("0x100000001");
348
+ chai.expect(stash2.txns[2].id).to.equals("0x100000002");
349
+ chai.expect(stash2.txns[3].id).to.equals("0x100000003");
350
+ chai.expect(stash2.txns[4].id).to.equals("0x100000004");
351
+ chai.expect(stash2.txns[5].id).to.equals("0x100000005");
352
+ chai.expect(stash2.txns[6].id).to.equals("0x100000006");
353
+ const stashes = StashManager.getStashes(b1);
354
+ chai.expect(stashes).to.have.lengthOf(2);
355
+ chai.expect(stashes[0].description).to.equals("stash test 2");
356
+ chai.expect(stashes[1].description).to.equals("stash test 1");
357
+ chai.expect(stashes[0]).to.deep.equal(stash2);
358
+ chai.expect(stashes[1]).to.deep.equal(stash1);
359
+ StashManager.dropAllStashes(b1);
360
+ chai.expect(StashManager.getStashes(b1)).to.have.lengthOf(0);
361
+ });
362
+ it("should restore mutually exclusive stashes", async () => {
363
+ const b1 = await testIModel.openBriefcase();
364
+ // stash 1
365
+ const e1 = await testIModel.insertElement(b1);
366
+ chai.expect(e1).to.exist;
367
+ b1.saveChanges("first");
368
+ const stash1 = await StashManager.stash({ db: b1, description: "stash test 1", discardLocalChanges: true, retainLocks: true });
369
+ chai.expect(stash1).to.exist;
370
+ chai.expect(b1.elements.tryGetElement(e1)).to.undefined;
371
+ chai.expect(b1.txns.isUndoPossible).to.be.false;
372
+ chai.expect(b1.txns.isRedoPossible).to.be.false;
373
+ // stash 2
374
+ const e2 = await testIModel.insertElement(b1);
375
+ chai.expect(e2).to.exist;
376
+ b1.saveChanges("second");
377
+ const stash2 = await StashManager.stash({ db: b1, description: "stash test 2", discardLocalChanges: true, retainLocks: true });
378
+ chai.expect(stash2).to.exist;
379
+ chai.expect(b1.elements.tryGetElement(e1)).to.undefined;
380
+ chai.expect(b1.elements.tryGetElement(e2)).to.undefined;
381
+ chai.expect(b1.txns.isUndoPossible).to.be.false;
382
+ chai.expect(b1.txns.isRedoPossible).to.be.false;
383
+ // stash 3
384
+ const e3 = await testIModel.insertElement(b1);
385
+ chai.expect(e3).to.exist;
386
+ b1.saveChanges("third");
387
+ const stash3 = await StashManager.stash({ db: b1, description: "stash test 3", discardLocalChanges: true, retainLocks: true });
388
+ chai.expect(stash3).to.exist;
389
+ chai.expect(b1.elements.tryGetElement(e1)).to.undefined;
390
+ chai.expect(b1.elements.tryGetElement(e2)).to.undefined;
391
+ chai.expect(b1.elements.tryGetElement(e3)).to.undefined;
392
+ chai.expect(b1.txns.isUndoPossible).to.be.false;
393
+ chai.expect(b1.txns.isRedoPossible).to.be.false;
394
+ chai.expect(e1).not.equals(e2);
395
+ chai.expect(e1).not.equals(e3);
396
+ chai.expect(e2).not.equals(e3);
397
+ const stashes = StashManager.getStashes(b1);
398
+ chai.expect(stashes).to.have.lengthOf(3);
399
+ chai.expect(stashes[0].description).to.equals("stash test 3");
400
+ chai.expect(stashes[1].description).to.equals("stash test 2");
401
+ chai.expect(stashes[2].description).to.equals("stash test 1");
402
+ // restore stash 1
403
+ await StashManager.restore({ db: b1, stash: stash1 });
404
+ chai.expect(b1.elements.tryGetElement(e1)).to.exist;
405
+ chai.expect(b1.elements.tryGetElement(e2)).to.undefined;
406
+ chai.expect(b1.elements.tryGetElement(e3)).to.undefined;
407
+ // restore stash 2
408
+ await StashManager.restore({ db: b1, stash: stash2 });
409
+ chai.expect(b1.elements.tryGetElement(e1)).to.undefined;
410
+ chai.expect(b1.elements.tryGetElement(e2)).to.exist;
411
+ chai.expect(b1.elements.tryGetElement(e3)).to.undefined;
412
+ // restore stash 3
413
+ await StashManager.restore({ db: b1, stash: stash3 });
414
+ chai.expect(b1.elements.tryGetElement(e1)).to.undefined;
415
+ chai.expect(b1.elements.tryGetElement(e2)).to.undefined;
416
+ chai.expect(b1.elements.tryGetElement(e3)).to.exist;
417
+ });
418
+ it("should restore stash in any order", async () => {
419
+ const b1 = await testIModel.openBriefcase();
420
+ // stash 1
421
+ const e1 = await testIModel.insertElement(b1);
422
+ chai.expect(e1).to.exist;
423
+ b1.saveChanges("first");
424
+ // do not discard local changes
425
+ const stash1 = await StashManager.stash({ db: b1, description: "stash test 1" });
426
+ chai.expect(stash1).to.exist;
427
+ chai.expect(b1.elements.tryGetElement(e1)).to.exist;
428
+ chai.expect(b1.txns.isUndoPossible).to.be.true;
429
+ chai.expect(b1.txns.isRedoPossible).to.be.false;
430
+ // stash 2
431
+ const e2 = await testIModel.insertElement(b1);
432
+ chai.expect(e2).to.exist;
433
+ b1.saveChanges("second");
434
+ // do not discard local changes
435
+ const stash2 = await StashManager.stash({ db: b1, description: "stash test 2" });
436
+ chai.expect(stash2).to.exist;
437
+ chai.expect(b1.elements.tryGetElement(e1)).to.exist;
438
+ chai.expect(b1.elements.tryGetElement(e2)).to.exist;
439
+ chai.expect(b1.txns.isUndoPossible).to.be.true;
440
+ chai.expect(b1.txns.isRedoPossible).to.be.false;
441
+ // stash 3
442
+ const e3 = await testIModel.insertElement(b1);
443
+ chai.expect(e3).to.exist;
444
+ b1.saveChanges("third");
445
+ // do not discard local changes
446
+ const stash3 = await StashManager.stash({ db: b1, description: "stash test 3" });
447
+ chai.expect(stash3).to.exist;
448
+ chai.expect(b1.elements.tryGetElement(e1)).to.exist;
449
+ chai.expect(b1.elements.tryGetElement(e2)).to.exist;
450
+ chai.expect(b1.elements.tryGetElement(e3)).to.exist;
451
+ chai.expect(b1.txns.isUndoPossible).to.be.true;
452
+ chai.expect(b1.txns.isRedoPossible).to.be.false;
453
+ const stashes = StashManager.getStashes(b1);
454
+ chai.expect(stashes).to.have.lengthOf(3);
455
+ chai.expect(stashes[0].description).to.equals("stash test 3");
456
+ chai.expect(stashes[1].description).to.equals("stash test 2");
457
+ chai.expect(stashes[2].description).to.equals("stash test 1");
458
+ await b1.discardChanges({ retainLocks: true });
459
+ chai.expect(b1.elements.tryGetElement(e1)).to.undefined;
460
+ chai.expect(b1.elements.tryGetElement(e2)).to.undefined;
461
+ chai.expect(b1.elements.tryGetElement(e3)).to.undefined;
462
+ chai.expect(b1.txns.isUndoPossible).to.be.false;
463
+ chai.expect(b1.txns.isRedoPossible).to.be.false;
464
+ // restore stash 1
465
+ await StashManager.restore({ db: b1, stash: stash1 });
466
+ chai.expect(b1.elements.tryGetElement(e1)).to.exist;
467
+ chai.expect(b1.elements.tryGetElement(e2)).to.undefined;
468
+ chai.expect(b1.elements.tryGetElement(e3)).to.undefined;
469
+ // restore stash 2
470
+ await StashManager.restore({ db: b1, stash: stash2 });
471
+ chai.expect(b1.elements.tryGetElement(e1)).to.exist;
472
+ chai.expect(b1.elements.tryGetElement(e2)).to.exist;
473
+ chai.expect(b1.elements.tryGetElement(e3)).to.undefined;
474
+ // restore stash 3
475
+ await StashManager.restore({ db: b1, stash: stash3 });
476
+ chai.expect(b1.elements.tryGetElement(e1)).to.exist;
477
+ chai.expect(b1.elements.tryGetElement(e2)).to.exist;
478
+ chai.expect(b1.elements.tryGetElement(e3)).to.exist;
479
+ });
480
+ it("should restore stash when briefcase has advanced to latest changeset", async () => {
481
+ const b1 = await testIModel.openBriefcase();
482
+ const b2 = await testIModel.openBriefcase();
483
+ chai.expect(b1.changeset.index).to.equals(2);
484
+ chai.expect(b2.changeset.index).to.equals(2);
485
+ const e1 = await testIModel.insertElement(b1);
486
+ chai.expect(e1).to.exist;
487
+ b1.saveChanges();
488
+ await b1.pushChanges({ description: `${e1} inserted` });
489
+ chai.expect(b1.changeset.index).to.equals(3);
490
+ const e2 = await testIModel.insertElement(b2);
491
+ chai.expect(e2).to.exist;
492
+ b2.saveChanges();
493
+ chai.expect(b2.elements.tryGetElement(e1)).to.undefined;
494
+ chai.expect(b2.elements.tryGetElement(e2)).to.exist;
495
+ const b2Stash1 = await StashManager.stash({ db: b2, description: "stash test 1", discardLocalChanges: true });
496
+ chai.expect(b2Stash1.parentChangeset.index).to.equals(2);
497
+ chai.expect(b2.elements.tryGetElement(e1)).to.undefined;
498
+ chai.expect(b2.elements.tryGetElement(e2)).to.undefined;
499
+ await b2.pullChanges();
500
+ chai.expect(b2.changeset.index).to.equals(3);
501
+ chai.expect(b2.elements.tryGetElement(e1)).to.exist;
502
+ chai.expect(b2.elements.tryGetElement(e2)).to.undefined;
503
+ // stash restore should downgrade briefcase to older changeset as specified in stash
504
+ await StashManager.restore({ db: b2, stash: b2Stash1 });
505
+ chai.expect(b2.changeset.index).to.equals(2);
506
+ chai.expect(b2.elements.tryGetElement(e1)).to.undefined;
507
+ chai.expect(b2.elements.tryGetElement(e2)).to.exist;
508
+ await b2.pullChanges();
509
+ chai.expect(b2.changeset.index).to.equals(3);
510
+ chai.expect(b2.elements.tryGetElement(e1)).to.exist;
511
+ chai.expect(b2.elements.tryGetElement(e2)).to.exist;
512
+ await b2.pushChanges({ description: "test" });
513
+ chai.expect(b2.changeset.index).to.equals(4);
514
+ });
515
+ it("restore stash that has element changed by another briefcase", async () => {
516
+ const b1 = await testIModel.openBriefcase();
517
+ const b2 = await testIModel.openBriefcase();
518
+ chai.expect(b1.changeset.index).to.equals(2);
519
+ chai.expect(b2.changeset.index).to.equals(2);
520
+ const e1 = await testIModel.insertElement(b1);
521
+ chai.expect(e1).to.exist;
522
+ b1.saveChanges();
523
+ await b1.pushChanges({ description: `${e1} inserted` });
524
+ chai.expect(b1.changeset.index).to.equals(3);
525
+ await b2.pullChanges();
526
+ chai.expect(b2.changeset.index).to.equals(3);
527
+ await testIModel.updateElement(b2, e1);
528
+ b2.saveChanges();
529
+ chai.expect(b2.locks.holdsExclusiveLock(e1)).to.be.true;
530
+ const b2Stash1 = await StashManager.stash({ db: b2, description: "stash test 1", discardLocalChanges: true });
531
+ chai.expect(b2Stash1.parentChangeset.index).to.equals(3);
532
+ chai.expect(b2.locks.holdsExclusiveLock(e1)).to.be.false;
533
+ // stash release lock so b2 should have released lock and b1 should be able to update.
534
+ await testIModel.updateElement(b1, e1);
535
+ b1.saveChanges();
536
+ // restore stash should fail because of lock not obtained on e1
537
+ await chai.expect(StashManager.restore({ db: b2, stash: b2Stash1 })).to.be.rejectedWith("exclusive lock is already held");
538
+ // push b1 changes to release lock
539
+ await b1.pushChanges({ description: `${e1} inserted` });
540
+ // restore stash should fail because pull is required to obtain lock
541
+ await chai.expect(StashManager.restore({ db: b2, stash: b2Stash1 })).to.be.rejectedWith("pull is required to obtain lock");
542
+ await b2.pullChanges();
543
+ chai.expect(b2.changeset.index).to.equals(4);
544
+ const elBefore = b2.elements.tryGetElementProps(e1);
545
+ chai.expect(elBefore.prop1).to.equals("2");
546
+ // restore stash should succeed as now it can obtain lock
547
+ await StashManager.restore({ db: b2, stash: b2Stash1 });
548
+ const elAfter = b2.elements.tryGetElementProps(e1);
549
+ chai.expect(elAfter.prop1).to.equals("1");
550
+ await b2.pushChanges({ description: `${e1} updated` });
551
+ });
552
+ it("schema change should not be stashed", async () => {
553
+ const b1 = await testIModel.openBriefcase();
554
+ const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
555
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.00.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
556
+ <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
557
+ <ECEntityClass typeName="a1">
558
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
559
+ <ECProperty propertyName="prop1" typeName="string" />
560
+ <ECProperty propertyName="prop2" typeName="string" />
561
+ </ECEntityClass>
562
+ <ECRelationshipClass typeName="A1OwnsA1" modifier="None" strength="embedding">
563
+ <BaseClass>bis:ElementOwnsChildElements</BaseClass>
564
+ <Source multiplicity="(0..1)" roleLabel="owns" polymorphic="true">
565
+ <Class class="a1"/>
566
+ </Source>
567
+ <Target multiplicity="(0..*)" roleLabel="is owned by" polymorphic="false">
568
+ <Class class="a1"/>
569
+ </Target>
570
+ </ECRelationshipClass>
571
+ </ECSchema>`;
572
+ await b1.importSchemaStrings([schema1]);
573
+ b1.saveChanges();
574
+ await chai.expect(StashManager.stash({ db: b1, description: "stash test 1" })).to.not.rejectedWith("Bad Arg: Pending schema changeset stashing is not currently supported");
575
+ });
576
+ it("abort rebase", async () => {
577
+ const b1 = await testIModel.openBriefcase();
578
+ const b2 = await testIModel.openBriefcase();
579
+ const e1 = await testIModel.insertElement(b1);
580
+ b1.saveChanges();
581
+ await b1.pushChanges({ description: `${e1} inserted` });
582
+ const e2 = await testIModel.insertElement(b2);
583
+ chai.expect(e2).to.exist;
584
+ let e3 = "";
585
+ b2.saveChanges();
586
+ b2.txns.rebaser.setCustomHandler({
587
+ shouldReinstate: (_txnProps) => {
588
+ return true;
589
+ },
590
+ recompute: async (_txnProps) => {
591
+ chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;
592
+ e3 = await testIModel.insertElement(b2);
593
+ throw new Error("Rebase failed");
594
+ },
595
+ });
596
+ chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined;
597
+ chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;
598
+ chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined;
599
+ chai.expect(b2.changeset.index).to.equals(2);
600
+ await chai.expect(b2.pullChanges()).to.be.rejectedWith("Rebase failed");
601
+ chai.expect(b2.changeset.index).to.equals(3);
602
+ chai.expect(e3).to.exist;
603
+ chai.expect(b2.elements.tryGetElementProps(e1)).to.exist; // came from incoming changeset
604
+ chai.expect(b2.elements.tryGetElementProps(e2)).to.undefined; // was local change and reversed during rebase.
605
+ chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // was insert by reCompute() but due to exception the rebase attempt was abandoned.
606
+ chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;
607
+ chai.expect(b2.txns.rebaser.canAbort()).is.true;
608
+ await b2.txns.rebaser.abort();
609
+ chai.expect(b2.changeset.index).to.equals(2);
610
+ chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined; // reset briefcase should move tip back to where it was before pull
611
+ chai.expect(b2.elements.tryGetElementProps(e2)).to.exist; // abort should put back e2 which was only change at the time of pull
612
+ chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // add by rebase so should not exist either
613
+ chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.false;
614
+ });
615
+ it("getStash() should throw exception", async () => {
616
+ const b1 = await testIModel.openBriefcase();
617
+ chai.expect(() => StashManager.getStash({ db: b1, stash: "invalid_stash" })).to.throw("Invalid stash");
618
+ chai.expect(StashManager.tryGetStash({ db: b1, stash: "invalid_stash" })).to.be.undefined;
619
+ });
620
+ it("edge case: a indirect update can cause FK violation", async () => {
621
+ const b1 = await testIModel.openBriefcase();
622
+ const b2 = await testIModel.openBriefcase();
623
+ const parentId = await testIModel.insertElement(b1);
624
+ const childId = await testIModel.insertElement2(b1, { parent: { id: parentId, relClassName: "TestDomain:A1OwnsA1" } });
625
+ b1.saveChanges("insert parent and child");
626
+ await b1.pushChanges({ description: `inserted parent ${parentId} and child ${childId}` });
627
+ await b2.pullChanges();
628
+ // b1 delete childId while b1 create a child of childId as indirect change
629
+ await testIModel.deleteElement(b1, childId);
630
+ b1.saveChanges("delete child");
631
+ // no exclusive lock required on child1
632
+ const grandChildId = await testIModel.insertElement2(b2, { parent: { id: childId, relClassName: "TestDomain:A1OwnsA1" }, markAsIndirect: true });
633
+ b2.saveChanges("delete child and insert grandchild");
634
+ await b1.pushChanges({ description: `deleted child ${childId}` });
635
+ // should fail to pull and rebase changes.
636
+ await chai.expect(b2.pushChanges({ description: `deleted child ${childId} and inserted grandchild ${grandChildId}` }))
637
+ .to.be.rejectedWith("Foreign key conflicts in ChangeSet. Aborting rebase.");
638
+ });
639
+ });
640
+ //# sourceMappingURL=Rebase.test.js.map