@itwin/core-backend 5.0.0-dev.90 → 5.0.0-dev.93

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 (785) hide show
  1. package/lib/esm/BackendHubAccess.d.ts +215 -0
  2. package/lib/esm/BackendHubAccess.d.ts.map +1 -0
  3. package/lib/esm/BackendHubAccess.js +41 -0
  4. package/lib/esm/BackendHubAccess.js.map +1 -0
  5. package/lib/esm/BackendLoggerCategory.d.ts +88 -0
  6. package/lib/esm/BackendLoggerCategory.d.ts.map +1 -0
  7. package/lib/esm/BackendLoggerCategory.js +93 -0
  8. package/lib/esm/BackendLoggerCategory.js.map +1 -0
  9. package/lib/esm/BisCoreSchema.d.ts +22 -0
  10. package/lib/esm/BisCoreSchema.d.ts.map +1 -0
  11. package/lib/esm/BisCoreSchema.js +61 -0
  12. package/lib/esm/BisCoreSchema.js.map +1 -0
  13. package/lib/esm/BlobContainerService.d.ts +159 -0
  14. package/lib/esm/BlobContainerService.d.ts.map +1 -0
  15. package/lib/esm/BlobContainerService.js +15 -0
  16. package/lib/esm/BlobContainerService.js.map +1 -0
  17. package/lib/esm/BriefcaseManager.d.ts +213 -0
  18. package/lib/esm/BriefcaseManager.d.ts.map +1 -0
  19. package/lib/esm/BriefcaseManager.js +520 -0
  20. package/lib/esm/BriefcaseManager.js.map +1 -0
  21. package/lib/esm/Category.d.ts +136 -0
  22. package/lib/esm/Category.d.ts.map +1 -0
  23. package/lib/esm/Category.js +224 -0
  24. package/lib/esm/Category.js.map +1 -0
  25. package/lib/esm/ChangeSummaryManager.d.ts +161 -0
  26. package/lib/esm/ChangeSummaryManager.d.ts.map +1 -0
  27. package/lib/esm/ChangeSummaryManager.js +414 -0
  28. package/lib/esm/ChangeSummaryManager.js.map +1 -0
  29. package/lib/esm/ChangedElementsDb.d.ts +101 -0
  30. package/lib/esm/ChangedElementsDb.d.ts.map +1 -0
  31. package/lib/esm/ChangedElementsDb.js +165 -0
  32. package/lib/esm/ChangedElementsDb.js.map +1 -0
  33. package/lib/esm/ChangesetECAdaptor.d.ts +203 -0
  34. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -0
  35. package/lib/esm/ChangesetECAdaptor.js +814 -0
  36. package/lib/esm/ChangesetECAdaptor.js.map +1 -0
  37. package/lib/esm/ChannelControl.d.ts +68 -0
  38. package/lib/esm/ChannelControl.d.ts.map +1 -0
  39. package/lib/esm/ChannelControl.js +15 -0
  40. package/lib/esm/ChannelControl.js.map +1 -0
  41. package/lib/esm/CheckpointManager.d.ts +123 -0
  42. package/lib/esm/CheckpointManager.d.ts.map +1 -0
  43. package/lib/esm/CheckpointManager.js +375 -0
  44. package/lib/esm/CheckpointManager.js.map +1 -0
  45. package/lib/esm/ClassRegistry.d.ts +134 -0
  46. package/lib/esm/ClassRegistry.d.ts.map +1 -0
  47. package/lib/esm/ClassRegistry.js +324 -0
  48. package/lib/esm/ClassRegistry.js.map +1 -0
  49. package/lib/esm/CloudSqlite.d.ts +682 -0
  50. package/lib/esm/CloudSqlite.d.ts.map +1 -0
  51. package/lib/esm/CloudSqlite.js +511 -0
  52. package/lib/esm/CloudSqlite.js.map +1 -0
  53. package/lib/esm/CodeService.d.ts +402 -0
  54. package/lib/esm/CodeService.d.ts.map +1 -0
  55. package/lib/esm/CodeService.js +65 -0
  56. package/lib/esm/CodeService.js.map +1 -0
  57. package/lib/esm/CodeSpecs.d.ts +59 -0
  58. package/lib/esm/CodeSpecs.d.ts.map +1 -0
  59. package/lib/esm/CodeSpecs.js +152 -0
  60. package/lib/esm/CodeSpecs.js.map +1 -0
  61. package/lib/esm/ConcurrentQuery.d.ts +14 -0
  62. package/lib/esm/ConcurrentQuery.d.ts.map +1 -0
  63. package/lib/esm/ConcurrentQuery.js +33 -0
  64. package/lib/esm/ConcurrentQuery.js.map +1 -0
  65. package/lib/esm/CustomViewState3dCreator.d.ts +22 -0
  66. package/lib/esm/CustomViewState3dCreator.d.ts.map +1 -0
  67. package/lib/esm/CustomViewState3dCreator.js +78 -0
  68. package/lib/esm/CustomViewState3dCreator.js.map +1 -0
  69. package/lib/esm/DevTools.d.ts +73 -0
  70. package/lib/esm/DevTools.d.ts.map +1 -0
  71. package/lib/esm/DevTools.js +153 -0
  72. package/lib/esm/DevTools.js.map +1 -0
  73. package/lib/esm/DisplayStyle.d.ts +99 -0
  74. package/lib/esm/DisplayStyle.d.ts.map +1 -0
  75. package/lib/esm/DisplayStyle.js +264 -0
  76. package/lib/esm/DisplayStyle.js.map +1 -0
  77. package/lib/esm/ECDb.d.ts +170 -0
  78. package/lib/esm/ECDb.d.ts.map +1 -0
  79. package/lib/esm/ECDb.js +329 -0
  80. package/lib/esm/ECDb.js.map +1 -0
  81. package/lib/esm/ECSchemaXmlContext.d.ts +46 -0
  82. package/lib/esm/ECSchemaXmlContext.d.ts.map +1 -0
  83. package/lib/esm/ECSchemaXmlContext.js +66 -0
  84. package/lib/esm/ECSchemaXmlContext.js.map +1 -0
  85. package/lib/esm/ECSqlStatement.d.ts +492 -0
  86. package/lib/esm/ECSqlStatement.d.ts.map +1 -0
  87. package/lib/esm/ECSqlStatement.js +810 -0
  88. package/lib/esm/ECSqlStatement.js.map +1 -0
  89. package/lib/esm/Element.d.ts +987 -0
  90. package/lib/esm/Element.d.ts.map +1 -0
  91. package/lib/esm/Element.js +1337 -0
  92. package/lib/esm/Element.js.map +1 -0
  93. package/lib/esm/ElementAspect.d.ts +164 -0
  94. package/lib/esm/ElementAspect.d.ts.map +1 -0
  95. package/lib/esm/ElementAspect.js +204 -0
  96. package/lib/esm/ElementAspect.js.map +1 -0
  97. package/lib/esm/ElementGraphics.d.ts +7 -0
  98. package/lib/esm/ElementGraphics.d.ts.map +1 -0
  99. package/lib/esm/ElementGraphics.js +36 -0
  100. package/lib/esm/ElementGraphics.js.map +1 -0
  101. package/lib/esm/ElementTreeWalker.d.ts +182 -0
  102. package/lib/esm/ElementTreeWalker.d.ts.map +1 -0
  103. package/lib/esm/ElementTreeWalker.js +421 -0
  104. package/lib/esm/ElementTreeWalker.js.map +1 -0
  105. package/lib/esm/Entity.d.ts +142 -0
  106. package/lib/esm/Entity.d.ts.map +1 -0
  107. package/lib/esm/Entity.js +186 -0
  108. package/lib/esm/Entity.js.map +1 -0
  109. package/lib/esm/EntityReferences.d.ts +50 -0
  110. package/lib/esm/EntityReferences.d.ts.map +1 -0
  111. package/lib/esm/EntityReferences.js +92 -0
  112. package/lib/esm/EntityReferences.js.map +1 -0
  113. package/lib/esm/ExportGraphics.d.ts +318 -0
  114. package/lib/esm/ExportGraphics.d.ts.map +1 -0
  115. package/lib/esm/ExportGraphics.js +209 -0
  116. package/lib/esm/ExportGraphics.js.map +1 -0
  117. package/lib/esm/ExternalSource.d.ts +89 -0
  118. package/lib/esm/ExternalSource.d.ts.map +1 -0
  119. package/lib/esm/ExternalSource.js +139 -0
  120. package/lib/esm/ExternalSource.js.map +1 -0
  121. package/lib/esm/FontFile.d.ts +68 -0
  122. package/lib/esm/FontFile.d.ts.map +1 -0
  123. package/lib/esm/FontFile.js +33 -0
  124. package/lib/esm/FontFile.js.map +1 -0
  125. package/lib/esm/GeoCoordConfig.d.ts +30 -0
  126. package/lib/esm/GeoCoordConfig.d.ts.map +1 -0
  127. package/lib/esm/GeoCoordConfig.js +78 -0
  128. package/lib/esm/GeoCoordConfig.js.map +1 -0
  129. package/lib/esm/GeographicCRSServices.d.ts +40 -0
  130. package/lib/esm/GeographicCRSServices.d.ts.map +1 -0
  131. package/lib/esm/GeographicCRSServices.js +17 -0
  132. package/lib/esm/GeographicCRSServices.js.map +1 -0
  133. package/lib/esm/GeometrySummary.d.ts +5 -0
  134. package/lib/esm/GeometrySummary.d.ts.map +1 -0
  135. package/lib/esm/GeometrySummary.js +381 -0
  136. package/lib/esm/GeometrySummary.js.map +1 -0
  137. package/lib/esm/HubMock.d.ts +95 -0
  138. package/lib/esm/HubMock.d.ts.map +1 -0
  139. package/lib/esm/HubMock.js +220 -0
  140. package/lib/esm/HubMock.js.map +1 -0
  141. package/lib/esm/IModelDb.d.ts +1398 -0
  142. package/lib/esm/IModelDb.d.ts.map +1 -0
  143. package/lib/esm/IModelDb.js +3230 -0
  144. package/lib/esm/IModelDb.js.map +1 -0
  145. package/lib/esm/IModelDbFonts.d.ts +54 -0
  146. package/lib/esm/IModelDbFonts.d.ts.map +1 -0
  147. package/lib/esm/IModelDbFonts.js +9 -0
  148. package/lib/esm/IModelDbFonts.js.map +1 -0
  149. package/lib/esm/IModelElementCloneContext.d.ts +92 -0
  150. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -0
  151. package/lib/esm/IModelElementCloneContext.js +168 -0
  152. package/lib/esm/IModelElementCloneContext.js.map +1 -0
  153. package/lib/esm/IModelHost.d.ts +387 -0
  154. package/lib/esm/IModelHost.d.ts.map +1 -0
  155. package/lib/esm/IModelHost.js +502 -0
  156. package/lib/esm/IModelHost.js.map +1 -0
  157. package/lib/esm/IModelJsFs.d.ts +62 -0
  158. package/lib/esm/IModelJsFs.d.ts.map +1 -0
  159. package/lib/esm/IModelJsFs.js +151 -0
  160. package/lib/esm/IModelJsFs.js.map +1 -0
  161. package/lib/esm/ImageSourceConversion.d.ts +49 -0
  162. package/lib/esm/ImageSourceConversion.d.ts.map +1 -0
  163. package/lib/esm/ImageSourceConversion.js +33 -0
  164. package/lib/esm/ImageSourceConversion.js.map +1 -0
  165. package/lib/esm/IpcHost.d.ts +111 -0
  166. package/lib/esm/IpcHost.d.ts.map +1 -0
  167. package/lib/esm/IpcHost.js +311 -0
  168. package/lib/esm/IpcHost.js.map +1 -0
  169. package/lib/esm/LineStyle.d.ts +312 -0
  170. package/lib/esm/LineStyle.d.ts.map +1 -0
  171. package/lib/esm/LineStyle.js +293 -0
  172. package/lib/esm/LineStyle.js.map +1 -0
  173. package/lib/esm/LocalHub.d.ts +163 -0
  174. package/lib/esm/LocalHub.d.ts.map +1 -0
  175. package/lib/esm/LocalHub.js +583 -0
  176. package/lib/esm/LocalHub.js.map +1 -0
  177. package/lib/esm/LocalhostIpcHost.d.ts +22 -0
  178. package/lib/esm/LocalhostIpcHost.d.ts.map +1 -0
  179. package/lib/esm/LocalhostIpcHost.js +74 -0
  180. package/lib/esm/LocalhostIpcHost.js.map +1 -0
  181. package/lib/esm/LockControl.d.ts +73 -0
  182. package/lib/esm/LockControl.d.ts.map +1 -0
  183. package/lib/esm/LockControl.js +9 -0
  184. package/lib/esm/LockControl.js.map +1 -0
  185. package/lib/esm/Material.d.ts +131 -0
  186. package/lib/esm/Material.d.ts.map +1 -0
  187. package/lib/esm/Material.js +235 -0
  188. package/lib/esm/Material.js.map +1 -0
  189. package/lib/esm/Model.d.ts +375 -0
  190. package/lib/esm/Model.d.ts.map +1 -0
  191. package/lib/esm/Model.js +484 -0
  192. package/lib/esm/Model.js.map +1 -0
  193. package/lib/esm/NativeAppStorage.d.ts +52 -0
  194. package/lib/esm/NativeAppStorage.d.ts.map +1 -0
  195. package/lib/esm/NativeAppStorage.js +205 -0
  196. package/lib/esm/NativeAppStorage.js.map +1 -0
  197. package/lib/esm/NativeHost.d.ts +53 -0
  198. package/lib/esm/NativeHost.d.ts.map +1 -0
  199. package/lib/esm/NativeHost.js +158 -0
  200. package/lib/esm/NativeHost.js.map +1 -0
  201. package/lib/esm/NavigationRelationship.d.ts +185 -0
  202. package/lib/esm/NavigationRelationship.d.ts.map +1 -0
  203. package/lib/esm/NavigationRelationship.js +238 -0
  204. package/lib/esm/NavigationRelationship.js.map +1 -0
  205. package/lib/esm/PromiseMemoizer.d.ts +48 -0
  206. package/lib/esm/PromiseMemoizer.d.ts.map +1 -0
  207. package/lib/esm/PromiseMemoizer.js +101 -0
  208. package/lib/esm/PromiseMemoizer.js.map +1 -0
  209. package/lib/esm/PropertyStore.d.ts +134 -0
  210. package/lib/esm/PropertyStore.d.ts.map +1 -0
  211. package/lib/esm/PropertyStore.js +177 -0
  212. package/lib/esm/PropertyStore.js.map +1 -0
  213. package/lib/esm/Relationship.d.ts +399 -0
  214. package/lib/esm/Relationship.d.ts.map +1 -0
  215. package/lib/esm/Relationship.js +474 -0
  216. package/lib/esm/Relationship.js.map +1 -0
  217. package/lib/esm/RpcBackend.d.ts +6 -0
  218. package/lib/esm/RpcBackend.d.ts.map +1 -0
  219. package/lib/esm/RpcBackend.js +28 -0
  220. package/lib/esm/RpcBackend.js.map +1 -0
  221. package/lib/esm/SQLiteDb.d.ts +324 -0
  222. package/lib/esm/SQLiteDb.d.ts.map +1 -0
  223. package/lib/esm/SQLiteDb.js +379 -0
  224. package/lib/esm/SQLiteDb.js.map +1 -0
  225. package/lib/esm/Schema.d.ts +79 -0
  226. package/lib/esm/Schema.d.ts.map +1 -0
  227. package/lib/esm/Schema.js +113 -0
  228. package/lib/esm/Schema.js.map +1 -0
  229. package/lib/esm/SchemaSync.d.ts +47 -0
  230. package/lib/esm/SchemaSync.d.ts.map +1 -0
  231. package/lib/esm/SchemaSync.js +148 -0
  232. package/lib/esm/SchemaSync.js.map +1 -0
  233. package/lib/esm/SchemaUtils.d.ts +19 -0
  234. package/lib/esm/SchemaUtils.d.ts.map +1 -0
  235. package/lib/esm/SchemaUtils.js +37 -0
  236. package/lib/esm/SchemaUtils.js.map +1 -0
  237. package/lib/esm/SheetIndex.d.ts +148 -0
  238. package/lib/esm/SheetIndex.d.ts.map +1 -0
  239. package/lib/esm/SheetIndex.js +228 -0
  240. package/lib/esm/SheetIndex.js.map +1 -0
  241. package/lib/esm/SqliteChangesetReader.d.ts +278 -0
  242. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -0
  243. package/lib/esm/SqliteChangesetReader.js +337 -0
  244. package/lib/esm/SqliteChangesetReader.js.map +1 -0
  245. package/lib/esm/SqliteStatement.d.ts +375 -0
  246. package/lib/esm/SqliteStatement.d.ts.map +1 -0
  247. package/lib/esm/SqliteStatement.js +615 -0
  248. package/lib/esm/SqliteStatement.js.map +1 -0
  249. package/lib/esm/TextAnnotationElement.d.ts +54 -0
  250. package/lib/esm/TextAnnotationElement.d.ts.map +1 -0
  251. package/lib/esm/TextAnnotationElement.js +89 -0
  252. package/lib/esm/TextAnnotationElement.js.map +1 -0
  253. package/lib/esm/TextAnnotationGeometry.d.ts +32 -0
  254. package/lib/esm/TextAnnotationGeometry.d.ts.map +1 -0
  255. package/lib/esm/TextAnnotationGeometry.js +181 -0
  256. package/lib/esm/TextAnnotationGeometry.js.map +1 -0
  257. package/lib/esm/TextAnnotationLayout.d.ts +177 -0
  258. package/lib/esm/TextAnnotationLayout.d.ts.map +1 -0
  259. package/lib/esm/TextAnnotationLayout.js +513 -0
  260. package/lib/esm/TextAnnotationLayout.js.map +1 -0
  261. package/lib/esm/Texture.d.ts +58 -0
  262. package/lib/esm/Texture.d.ts.map +1 -0
  263. package/lib/esm/Texture.js +81 -0
  264. package/lib/esm/Texture.js.map +1 -0
  265. package/lib/esm/TileStorage.d.ts +59 -0
  266. package/lib/esm/TileStorage.d.ts.map +1 -0
  267. package/lib/esm/TileStorage.js +158 -0
  268. package/lib/esm/TileStorage.js.map +1 -0
  269. package/lib/esm/TxnManager.d.ts +296 -0
  270. package/lib/esm/TxnManager.d.ts.map +1 -0
  271. package/lib/esm/TxnManager.js +619 -0
  272. package/lib/esm/TxnManager.js.map +1 -0
  273. package/lib/esm/ViewDefinition.d.ts +392 -0
  274. package/lib/esm/ViewDefinition.d.ts.map +1 -0
  275. package/lib/esm/ViewDefinition.js +638 -0
  276. package/lib/esm/ViewDefinition.js.map +1 -0
  277. package/lib/esm/ViewStateHydrator.d.ts +14 -0
  278. package/lib/esm/ViewStateHydrator.d.ts.map +1 -0
  279. package/lib/esm/ViewStateHydrator.js +89 -0
  280. package/lib/esm/ViewStateHydrator.js.map +1 -0
  281. package/lib/esm/ViewStore.d.ts +502 -0
  282. package/lib/esm/ViewStore.d.ts.map +1 -0
  283. package/lib/esm/ViewStore.js +1259 -0
  284. package/lib/esm/ViewStore.js.map +1 -0
  285. package/lib/esm/core-backend.d.ts +183 -0
  286. package/lib/esm/core-backend.d.ts.map +1 -0
  287. package/lib/esm/core-backend.js +187 -0
  288. package/lib/esm/core-backend.js.map +1 -0
  289. package/lib/esm/domains/FunctionalElements.d.ts +86 -0
  290. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -0
  291. package/lib/esm/domains/FunctionalElements.js +117 -0
  292. package/lib/esm/domains/FunctionalElements.js.map +1 -0
  293. package/lib/esm/domains/FunctionalSchema.d.ts +14 -0
  294. package/lib/esm/domains/FunctionalSchema.d.ts.map +1 -0
  295. package/lib/esm/domains/FunctionalSchema.js +37 -0
  296. package/lib/esm/domains/FunctionalSchema.js.map +1 -0
  297. package/lib/esm/domains/GenericElements.d.ts +160 -0
  298. package/lib/esm/domains/GenericElements.d.ts.map +1 -0
  299. package/lib/esm/domains/GenericElements.js +225 -0
  300. package/lib/esm/domains/GenericElements.js.map +1 -0
  301. package/lib/esm/domains/GenericSchema.d.ts +11 -0
  302. package/lib/esm/domains/GenericSchema.d.ts.map +1 -0
  303. package/lib/esm/domains/GenericSchema.js +25 -0
  304. package/lib/esm/domains/GenericSchema.js.map +1 -0
  305. package/lib/esm/internal/ChangesetConflictArgs.d.ts +62 -0
  306. package/lib/esm/internal/ChangesetConflictArgs.d.ts.map +1 -0
  307. package/lib/esm/internal/ChangesetConflictArgs.js +104 -0
  308. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -0
  309. package/lib/esm/internal/ChannelAdmin.d.ts +34 -0
  310. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -0
  311. package/lib/esm/internal/ChannelAdmin.js +122 -0
  312. package/lib/esm/internal/ChannelAdmin.js.map +1 -0
  313. package/lib/esm/internal/FontFileImpl.d.ts +34 -0
  314. package/lib/esm/internal/FontFileImpl.d.ts.map +1 -0
  315. package/lib/esm/internal/FontFileImpl.js +135 -0
  316. package/lib/esm/internal/FontFileImpl.js.map +1 -0
  317. package/lib/esm/internal/IModelDbFontsImpl.d.ts +7 -0
  318. package/lib/esm/internal/IModelDbFontsImpl.d.ts.map +1 -0
  319. package/lib/esm/internal/IModelDbFontsImpl.js +183 -0
  320. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -0
  321. package/lib/esm/internal/NativePlatform.d.ts +15 -0
  322. package/lib/esm/internal/NativePlatform.d.ts.map +1 -0
  323. package/lib/esm/internal/NativePlatform.js +43 -0
  324. package/lib/esm/internal/NativePlatform.js.map +1 -0
  325. package/lib/esm/internal/NoLocks.d.ts +6 -0
  326. package/lib/esm/internal/NoLocks.d.ts.map +1 -0
  327. package/lib/esm/internal/NoLocks.js +24 -0
  328. package/lib/esm/internal/NoLocks.js.map +1 -0
  329. package/lib/esm/internal/ServerBasedLocks.d.ts +52 -0
  330. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -0
  331. package/lib/esm/internal/ServerBasedLocks.js +175 -0
  332. package/lib/esm/internal/ServerBasedLocks.js.map +1 -0
  333. package/lib/esm/internal/Symbols.d.ts +18 -0
  334. package/lib/esm/internal/Symbols.d.ts.map +1 -0
  335. package/lib/esm/internal/Symbols.js +25 -0
  336. package/lib/esm/internal/Symbols.js.map +1 -0
  337. package/lib/esm/internal/cross-package.d.ts +4 -0
  338. package/lib/esm/internal/cross-package.d.ts.map +1 -0
  339. package/lib/esm/internal/cross-package.js +8 -0
  340. package/lib/esm/internal/cross-package.js.map +1 -0
  341. package/lib/esm/internal/workspace/SettingsImpl.d.ts +43 -0
  342. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -0
  343. package/lib/esm/internal/workspace/SettingsImpl.js +154 -0
  344. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -0
  345. package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts +6 -0
  346. package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -0
  347. package/lib/esm/internal/workspace/SettingsSchemasImpl.js +268 -0
  348. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -0
  349. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +41 -0
  350. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -0
  351. package/lib/esm/internal/workspace/WorkspaceImpl.js +691 -0
  352. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -0
  353. package/lib/esm/internal/workspace/WorkspaceSqliteDb.d.ts +10 -0
  354. package/lib/esm/internal/workspace/WorkspaceSqliteDb.d.ts.map +1 -0
  355. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js +35 -0
  356. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -0
  357. package/lib/esm/rpc/multipart.d.ts +12 -0
  358. package/lib/esm/rpc/multipart.d.ts.map +1 -0
  359. package/lib/esm/rpc/multipart.js +67 -0
  360. package/lib/esm/rpc/multipart.js.map +1 -0
  361. package/lib/esm/rpc/tracing.d.ts +29 -0
  362. package/lib/esm/rpc/tracing.d.ts.map +1 -0
  363. package/lib/esm/rpc/tracing.js +71 -0
  364. package/lib/esm/rpc/tracing.js.map +1 -0
  365. package/lib/esm/rpc/web/logging.d.ts +10 -0
  366. package/lib/esm/rpc/web/logging.d.ts.map +1 -0
  367. package/lib/esm/rpc/web/logging.js +41 -0
  368. package/lib/esm/rpc/web/logging.js.map +1 -0
  369. package/lib/esm/rpc/web/request.d.ts +7 -0
  370. package/lib/esm/rpc/web/request.d.ts.map +1 -0
  371. package/lib/esm/rpc/web/request.js +71 -0
  372. package/lib/esm/rpc/web/request.js.map +1 -0
  373. package/lib/esm/rpc/web/response.d.ts +7 -0
  374. package/lib/esm/rpc/web/response.d.ts.map +1 -0
  375. package/lib/esm/rpc/web/response.js +136 -0
  376. package/lib/esm/rpc/web/response.js.map +1 -0
  377. package/lib/esm/rpc-impl/DevToolsRpcImpl.d.ts +16 -0
  378. package/lib/esm/rpc-impl/DevToolsRpcImpl.d.ts.map +1 -0
  379. package/lib/esm/rpc-impl/DevToolsRpcImpl.js +29 -0
  380. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -0
  381. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +51 -0
  382. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -0
  383. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +313 -0
  384. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -0
  385. package/lib/esm/rpc-impl/IModelTileRpcImpl.d.ts +21 -0
  386. package/lib/esm/rpc-impl/IModelTileRpcImpl.d.ts.map +1 -0
  387. package/lib/esm/rpc-impl/IModelTileRpcImpl.js +193 -0
  388. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -0
  389. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +45 -0
  390. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -0
  391. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js +166 -0
  392. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -0
  393. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +18 -0
  394. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts.map +1 -0
  395. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +41 -0
  396. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -0
  397. package/lib/esm/test/AdvancedEqual.d.ts +38 -0
  398. package/lib/esm/test/AdvancedEqual.d.ts.map +1 -0
  399. package/lib/esm/test/AdvancedEqual.js +67 -0
  400. package/lib/esm/test/AdvancedEqual.js.map +1 -0
  401. package/lib/esm/test/AttachDb.test.d.ts +2 -0
  402. package/lib/esm/test/AttachDb.test.d.ts.map +1 -0
  403. package/lib/esm/test/AttachDb.test.js +157 -0
  404. package/lib/esm/test/AttachDb.test.js.map +1 -0
  405. package/lib/esm/test/GeometryTestUtil.d.ts +7 -0
  406. package/lib/esm/test/GeometryTestUtil.d.ts.map +1 -0
  407. package/lib/esm/test/GeometryTestUtil.js +25 -0
  408. package/lib/esm/test/GeometryTestUtil.js.map +1 -0
  409. package/lib/esm/test/IModelHost.test.d.ts +2 -0
  410. package/lib/esm/test/IModelHost.test.d.ts.map +1 -0
  411. package/lib/esm/test/IModelHost.test.js +187 -0
  412. package/lib/esm/test/IModelHost.test.js.map +1 -0
  413. package/lib/esm/test/IModelTestUtils.d.ts +173 -0
  414. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -0
  415. package/lib/esm/test/IModelTestUtils.js +1113 -0
  416. package/lib/esm/test/IModelTestUtils.js.map +1 -0
  417. package/lib/esm/test/ImageSourceConversion.test.d.ts +2 -0
  418. package/lib/esm/test/ImageSourceConversion.test.d.ts.map +1 -0
  419. package/lib/esm/test/ImageSourceConversion.test.js +171 -0
  420. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -0
  421. package/lib/esm/test/IpcHost.test.d.ts +2 -0
  422. package/lib/esm/test/IpcHost.test.d.ts.map +1 -0
  423. package/lib/esm/test/IpcHost.test.js +55 -0
  424. package/lib/esm/test/IpcHost.test.js.map +1 -0
  425. package/lib/esm/test/KnownTestLocations.d.ts +7 -0
  426. package/lib/esm/test/KnownTestLocations.d.ts.map +1 -0
  427. package/lib/esm/test/KnownTestLocations.js +27 -0
  428. package/lib/esm/test/KnownTestLocations.js.map +1 -0
  429. package/lib/esm/test/PrintElementTree.d.ts +7 -0
  430. package/lib/esm/test/PrintElementTree.d.ts.map +1 -0
  431. package/lib/esm/test/PrintElementTree.js +35 -0
  432. package/lib/esm/test/PrintElementTree.js.map +1 -0
  433. package/lib/esm/test/PropertyDb.test.d.ts +2 -0
  434. package/lib/esm/test/PropertyDb.test.d.ts.map +1 -0
  435. package/lib/esm/test/PropertyDb.test.js +71 -0
  436. package/lib/esm/test/PropertyDb.test.js.map +1 -0
  437. package/lib/esm/test/RevisionUtility.d.ts +33 -0
  438. package/lib/esm/test/RevisionUtility.d.ts.map +1 -0
  439. package/lib/esm/test/RevisionUtility.js +52 -0
  440. package/lib/esm/test/RevisionUtility.js.map +1 -0
  441. package/lib/esm/test/SchemaUtils.test.d.ts +2 -0
  442. package/lib/esm/test/SchemaUtils.test.d.ts.map +1 -0
  443. package/lib/esm/test/SchemaUtils.test.js +97 -0
  444. package/lib/esm/test/SchemaUtils.test.js.map +1 -0
  445. package/lib/esm/test/SequentialLogMatcher.d.ts +35 -0
  446. package/lib/esm/test/SequentialLogMatcher.d.ts.map +1 -0
  447. package/lib/esm/test/SequentialLogMatcher.js +130 -0
  448. package/lib/esm/test/SequentialLogMatcher.js.map +1 -0
  449. package/lib/esm/test/TestChangeSetUtility.d.ts +23 -0
  450. package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -0
  451. package/lib/esm/test/TestChangeSetUtility.js +65 -0
  452. package/lib/esm/test/TestChangeSetUtility.js.map +1 -0
  453. package/lib/esm/test/TestUtils.d.ts +38 -0
  454. package/lib/esm/test/TestUtils.d.ts.map +1 -0
  455. package/lib/esm/test/TestUtils.js +99 -0
  456. package/lib/esm/test/TestUtils.js.map +1 -0
  457. package/lib/esm/test/annotations/TextAnnotation.test.d.ts +2 -0
  458. package/lib/esm/test/annotations/TextAnnotation.test.d.ts.map +1 -0
  459. package/lib/esm/test/annotations/TextAnnotation.test.js +1135 -0
  460. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -0
  461. package/lib/esm/test/categories/Category.test.d.ts +2 -0
  462. package/lib/esm/test/categories/Category.test.d.ts.map +1 -0
  463. package/lib/esm/test/categories/Category.test.js +51 -0
  464. package/lib/esm/test/categories/Category.test.js.map +1 -0
  465. package/lib/esm/test/codespec/CodeSpec.test.d.ts +2 -0
  466. package/lib/esm/test/codespec/CodeSpec.test.d.ts.map +1 -0
  467. package/lib/esm/test/codespec/CodeSpec.test.js +51 -0
  468. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -0
  469. package/lib/esm/test/ecdb/CTE.test.d.ts +2 -0
  470. package/lib/esm/test/ecdb/CTE.test.d.ts.map +1 -0
  471. package/lib/esm/test/ecdb/CTE.test.js +177 -0
  472. package/lib/esm/test/ecdb/CTE.test.js.map +1 -0
  473. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.d.ts +2 -0
  474. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.d.ts.map +1 -0
  475. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +167 -0
  476. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -0
  477. package/lib/esm/test/ecdb/ECDb.test.d.ts +2 -0
  478. package/lib/esm/test/ecdb/ECDb.test.d.ts.map +1 -0
  479. package/lib/esm/test/ecdb/ECDb.test.js +642 -0
  480. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -0
  481. package/lib/esm/test/ecdb/ECDbTestHelper.d.ts +5 -0
  482. package/lib/esm/test/ecdb/ECDbTestHelper.d.ts.map +1 -0
  483. package/lib/esm/test/ecdb/ECDbTestHelper.js +28 -0
  484. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -0
  485. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.d.ts +2 -0
  486. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.d.ts.map +1 -0
  487. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js +63 -0
  488. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -0
  489. package/lib/esm/test/ecdb/ECSqlAst.test.d.ts +5 -0
  490. package/lib/esm/test/ecdb/ECSqlAst.test.d.ts.map +1 -0
  491. package/lib/esm/test/ecdb/ECSqlAst.test.js +971 -0
  492. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -0
  493. package/lib/esm/test/ecdb/ECSqlQuery.test.d.ts +2 -0
  494. package/lib/esm/test/ecdb/ECSqlQuery.test.d.ts.map +1 -0
  495. package/lib/esm/test/ecdb/ECSqlQuery.test.js +770 -0
  496. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -0
  497. package/lib/esm/test/ecdb/ECSqlReader.test.d.ts +2 -0
  498. package/lib/esm/test/ecdb/ECSqlReader.test.d.ts.map +1 -0
  499. package/lib/esm/test/ecdb/ECSqlReader.test.js +669 -0
  500. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -0
  501. package/lib/esm/test/ecdb/ECSqlStatement.test.d.ts +2 -0
  502. package/lib/esm/test/ecdb/ECSqlStatement.test.d.ts.map +1 -0
  503. package/lib/esm/test/ecdb/ECSqlStatement.test.js +3239 -0
  504. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -0
  505. package/lib/esm/test/ecdb/SqliteStatement.test.d.ts +2 -0
  506. package/lib/esm/test/ecdb/SqliteStatement.test.d.ts.map +1 -0
  507. package/lib/esm/test/ecdb/SqliteStatement.test.js +508 -0
  508. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -0
  509. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts +4 -0
  510. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -0
  511. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +127 -0
  512. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -0
  513. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.d.ts +2 -0
  514. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.d.ts.map +1 -0
  515. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +196 -0
  516. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -0
  517. package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts +66 -0
  518. package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts.map +1 -0
  519. package/lib/esm/test/ecsql/src/ECSqlTestParser.js +420 -0
  520. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -0
  521. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.d.ts +2 -0
  522. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.d.ts.map +1 -0
  523. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +365 -0
  524. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -0
  525. package/lib/esm/test/element/DeleteDefinitionElements.test.d.ts +2 -0
  526. package/lib/esm/test/element/DeleteDefinitionElements.test.d.ts.map +1 -0
  527. package/lib/esm/test/element/DeleteDefinitionElements.test.js +208 -0
  528. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -0
  529. package/lib/esm/test/element/ElementAspect.test.d.ts +2 -0
  530. package/lib/esm/test/element/ElementAspect.test.d.ts.map +1 -0
  531. package/lib/esm/test/element/ElementAspect.test.js +363 -0
  532. package/lib/esm/test/element/ElementAspect.test.js.map +1 -0
  533. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts +2 -0
  534. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -0
  535. package/lib/esm/test/element/ElementDependencyGraph.test.js +383 -0
  536. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -0
  537. package/lib/esm/test/element/ElementRoundTrip.test.d.ts +2 -0
  538. package/lib/esm/test/element/ElementRoundTrip.test.d.ts.map +1 -0
  539. package/lib/esm/test/element/ElementRoundTrip.test.js +916 -0
  540. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -0
  541. package/lib/esm/test/element/ExcludedElements.test.d.ts +2 -0
  542. package/lib/esm/test/element/ExcludedElements.test.d.ts.map +1 -0
  543. package/lib/esm/test/element/ExcludedElements.test.js +57 -0
  544. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -0
  545. package/lib/esm/test/element/ExternalSource.test.d.ts +2 -0
  546. package/lib/esm/test/element/ExternalSource.test.d.ts.map +1 -0
  547. package/lib/esm/test/element/ExternalSource.test.js +107 -0
  548. package/lib/esm/test/element/ExternalSource.test.js.map +1 -0
  549. package/lib/esm/test/element/NullStructArray.test.d.ts +2 -0
  550. package/lib/esm/test/element/NullStructArray.test.d.ts.map +1 -0
  551. package/lib/esm/test/element/NullStructArray.test.js +77 -0
  552. package/lib/esm/test/element/NullStructArray.test.js.map +1 -0
  553. package/lib/esm/test/element/UrlLink.test.d.ts +2 -0
  554. package/lib/esm/test/element/UrlLink.test.d.ts.map +1 -0
  555. package/lib/esm/test/element/UrlLink.test.js +36 -0
  556. package/lib/esm/test/element/UrlLink.test.js.map +1 -0
  557. package/lib/esm/test/font/FontFile.test.d.ts +2 -0
  558. package/lib/esm/test/font/FontFile.test.d.ts.map +1 -0
  559. package/lib/esm/test/font/FontFile.test.js +139 -0
  560. package/lib/esm/test/font/FontFile.test.js.map +1 -0
  561. package/lib/esm/test/font/IModelDbFonts.test.d.ts +2 -0
  562. package/lib/esm/test/font/IModelDbFonts.test.d.ts.map +1 -0
  563. package/lib/esm/test/font/IModelDbFonts.test.js +264 -0
  564. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -0
  565. package/lib/esm/test/hubaccess/BriefcaseManager.test.d.ts +2 -0
  566. package/lib/esm/test/hubaccess/BriefcaseManager.test.d.ts.map +1 -0
  567. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +165 -0
  568. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -0
  569. package/lib/esm/test/hubaccess/CheckpointManager.test.d.ts +2 -0
  570. package/lib/esm/test/hubaccess/CheckpointManager.test.d.ts.map +1 -0
  571. package/lib/esm/test/hubaccess/CheckpointManager.test.js +137 -0
  572. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -0
  573. package/lib/esm/test/imageData.d.ts +9 -0
  574. package/lib/esm/test/imageData.d.ts.map +1 -0
  575. package/lib/esm/test/imageData.js +16 -0
  576. package/lib/esm/test/imageData.js.map +1 -0
  577. package/lib/esm/test/imodel/ElementTreeWalker.test.d.ts +2 -0
  578. package/lib/esm/test/imodel/ElementTreeWalker.test.d.ts.map +1 -0
  579. package/lib/esm/test/imodel/ElementTreeWalker.test.js +382 -0
  580. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -0
  581. package/lib/esm/test/imodel/GetTextureImage.test.d.ts +2 -0
  582. package/lib/esm/test/imodel/GetTextureImage.test.d.ts.map +1 -0
  583. package/lib/esm/test/imodel/GetTextureImage.test.js +29 -0
  584. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -0
  585. package/lib/esm/test/imodel/IModel.test.d.ts +2 -0
  586. package/lib/esm/test/imodel/IModel.test.d.ts.map +1 -0
  587. package/lib/esm/test/imodel/IModel.test.js +2601 -0
  588. package/lib/esm/test/imodel/IModel.test.js.map +1 -0
  589. package/lib/esm/test/imodel/ProjectExtents.test.d.ts +2 -0
  590. package/lib/esm/test/imodel/ProjectExtents.test.d.ts.map +1 -0
  591. package/lib/esm/test/imodel/ProjectExtents.test.js +66 -0
  592. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -0
  593. package/lib/esm/test/imodel/SchemaXmlImport.test.d.ts +2 -0
  594. package/lib/esm/test/imodel/SchemaXmlImport.test.d.ts.map +1 -0
  595. package/lib/esm/test/imodel/SchemaXmlImport.test.js +74 -0
  596. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -0
  597. package/lib/esm/test/index.d.ts +7 -0
  598. package/lib/esm/test/index.d.ts.map +1 -0
  599. package/lib/esm/test/index.js +11 -0
  600. package/lib/esm/test/index.js.map +1 -0
  601. package/lib/esm/test/misc/DevTools.test.d.ts +2 -0
  602. package/lib/esm/test/misc/DevTools.test.d.ts.map +1 -0
  603. package/lib/esm/test/misc/DevTools.test.js +72 -0
  604. package/lib/esm/test/misc/DevTools.test.js.map +1 -0
  605. package/lib/esm/test/misc/EntitySubClasses.test.d.ts +2 -0
  606. package/lib/esm/test/misc/EntitySubClasses.test.d.ts.map +1 -0
  607. package/lib/esm/test/misc/EntitySubClasses.test.js +106 -0
  608. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -0
  609. package/lib/esm/test/misc/GeoServices.test.d.ts +2 -0
  610. package/lib/esm/test/misc/GeoServices.test.d.ts.map +1 -0
  611. package/lib/esm/test/misc/GeoServices.test.js +850 -0
  612. package/lib/esm/test/misc/GeoServices.test.js.map +1 -0
  613. package/lib/esm/test/misc/PromiseMemoizer.test.d.ts +2 -0
  614. package/lib/esm/test/misc/PromiseMemoizer.test.d.ts.map +1 -0
  615. package/lib/esm/test/misc/PromiseMemoizer.test.js +111 -0
  616. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -0
  617. package/lib/esm/test/native/DgnDbWorker.test.d.ts +2 -0
  618. package/lib/esm/test/native/DgnDbWorker.test.d.ts.map +1 -0
  619. package/lib/esm/test/native/DgnDbWorker.test.js +159 -0
  620. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -0
  621. package/lib/esm/test/rpc/response.test.d.ts +2 -0
  622. package/lib/esm/test/rpc/response.test.d.ts.map +1 -0
  623. package/lib/esm/test/rpc/response.test.js +112 -0
  624. package/lib/esm/test/rpc/response.test.js.map +1 -0
  625. package/lib/esm/test/schema/ClassRegistry.test.d.ts +2 -0
  626. package/lib/esm/test/schema/ClassRegistry.test.d.ts.map +1 -0
  627. package/lib/esm/test/schema/ClassRegistry.test.js +679 -0
  628. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -0
  629. package/lib/esm/test/schema/FunctionalDomain.test.d.ts +2 -0
  630. package/lib/esm/test/schema/FunctionalDomain.test.d.ts.map +1 -0
  631. package/lib/esm/test/schema/FunctionalDomain.test.js +490 -0
  632. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -0
  633. package/lib/esm/test/schema/GenericDomain.test.d.ts +2 -0
  634. package/lib/esm/test/schema/GenericDomain.test.d.ts.map +1 -0
  635. package/lib/esm/test/schema/GenericDomain.test.js +132 -0
  636. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -0
  637. package/lib/esm/test/schema/IModelSchemaContext.test.d.ts +2 -0
  638. package/lib/esm/test/schema/IModelSchemaContext.test.d.ts.map +1 -0
  639. package/lib/esm/test/schema/IModelSchemaContext.test.js +95 -0
  640. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -0
  641. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +4 -0
  642. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -0
  643. package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -0
  644. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -0
  645. package/lib/esm/test/standalone/ChangeMerge.test.d.ts +2 -0
  646. package/lib/esm/test/standalone/ChangeMerge.test.d.ts.map +1 -0
  647. package/lib/esm/test/standalone/ChangeMerge.test.js +413 -0
  648. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -0
  649. package/lib/esm/test/standalone/ChangesetReader.test.d.ts +2 -0
  650. package/lib/esm/test/standalone/ChangesetReader.test.d.ts.map +1 -0
  651. package/lib/esm/test/standalone/ChangesetReader.test.js +890 -0
  652. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -0
  653. package/lib/esm/test/standalone/CustomViewState3dCreator.test.d.ts +2 -0
  654. package/lib/esm/test/standalone/CustomViewState3dCreator.test.d.ts.map +1 -0
  655. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js +49 -0
  656. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -0
  657. package/lib/esm/test/standalone/DisplayStyle.test.d.ts +2 -0
  658. package/lib/esm/test/standalone/DisplayStyle.test.d.ts.map +1 -0
  659. package/lib/esm/test/standalone/DisplayStyle.test.js +136 -0
  660. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -0
  661. package/lib/esm/test/standalone/ElementGraphics.test.d.ts +2 -0
  662. package/lib/esm/test/standalone/ElementGraphics.test.d.ts.map +1 -0
  663. package/lib/esm/test/standalone/ElementGraphics.test.js +127 -0
  664. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -0
  665. package/lib/esm/test/standalone/ElementMesh.test.d.ts +2 -0
  666. package/lib/esm/test/standalone/ElementMesh.test.d.ts.map +1 -0
  667. package/lib/esm/test/standalone/ElementMesh.test.js +142 -0
  668. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -0
  669. package/lib/esm/test/standalone/ExportGraphics.test.d.ts +2 -0
  670. package/lib/esm/test/standalone/ExportGraphics.test.d.ts.map +1 -0
  671. package/lib/esm/test/standalone/ExportGraphics.test.js +1040 -0
  672. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -0
  673. package/lib/esm/test/standalone/GeometryChangeEvents.test.d.ts +2 -0
  674. package/lib/esm/test/standalone/GeometryChangeEvents.test.d.ts.map +1 -0
  675. package/lib/esm/test/standalone/GeometryChangeEvents.test.js +139 -0
  676. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -0
  677. package/lib/esm/test/standalone/GeometryStream.test.d.ts +2 -0
  678. package/lib/esm/test/standalone/GeometryStream.test.d.ts.map +1 -0
  679. package/lib/esm/test/standalone/GeometryStream.test.js +2869 -0
  680. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -0
  681. package/lib/esm/test/standalone/HubMock.test.d.ts +2 -0
  682. package/lib/esm/test/standalone/HubMock.test.d.ts.map +1 -0
  683. package/lib/esm/test/standalone/HubMock.test.js +343 -0
  684. package/lib/esm/test/standalone/HubMock.test.js.map +1 -0
  685. package/lib/esm/test/standalone/IModelWrite.test.d.ts +7 -0
  686. package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -0
  687. package/lib/esm/test/standalone/IModelWrite.test.js +859 -0
  688. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -0
  689. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.d.ts +2 -0
  690. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.d.ts.map +1 -0
  691. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +417 -0
  692. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -0
  693. package/lib/esm/test/standalone/MergeConflict.test.d.ts +7 -0
  694. package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -0
  695. package/lib/esm/test/standalone/MergeConflict.test.js +345 -0
  696. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -0
  697. package/lib/esm/test/standalone/NativeAppStorage.test.d.ts +2 -0
  698. package/lib/esm/test/standalone/NativeAppStorage.test.d.ts.map +1 -0
  699. package/lib/esm/test/standalone/NativeAppStorage.test.js +121 -0
  700. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -0
  701. package/lib/esm/test/standalone/RenderMaterialElement.test.d.ts +2 -0
  702. package/lib/esm/test/standalone/RenderMaterialElement.test.d.ts.map +1 -0
  703. package/lib/esm/test/standalone/RenderMaterialElement.test.js +398 -0
  704. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -0
  705. package/lib/esm/test/standalone/RenderTimeline.test.d.ts +2 -0
  706. package/lib/esm/test/standalone/RenderTimeline.test.d.ts.map +1 -0
  707. package/lib/esm/test/standalone/RenderTimeline.test.js +71 -0
  708. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -0
  709. package/lib/esm/test/standalone/SQLiteDb.test.d.ts +2 -0
  710. package/lib/esm/test/standalone/SQLiteDb.test.d.ts.map +1 -0
  711. package/lib/esm/test/standalone/SQLiteDb.test.js +63 -0
  712. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -0
  713. package/lib/esm/test/standalone/SchemaUtils.test.d.ts +2 -0
  714. package/lib/esm/test/standalone/SchemaUtils.test.d.ts.map +1 -0
  715. package/lib/esm/test/standalone/SchemaUtils.test.js +25 -0
  716. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -0
  717. package/lib/esm/test/standalone/SectionDrawing.test.d.ts +2 -0
  718. package/lib/esm/test/standalone/SectionDrawing.test.d.ts.map +1 -0
  719. package/lib/esm/test/standalone/SectionDrawing.test.js +83 -0
  720. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -0
  721. package/lib/esm/test/standalone/ServerBasedLocks.test.d.ts +2 -0
  722. package/lib/esm/test/standalone/ServerBasedLocks.test.d.ts.map +1 -0
  723. package/lib/esm/test/standalone/ServerBasedLocks.test.js +279 -0
  724. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -0
  725. package/lib/esm/test/standalone/Setting.test.d.ts +2 -0
  726. package/lib/esm/test/standalone/Setting.test.d.ts.map +1 -0
  727. package/lib/esm/test/standalone/Setting.test.js +76 -0
  728. package/lib/esm/test/standalone/Setting.test.js.map +1 -0
  729. package/lib/esm/test/standalone/Settings.test.d.ts +2 -0
  730. package/lib/esm/test/standalone/Settings.test.d.ts.map +1 -0
  731. package/lib/esm/test/standalone/Settings.test.js +349 -0
  732. package/lib/esm/test/standalone/Settings.test.js.map +1 -0
  733. package/lib/esm/test/standalone/SettingsSchemas.test.d.ts +2 -0
  734. package/lib/esm/test/standalone/SettingsSchemas.test.d.ts.map +1 -0
  735. package/lib/esm/test/standalone/SettingsSchemas.test.js +31 -0
  736. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -0
  737. package/lib/esm/test/standalone/SnapshotDb.test.d.ts +2 -0
  738. package/lib/esm/test/standalone/SnapshotDb.test.d.ts.map +1 -0
  739. package/lib/esm/test/standalone/SnapshotDb.test.js +153 -0
  740. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -0
  741. package/lib/esm/test/standalone/Texture.test.d.ts +2 -0
  742. package/lib/esm/test/standalone/Texture.test.d.ts.map +1 -0
  743. package/lib/esm/test/standalone/Texture.test.js +90 -0
  744. package/lib/esm/test/standalone/Texture.test.js.map +1 -0
  745. package/lib/esm/test/standalone/TileCache.test.d.ts +9 -0
  746. package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -0
  747. package/lib/esm/test/standalone/TileCache.test.js +127 -0
  748. package/lib/esm/test/standalone/TileCache.test.js.map +1 -0
  749. package/lib/esm/test/standalone/TileTree.test.d.ts +2 -0
  750. package/lib/esm/test/standalone/TileTree.test.d.ts.map +1 -0
  751. package/lib/esm/test/standalone/TileTree.test.js +241 -0
  752. package/lib/esm/test/standalone/TileTree.test.js.map +1 -0
  753. package/lib/esm/test/standalone/TxnManager.test.d.ts +2 -0
  754. package/lib/esm/test/standalone/TxnManager.test.d.ts.map +1 -0
  755. package/lib/esm/test/standalone/TxnManager.test.js +878 -0
  756. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -0
  757. package/lib/esm/test/standalone/ViewDefinition.test.d.ts +2 -0
  758. package/lib/esm/test/standalone/ViewDefinition.test.d.ts.map +1 -0
  759. package/lib/esm/test/standalone/ViewDefinition.test.js +279 -0
  760. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -0
  761. package/lib/esm/test/standalone/ViewStoreDb.test.d.ts +2 -0
  762. package/lib/esm/test/standalone/ViewStoreDb.test.d.ts.map +1 -0
  763. package/lib/esm/test/standalone/ViewStoreDb.test.js +288 -0
  764. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -0
  765. package/lib/esm/test/standalone/Workspace.test.d.ts +2 -0
  766. package/lib/esm/test/standalone/Workspace.test.d.ts.map +1 -0
  767. package/lib/esm/test/standalone/Workspace.test.js +161 -0
  768. package/lib/esm/test/standalone/Workspace.test.js.map +1 -0
  769. package/lib/esm/workspace/Settings.d.ts +216 -0
  770. package/lib/esm/workspace/Settings.d.ts.map +1 -0
  771. package/lib/esm/workspace/Settings.js +83 -0
  772. package/lib/esm/workspace/Settings.js.map +1 -0
  773. package/lib/esm/workspace/SettingsSchemas.d.ts +135 -0
  774. package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -0
  775. package/lib/esm/workspace/SettingsSchemas.js +9 -0
  776. package/lib/esm/workspace/SettingsSchemas.js.map +1 -0
  777. package/lib/esm/workspace/Workspace.d.ts +507 -0
  778. package/lib/esm/workspace/Workspace.d.ts.map +1 -0
  779. package/lib/esm/workspace/Workspace.js +97 -0
  780. package/lib/esm/workspace/Workspace.js.map +1 -0
  781. package/lib/esm/workspace/WorkspaceEditor.d.ts +245 -0
  782. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -0
  783. package/lib/esm/workspace/WorkspaceEditor.js +31 -0
  784. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -0
  785. package/package.json +19 -15
@@ -0,0 +1,859 @@
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 { DbResult, Id64 } from "@itwin/core-bentley";
6
+ import { Code, ColorDef, IModel, LockState, QueryRowFormat, SchemaState, SubCategoryAppearance, } from "@itwin/core-common";
7
+ import { Arc3d, IModelJson, Point2d, Point3d } from "@itwin/core-geometry";
8
+ import * as chai from "chai";
9
+ import { assert, expect } from "chai";
10
+ import * as chaiAsPromised from "chai-as-promised";
11
+ import * as fs from "fs";
12
+ import * as semver from "semver";
13
+ import * as sinon from "sinon";
14
+ import { HubWrappers, KnownTestLocations } from "../";
15
+ import { DrawingCategory } from "../../Category";
16
+ import { HubMock } from "../../HubMock";
17
+ import { _nativeDb, BriefcaseDb, BriefcaseManager, ChannelControl, CodeService, DefinitionModel, DocumentListModel, Drawing, DrawingGraphic, SpatialCategory, Subject, } from "../../core-backend";
18
+ import { IModelTestUtils, TestUserType } from "../IModelTestUtils";
19
+ chai.use(chaiAsPromised);
20
+ export async function createNewModelAndCategory(rwIModel, parent) {
21
+ // Create a new physical model.
22
+ const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel"), true, parent);
23
+ // Find or create a SpatialCategory.
24
+ const dictionary = rwIModel.models.getModel(IModel.dictionaryId);
25
+ const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, "ThisTestSpatialCategory");
26
+ const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);
27
+ const spatialCategoryId = rwIModel.elements.insertElement(category.toJSON());
28
+ category.setDefaultAppearance(new SubCategoryAppearance({ color: 0xff0000 }));
29
+ // const spatialCategoryId: Id64String = SpatialCategory.insert(rwIModel, IModel.dictionaryId, newCategoryCode.value!, new SubCategoryAppearance({ color: 0xff0000 }));
30
+ return { modelId, spatialCategoryId };
31
+ }
32
+ describe("IModelWriteTest", () => {
33
+ let managerAccessToken;
34
+ let superAccessToken;
35
+ let iTwinId;
36
+ before(() => {
37
+ HubMock.startup("IModelWriteTest", KnownTestLocations.outputDir);
38
+ iTwinId = HubMock.iTwinId;
39
+ });
40
+ after(() => HubMock.shutdown());
41
+ it("Check busyTimeout option", async () => {
42
+ const iModelProps = {
43
+ iModelName: "ReadWriteTest",
44
+ iTwinId,
45
+ };
46
+ const iModelId = await HubMock.createNewIModel(iModelProps);
47
+ const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: "test token", iTwinId, iModelId });
48
+ const tryOpen = async (args) => {
49
+ const start = performance.now();
50
+ let didThrow = false;
51
+ try {
52
+ await BriefcaseDb.open(args);
53
+ }
54
+ catch (e) {
55
+ assert.strictEqual(e.errorNumber, DbResult.BE_SQLITE_BUSY, "Expect error 'Db is busy'");
56
+ didThrow = true;
57
+ }
58
+ assert.isTrue(didThrow);
59
+ return performance.now() - start;
60
+ };
61
+ const seconds = (s) => s * 1000;
62
+ const db = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
63
+ db.saveChanges();
64
+ // lock db so another connection cannot write to it.
65
+ db.saveFileProperty({ name: "test", namespace: "test" }, "");
66
+ assert.isAtMost(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(0) }), seconds(1), "open should fail with busy error instantly");
67
+ assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(1) }), seconds(1), "open should fail with atleast 1 sec delay due to retry");
68
+ assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(2) }), seconds(2), "open should fail with atleast 2 sec delay due to retry");
69
+ assert.isAtLeast(await tryOpen({ fileName: briefcaseProps.fileName, busyTimeout: seconds(3) }), seconds(3), "open should fail with atleast 3 sec delay due to retry");
70
+ db.abandonChanges();
71
+ db.close();
72
+ });
73
+ it("WatchForChanges", async () => {
74
+ const iModelProps = {
75
+ iModelName: "ReadWriteTest",
76
+ iTwinId,
77
+ };
78
+ const iModelId = await HubMock.createNewIModel(iModelProps);
79
+ const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: "test token", iTwinId, iModelId });
80
+ let nClosed = 0;
81
+ const fsWatcher = {
82
+ callback: () => { },
83
+ close: () => ++nClosed,
84
+ };
85
+ const watchStub = (_filename, _opts, fn) => {
86
+ fsWatcher.callback = fn;
87
+ return fsWatcher;
88
+ };
89
+ sinon.stub(fs, "watch").callsFake(watchStub);
90
+ const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
91
+ bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
92
+ const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
93
+ const code1 = IModelTestUtils.getUniqueModelCode(bc, "newPhysicalModel1");
94
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc, code1, true);
95
+ bc.saveChanges();
96
+ // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected
97
+ // in the readonly briefcase until the file watcher fires.
98
+ expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());
99
+ // trigger watcher via stub
100
+ fsWatcher.callback();
101
+ // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection
102
+ expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());
103
+ roBC.close();
104
+ expect(nClosed).equal(1);
105
+ bc.close();
106
+ sinon.restore();
107
+ });
108
+ function expectEqualChangesets(a, b) {
109
+ expect(a.id).to.equal(b.id);
110
+ expect(a.index).to.equal(b.index);
111
+ }
112
+ it("WatchForChanges - push", async () => {
113
+ const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);
114
+ const iModelProps = {
115
+ iModelName: "ReadWriteTest",
116
+ iTwinId,
117
+ };
118
+ const iModelId = await HubMock.createNewIModel(iModelProps);
119
+ const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, iTwinId, iModelId });
120
+ let nClosed = 0;
121
+ const fsWatcher = {
122
+ callback: () => { },
123
+ close: () => ++nClosed,
124
+ };
125
+ const watchStub = (_filename, _opts, fn) => {
126
+ fsWatcher.callback = fn;
127
+ return fsWatcher;
128
+ };
129
+ sinon.stub(fs, "watch").callsFake(watchStub);
130
+ const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
131
+ bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
132
+ const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
133
+ const code1 = IModelTestUtils.getUniqueModelCode(bc, "newPhysicalModel1");
134
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc, code1, true);
135
+ bc.saveChanges();
136
+ // immediately after save changes the current txnId in the writeable briefcase changes, but it isn't reflected
137
+ // in the readonly briefcase until the file watcher fires.
138
+ expect(bc[_nativeDb].getCurrentTxnId()).not.equal(roBC[_nativeDb].getCurrentTxnId());
139
+ // trigger watcher via stub
140
+ fsWatcher.callback();
141
+ // now they should match because restartDefaultTxn in the readonly briefcase reads the changes from the writeable connection
142
+ expect(bc[_nativeDb].getCurrentTxnId()).equal(roBC[_nativeDb].getCurrentTxnId());
143
+ // Push the changes to the hub
144
+ const prePushChangeset = bc.changeset;
145
+ let eventRaised = false;
146
+ roBC.onChangesetChanged.addOnce((prevCS) => {
147
+ expectEqualChangesets(prevCS, prePushChangeset);
148
+ eventRaised = true;
149
+ });
150
+ await bc.pushChanges({ accessToken: adminAccessToken, description: "test" });
151
+ const postPushChangeset = bc.changeset;
152
+ assert(!!postPushChangeset);
153
+ expect(prePushChangeset !== postPushChangeset, "changes should be pushed");
154
+ // trigger watcher via stub
155
+ fsWatcher.callback();
156
+ expectEqualChangesets(roBC.changeset, postPushChangeset);
157
+ expect(roBC[_nativeDb].getCurrentTxnId(), "txn should be updated").equal(bc[_nativeDb].getCurrentTxnId());
158
+ expect(eventRaised).to.be.true;
159
+ roBC.close();
160
+ expect(nClosed).equal(1);
161
+ bc.close();
162
+ sinon.restore();
163
+ });
164
+ it("WatchForChanges - pull", async () => {
165
+ const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);
166
+ const pathname = IModelTestUtils.resolveAssetFile("CompatibilityTestSeed.bim");
167
+ const hubName = "CompatibilityTest";
168
+ const iModelId = await HubWrappers.pushIModel(managerAccessToken, iTwinId, pathname, hubName, true);
169
+ // Download two copies of the briefcase - manager and super
170
+ const args = { iTwinId, iModelId };
171
+ const initialDb = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, ...args });
172
+ const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: adminAccessToken, ...args });
173
+ // Push some changes - prep for pull workflow.
174
+ const bc1 = await BriefcaseDb.open({ fileName: initialDb.fileName });
175
+ bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);
176
+ const code2 = IModelTestUtils.getUniqueModelCode(bc1, "newPhysicalModel2");
177
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(bc1, code2, true);
178
+ const prePushChangeset = bc1.changeset;
179
+ bc1.saveChanges();
180
+ await bc1.pushChanges({ accessToken: adminAccessToken, description: "test" });
181
+ const postPushChangeset = bc1.changeset;
182
+ assert(!!prePushChangeset);
183
+ expect(prePushChangeset !== postPushChangeset, "changes should be pushed");
184
+ bc1.close();
185
+ // Writer that pulls + watcher.
186
+ let nClosed = 0;
187
+ const fsWatcher = {
188
+ callback: () => { },
189
+ close: () => ++nClosed,
190
+ };
191
+ const watchStub = (_filename, _opts, fn) => {
192
+ fsWatcher.callback = fn;
193
+ return fsWatcher;
194
+ };
195
+ sinon.stub(fs, "watch").callsFake(watchStub);
196
+ const bc = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
197
+ bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
198
+ const roBC = await BriefcaseDb.open({ fileName: briefcaseProps.fileName, watchForChanges: true });
199
+ const prePullChangeset = bc.changeset;
200
+ let eventRaised = false;
201
+ roBC.onChangesetChanged.addOnce((prevCS) => {
202
+ expectEqualChangesets(prevCS, prePushChangeset);
203
+ eventRaised = true;
204
+ });
205
+ await bc.pullChanges();
206
+ const postPullChangeset = bc.changeset;
207
+ assert(!!postPullChangeset);
208
+ expect(prePullChangeset !== postPullChangeset, "changes should be pulled");
209
+ // trigger watcher via stub
210
+ fsWatcher.callback();
211
+ expectEqualChangesets(roBC.changeset, postPullChangeset);
212
+ expect(roBC[_nativeDb].getCurrentTxnId(), "txn should be updated").equal(bc[_nativeDb].getCurrentTxnId());
213
+ expect(eventRaised).to.be.true;
214
+ roBC.close();
215
+ expect(nClosed).equal(1);
216
+ bc.close();
217
+ sinon.restore();
218
+ });
219
+ it("should handle undo/redo", async () => {
220
+ const adminAccessToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);
221
+ // Delete any existing iModels with the same name as the read-write test iModel
222
+ const iModelName = "CodesUndoRedoPushTest";
223
+ // Create a new empty iModel on the Hub & obtain a briefcase
224
+ const rwIModelId = await HubMock.createNewIModel({ accessToken: adminAccessToken, iTwinId, iModelName, description: "TestSubject" });
225
+ assert.isNotEmpty(rwIModelId);
226
+ const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ accessToken: adminAccessToken, iTwinId, iModelId: rwIModelId });
227
+ rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
228
+ // create and insert a new model with code1
229
+ const code1 = IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel1");
230
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, code1, true);
231
+ assert.isTrue(rwIModel.elements.getElement(code1) !== undefined); // throws if element is not found
232
+ // create a local txn with that change
233
+ rwIModel.saveChanges("inserted newPhysicalModel");
234
+ // Reverse that local txn
235
+ rwIModel.txns.reverseSingleTxn();
236
+ try {
237
+ // The model that I just created with code1 should no longer be there.
238
+ const theNewModel = rwIModel.elements.getElement(code1); // throws if element is not found
239
+ assert.isTrue(theNewModel === undefined); // really should not be here.
240
+ assert.fail(); // should not be here.
241
+ }
242
+ catch {
243
+ // this is what I expect
244
+ }
245
+ // Create and insert a model with code2
246
+ const code2 = IModelTestUtils.getUniqueModelCode(rwIModel, "newPhysicalModel2");
247
+ await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, code2, true);
248
+ rwIModel.saveChanges("inserted generic objects");
249
+ // The iModel should have a model with code1 and not code2
250
+ assert.isTrue(rwIModel.elements.getElement(code2) !== undefined); // throws if element is not found
251
+ // Push the changes to the hub
252
+ const prePushChangeset = rwIModel.changeset;
253
+ await rwIModel.pushChanges({ accessToken: adminAccessToken, description: "test" });
254
+ const postPushChangeset = rwIModel.changeset;
255
+ assert(!!postPushChangeset);
256
+ expect(prePushChangeset !== postPushChangeset);
257
+ rwIModel.close();
258
+ });
259
+ it("should be able to upgrade a briefcase with an older schema", async () => {
260
+ /**
261
+ * Test validates that -
262
+ * - User "manager" upgrades the BisCore schema in the briefcase from version 1.0.0 to 1.0.10+
263
+ * - User "super" can get the upgrade "manager" made
264
+ */
265
+ /* Setup test - Push an iModel with an old BisCore schema up to the Hub */
266
+ const pathname = IModelTestUtils.resolveAssetFile("CompatibilityTestSeed.bim");
267
+ const hubName = "CompatibilityTest";
268
+ const iModelId = await HubWrappers.pushIModel(managerAccessToken, iTwinId, pathname, hubName, true);
269
+ // Download two copies of the briefcase - manager and super
270
+ const args = { iTwinId, iModelId };
271
+ const managerBriefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: managerAccessToken, ...args });
272
+ const superBriefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: superAccessToken, ...args });
273
+ /* User "manager" upgrades the briefcase */
274
+ // Validate the original state of the BisCore schema in the briefcase
275
+ let iModel = await BriefcaseDb.open({ fileName: managerBriefcaseProps.fileName });
276
+ const beforeVersion = iModel.querySchemaVersion("BisCore");
277
+ assert.isTrue(semver.satisfies(beforeVersion, "= 1.0.0"));
278
+ assert.isFalse(iModel[_nativeDb].hasPendingTxns());
279
+ iModel.close();
280
+ // Validate that the BisCore schema is recognized as a recommended upgrade
281
+ let schemaState = BriefcaseDb.validateSchemas(managerBriefcaseProps.fileName, true);
282
+ assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);
283
+ // Upgrade the schemas
284
+ await BriefcaseDb.upgradeSchemas(managerBriefcaseProps);
285
+ // Validate state after upgrade
286
+ iModel = await BriefcaseDb.open({ fileName: managerBriefcaseProps.fileName });
287
+ const afterVersion = iModel.querySchemaVersion("BisCore");
288
+ assert.isTrue(semver.satisfies(afterVersion, ">= 1.0.10"));
289
+ assert.isFalse(iModel[_nativeDb].hasPendingTxns());
290
+ assert.isFalse(iModel.holdsSchemaLock);
291
+ assert.isFalse(iModel[_nativeDb].hasUnsavedChanges());
292
+ iModel.close();
293
+ /* User "super" can get the upgrade "manager" made */
294
+ // Validate that the BisCore schema is recognized as a recommended upgrade
295
+ schemaState = BriefcaseDb.validateSchemas(superBriefcaseProps.fileName, true);
296
+ assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);
297
+ // Open briefcase and pull change sets to upgrade
298
+ const superIModel = await BriefcaseDb.open({ fileName: superBriefcaseProps.fileName });
299
+ superBriefcaseProps.changeset = await superIModel.pullChanges({ accessToken: superAccessToken });
300
+ const superVersion = superIModel.querySchemaVersion("BisCore");
301
+ assert.isTrue(semver.satisfies(superVersion, ">= 1.0.10"));
302
+ assert.isFalse(superIModel[_nativeDb].hasUnsavedChanges()); // Validate no changes were made
303
+ assert.isFalse(superIModel[_nativeDb].hasPendingTxns()); // Validate no changes were made
304
+ superIModel.close();
305
+ // Validate that there are no upgrades required
306
+ schemaState = BriefcaseDb.validateSchemas(superBriefcaseProps.fileName, true);
307
+ assert.strictEqual(schemaState, SchemaState.UpToDate);
308
+ // Upgrade the schemas - ensure this is a no-op
309
+ await BriefcaseDb.upgradeSchemas(superBriefcaseProps);
310
+ await HubMock.deleteIModel({ accessToken: managerAccessToken, iTwinId, iModelId });
311
+ });
312
+ it("changeset size and ec schema version change", async () => {
313
+ const adminToken = "super manager token";
314
+ const iModelName = "changeset_size";
315
+ const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject", accessToken: adminToken });
316
+ assert.isNotEmpty(rwIModelId);
317
+ const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });
318
+ assert.equal(rwIModel[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);
319
+ const schema = `<?xml version="1.0" encoding="UTF-8"?>
320
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
321
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
322
+ <ECEntityClass typeName="Test2dElement">
323
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
324
+ <ECProperty propertyName="s" typeName="string"/>
325
+ </ECEntityClass>
326
+ </ECSchema>`;
327
+ await rwIModel.importSchemaStrings([schema]);
328
+ rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
329
+ rwIModel.saveChanges("user 1: schema changeset");
330
+ if (true || "push changes") {
331
+ // Push the changes to the hub
332
+ const prePushChangeSetId = rwIModel.changeset.id;
333
+ await rwIModel.pushChanges({ description: "push schema changeset", accessToken: adminToken });
334
+ const postPushChangeSetId = rwIModel.changeset.id;
335
+ assert(!!postPushChangeSetId);
336
+ expect(prePushChangeSetId !== postPushChangeSetId);
337
+ const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });
338
+ assert.equal(changesets.length, 1);
339
+ }
340
+ await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });
341
+ const codeProps = Code.createEmpty();
342
+ codeProps.value = "DrawingModel";
343
+ let totalEl = 0;
344
+ const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);
345
+ let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, "MyDrawingCategory");
346
+ if (undefined === drawingCategoryId)
347
+ drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, "MyDrawingCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
348
+ const insertElements = (imodel, className = "Test2dElement", noOfElements = 10, userProp) => {
349
+ for (let m = 0; m < noOfElements; ++m) {
350
+ const geomArray = [
351
+ Arc3d.createXY(Point3d.create(0, 0), 5),
352
+ Arc3d.createXY(Point3d.create(5, 5), 2),
353
+ Arc3d.createXY(Point3d.create(-5, -5), 20),
354
+ ];
355
+ const geometryStream = [];
356
+ for (const geom of geomArray) {
357
+ const arcData = IModelJson.Writer.toIModelJson(geom);
358
+ geometryStream.push(arcData);
359
+ }
360
+ const prop = userProp(++totalEl);
361
+ // Create props
362
+ const geomElement = {
363
+ classFullName: `TestDomain:${className}`,
364
+ model: drawingModelId,
365
+ category: drawingCategoryId,
366
+ code: Code.createEmpty(),
367
+ geom: geometryStream,
368
+ ...prop,
369
+ };
370
+ const id = imodel.elements.insertElement(geomElement);
371
+ assert.isTrue(Id64.isValidId64(id), "insert worked");
372
+ }
373
+ };
374
+ const str = new Array(1024).join("x");
375
+ insertElements(rwIModel, "Test2dElement", 1024, () => {
376
+ return { s: str };
377
+ });
378
+ assert.equal(1357648, rwIModel[_nativeDb].getChangesetSize());
379
+ rwIModel.saveChanges("user 1: data");
380
+ assert.equal(0, rwIModel[_nativeDb].getChangesetSize());
381
+ await rwIModel.pushChanges({ description: "schema changeset", accessToken: adminToken });
382
+ rwIModel.close();
383
+ });
384
+ it("should set a fake verifyCode for codeService that throws error for operations that affect code, if failed to open codeService ", async () => {
385
+ const iModelProps = {
386
+ iModelName: "codeServiceTest",
387
+ iTwinId,
388
+ };
389
+ const iModelId = await HubMock.createNewIModel(iModelProps);
390
+ const briefcaseProps = await BriefcaseManager.downloadBriefcase({ accessToken: "codeServiceTest", iTwinId, iModelId });
391
+ const originalCreateForIModel = CodeService.createForIModel;
392
+ // can be any errors except 'NoCodeIndex'
393
+ CodeService.createForIModel = async () => {
394
+ throw new CodeService.Error("MissingCode", 0x10000 + 1, " ");
395
+ };
396
+ const briefcaseDb = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
397
+ briefcaseDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);
398
+ let firstNonRootElement = { id: undefined, codeValue: "test" };
399
+ briefcaseDb.withPreparedStatement("SELECT * from Bis.Element LIMIT 1 OFFSET 1", (stmt) => {
400
+ if (stmt.step() === DbResult.BE_SQLITE_ROW) {
401
+ firstNonRootElement = stmt.getRow();
402
+ }
403
+ });
404
+ // make change to the briefcaseDb that does not affect code, e.g., save file property
405
+ // expect no error from verifyCode
406
+ expect(() => briefcaseDb.saveFileProperty({ name: "codeServiceProp", namespace: "codeService", id: 1, subId: 1 }, "codeService test")).to.not.throw();
407
+ // make change to the briefcaseDb that affects code that will invoke verifyCode, e.g., update an element with a non-null code
408
+ // expect error from verifyCode
409
+ let newProps = { id: firstNonRootElement.id, code: { ...Code.createEmpty(), value: firstNonRootElement.codeValue }, classFullName: undefined, model: undefined };
410
+ await briefcaseDb.locks.acquireLocks({ exclusive: firstNonRootElement.id });
411
+ expect(() => briefcaseDb.elements.updateElement(newProps)).to.throw(CodeService.Error);
412
+ // make change to the briefcaseDb that will invoke verifyCode with a null(empty) code, e.g., update an element with a null(empty) code
413
+ // expect no error from verifyCode
414
+ newProps = { id: firstNonRootElement.id, code: Code.createEmpty(), classFullName: undefined, model: undefined };
415
+ expect(() => briefcaseDb.elements.updateElement(newProps)).to.not.throw();
416
+ briefcaseDb.close();
417
+ // throw "NoCodeIndex", this error should get ignored because it means the iModel isn't enforcing codes. updating an element with an empty code and a non empty code should work without issue.
418
+ CodeService.createForIModel = async () => {
419
+ throw new CodeService.Error("NoCodeIndex", 0x10000 + 1, " ");
420
+ };
421
+ const briefcaseDb2 = await BriefcaseDb.open({ fileName: briefcaseProps.fileName });
422
+ briefcaseDb2.channels.addAllowedChannel(ChannelControl.sharedChannelName);
423
+ await briefcaseDb2.locks.acquireLocks({ exclusive: firstNonRootElement.id });
424
+ // expect no error from verifyCode for empty code
425
+ expect(() => briefcaseDb2.elements.updateElement(newProps)).to.not.throw();
426
+ newProps = { id: firstNonRootElement.id, code: { ...Code.createEmpty(), value: firstNonRootElement.codeValue }, classFullName: undefined, model: undefined };
427
+ // make change to the briefcaseDb that affects code that will invoke verifyCode, e.g., update an element with a non-null code
428
+ // expect no error from verifyCode
429
+ expect(() => briefcaseDb2.elements.updateElement(newProps)).to.not.throw();
430
+ // clean up
431
+ CodeService.createForIModel = originalCreateForIModel;
432
+ briefcaseDb2.close();
433
+ });
434
+ it("clear cache on schema changes", async () => {
435
+ const adminToken = await HubWrappers.getAccessToken(TestUserType.SuperManager);
436
+ const userToken = await HubWrappers.getAccessToken(TestUserType.Super);
437
+ // Delete any existing iModels with the same name as the OptimisticConcurrencyTest iModel
438
+ const iModelName = "SchemaChanges";
439
+ // Create a new empty iModel on the Hub & obtain a briefcase
440
+ const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject" });
441
+ assert.isNotEmpty(rwIModelId);
442
+ const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });
443
+ const rwIModel2 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: userToken });
444
+ // enable change tracking
445
+ assert.equal(rwIModel[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);
446
+ assert.equal(rwIModel2[_nativeDb].enableChangesetSizeStats(true), DbResult.BE_SQLITE_OK);
447
+ const schema = `<?xml version="1.0" encoding="UTF-8"?>
448
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
449
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
450
+ <ECEntityClass typeName="Test2dElement">
451
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
452
+ <ECProperty propertyName="s" typeName="string"/>
453
+ </ECEntityClass>
454
+ </ECSchema>`;
455
+ await rwIModel.importSchemaStrings([schema]);
456
+ rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
457
+ rwIModel2.channels.addAllowedChannel(ChannelControl.sharedChannelName);
458
+ rwIModel.saveChanges("user 1: schema changeset");
459
+ if (true || "push changes") {
460
+ // Push the changes to the hub
461
+ const prePushChangeSetId = rwIModel.changeset.id;
462
+ await rwIModel.pushChanges({ description: "schema changeset", accessToken: adminToken });
463
+ const postPushChangeSetId = rwIModel.changeset.id;
464
+ assert(!!postPushChangeSetId);
465
+ expect(prePushChangeSetId !== postPushChangeSetId);
466
+ const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });
467
+ assert.equal(changesets.length, 1);
468
+ }
469
+ const codeProps = Code.createEmpty();
470
+ codeProps.value = "DrawingModel";
471
+ let totalEl = 0;
472
+ await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });
473
+ const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);
474
+ let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, "MyDrawingCategory");
475
+ if (undefined === drawingCategoryId)
476
+ drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, "MyDrawingCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
477
+ const insertElements = (imodel, className = "Test2dElement", noOfElements = 10, userProp) => {
478
+ for (let m = 0; m < noOfElements; ++m) {
479
+ const geomArray = [
480
+ Arc3d.createXY(Point3d.create(0, 0), 5),
481
+ Arc3d.createXY(Point3d.create(5, 5), 2),
482
+ Arc3d.createXY(Point3d.create(-5, -5), 20),
483
+ ];
484
+ const geometryStream = [];
485
+ for (const geom of geomArray) {
486
+ const arcData = IModelJson.Writer.toIModelJson(geom);
487
+ geometryStream.push(arcData);
488
+ }
489
+ const prop = userProp(++totalEl);
490
+ // Create props
491
+ const geomElement = {
492
+ classFullName: `TestDomain:${className}`,
493
+ model: drawingModelId,
494
+ category: drawingCategoryId,
495
+ code: Code.createEmpty(),
496
+ geom: geometryStream,
497
+ ...prop,
498
+ };
499
+ const id = imodel.elements.insertElement(geomElement);
500
+ assert.isTrue(Id64.isValidId64(id), "insert worked");
501
+ }
502
+ };
503
+ insertElements(rwIModel, "Test2dElement", 10, (n) => {
504
+ return { s: `s-${n}` };
505
+ });
506
+ assert.equal(3889, rwIModel[_nativeDb].getChangesetSize());
507
+ rwIModel.saveChanges("user 1: data changeset");
508
+ if (true || "push changes") {
509
+ // Push the changes to the hub
510
+ const prePushChangeSetId = rwIModel.changeset.id;
511
+ await rwIModel.pushChanges({ description: "10 instances of test2dElement", accessToken: adminToken });
512
+ const postPushChangeSetId = rwIModel.changeset.id;
513
+ assert(!!postPushChangeSetId);
514
+ expect(prePushChangeSetId !== postPushChangeSetId);
515
+ const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });
516
+ assert.equal(changesets.length, 2);
517
+ }
518
+ let rows = [];
519
+ rwIModel.withPreparedStatement("SELECT * FROM TestDomain.Test2dElement", (stmt) => {
520
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
521
+ rows.push(stmt.getRow());
522
+ }
523
+ });
524
+ assert.equal(rows.length, 10);
525
+ assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);
526
+ rows = [];
527
+ for await (const queryRow of rwIModel.createQueryReader("SELECT * FROM TestDomain.Test2dElement", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
528
+ rows.push(queryRow.toRow());
529
+ }
530
+ assert.equal(rows.length, 10);
531
+ assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);
532
+ if (true || "user pull/merge") {
533
+ // pull and merge changes
534
+ await rwIModel2.pullChanges({ accessToken: userToken });
535
+ rows = [];
536
+ rwIModel2.withPreparedStatement("SELECT * FROM TestDomain.Test2dElement", (stmt) => {
537
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
538
+ rows.push(stmt.getRow());
539
+ }
540
+ });
541
+ assert.equal(rows.length, 10);
542
+ assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);
543
+ rows = [];
544
+ for await (const queryRow of rwIModel2.createQueryReader("SELECT * FROM TestDomain.Test2dElement", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
545
+ rows.push(queryRow.toRow());
546
+ }
547
+ assert.equal(rows.length, 10);
548
+ assert.equal(rows.map((r) => r.s).filter((v) => v).length, 10);
549
+ // create some element and push those changes
550
+ await rwIModel2.locks.acquireLocks({ shared: drawingModelId });
551
+ insertElements(rwIModel2, "Test2dElement", 10, (n) => {
552
+ return { s: `s-${n}` };
553
+ });
554
+ assert.equal(0, rwIModel[_nativeDb].getChangesetSize());
555
+ rwIModel2.saveChanges("user 2: data changeset");
556
+ if (true || "push changes") {
557
+ // Push the changes to the hub
558
+ const prePushChangeSetId = rwIModel2.changeset.id;
559
+ await rwIModel2.pushChanges({ accessToken: userToken, description: "10 instances of test2dElement" });
560
+ const postPushChangeSetId = rwIModel2.changeset.id;
561
+ assert(!!postPushChangeSetId);
562
+ expect(prePushChangeSetId !== postPushChangeSetId);
563
+ const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: userToken });
564
+ assert.equal(changesets.length, 3);
565
+ }
566
+ }
567
+ await rwIModel.pullChanges({ accessToken: adminToken });
568
+ // second schema import ==============================================================
569
+ const schemaV2 = `<?xml version="1.0" encoding="UTF-8"?>
570
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
571
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
572
+ <ECEntityClass typeName="Test2dElement">
573
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
574
+ <ECProperty propertyName="s" typeName="string"/>
575
+ <ECProperty propertyName="v" typeName="string"/>
576
+ </ECEntityClass>
577
+ <ECEntityClass typeName="Test2dElement2nd">
578
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
579
+ <ECProperty propertyName="t" typeName="string"/>
580
+ <ECProperty propertyName="r" typeName="string"/>
581
+ </ECEntityClass>
582
+ </ECSchema>`;
583
+ await rwIModel.importSchemaStrings([schemaV2]);
584
+ assert.equal(0, rwIModel[_nativeDb].getChangesetSize());
585
+ rwIModel.saveChanges("user 1: schema changeset2");
586
+ if (true || "push changes") {
587
+ // Push the changes to the hub
588
+ const prePushChangeSetId = rwIModel.changeset.id;
589
+ await rwIModel.pushChanges({ accessToken: adminToken, description: "schema changeset" });
590
+ const postPushChangeSetId = rwIModel.changeset.id;
591
+ assert(!!postPushChangeSetId);
592
+ expect(prePushChangeSetId !== postPushChangeSetId);
593
+ const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });
594
+ assert.equal(changesets.length, 4);
595
+ }
596
+ // create some element and push those changes
597
+ await rwIModel.locks.acquireLocks({ shared: drawingModelId });
598
+ insertElements(rwIModel, "Test2dElement", 10, (n) => {
599
+ return {
600
+ s: `s-${n}`, v: `v-${n}`,
601
+ };
602
+ });
603
+ // create some element and push those changes
604
+ insertElements(rwIModel, "Test2dElement2nd", 10, (n) => {
605
+ return {
606
+ t: `t-${n}`, r: `r-${n}`,
607
+ };
608
+ });
609
+ assert.equal(6266, rwIModel[_nativeDb].getChangesetSize());
610
+ rwIModel.saveChanges("user 1: data changeset");
611
+ if (true || "push changes") {
612
+ // Push the changes to the hub
613
+ const prePushChangeSetId = rwIModel.changeset.id;
614
+ await rwIModel.pushChanges({ accessToken: adminToken, description: "10 instances of test2dElement" });
615
+ const postPushChangeSetId = rwIModel.changeset.id;
616
+ assert(!!postPushChangeSetId);
617
+ expect(prePushChangeSetId !== postPushChangeSetId);
618
+ const changesets = await HubMock.queryChangesets({ iModelId: rwIModelId, accessToken: superAccessToken });
619
+ assert.equal(changesets.length, 5);
620
+ }
621
+ rows = [];
622
+ rwIModel.withPreparedStatement("SELECT * FROM TestDomain.Test2dElement", (stmt) => {
623
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
624
+ rows.push(stmt.getRow());
625
+ }
626
+ });
627
+ assert.equal(rows.length, 30);
628
+ assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);
629
+ assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);
630
+ rows = [];
631
+ for await (const queryRow of rwIModel.createQueryReader("SELECT * FROM TestDomain.Test2dElement", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
632
+ rows.push(queryRow.toRow());
633
+ }
634
+ assert.equal(rows.length, 30);
635
+ assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);
636
+ assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);
637
+ rows = [];
638
+ rwIModel.withPreparedStatement("SELECT * FROM TestDomain.Test2dElement2nd", (stmt) => {
639
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
640
+ rows.push(stmt.getRow());
641
+ }
642
+ });
643
+ assert.equal(rows.length, 10);
644
+ assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);
645
+ assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);
646
+ rows = [];
647
+ for await (const queryRow of rwIModel.createQueryReader("SELECT * FROM TestDomain.Test2dElement2nd", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
648
+ rows.push(queryRow.toRow());
649
+ }
650
+ assert.equal(rows.length, 10);
651
+ assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);
652
+ assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);
653
+ if (true || "user pull/merge") {
654
+ // pull and merge changes
655
+ await rwIModel2.pullChanges({ accessToken: userToken });
656
+ rows = [];
657
+ // Following fail without the fix in briefcase manager where we clear statement cache on schema changeset apply
658
+ rwIModel2.withPreparedStatement("SELECT * FROM TestDomain.Test2dElement", (stmt) => {
659
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
660
+ rows.push(stmt.getRow());
661
+ }
662
+ });
663
+ assert.equal(rows.length, 30);
664
+ assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);
665
+ assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);
666
+ rows = [];
667
+ // Following fail without native side fix where we clear concurrent query cache on schema changeset apply
668
+ for await (const queryRow of rwIModel2.createQueryReader("SELECT * FROM TestDomain.Test2dElement", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
669
+ rows.push(queryRow.toRow());
670
+ }
671
+ assert.equal(rows.length, 30);
672
+ assert.equal(rows.map((r) => r.s).filter((v) => v).length, 30);
673
+ assert.equal(rows.map((r) => r.v).filter((v) => v).length, 10);
674
+ for (const row of rows) {
675
+ const el = rwIModel2.elements.getElementProps(row.id);
676
+ assert.isDefined(el);
677
+ if (row.s) {
678
+ assert.equal(row.s, el.s);
679
+ }
680
+ else {
681
+ assert.isUndefined(el.s);
682
+ }
683
+ if (row.v) {
684
+ assert.equal(row.v, el.v);
685
+ }
686
+ else {
687
+ assert.isUndefined(el.v);
688
+ }
689
+ }
690
+ rows = [];
691
+ rwIModel2.withPreparedStatement("SELECT * FROM TestDomain.Test2dElement2nd", (stmt) => {
692
+ while (stmt.step() === DbResult.BE_SQLITE_ROW) {
693
+ rows.push(stmt.getRow());
694
+ }
695
+ });
696
+ assert.equal(rows.length, 10);
697
+ assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);
698
+ assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);
699
+ for (const row of rows) {
700
+ const el = rwIModel2.elements.getElementProps(row.id);
701
+ assert.isDefined(el);
702
+ if (row.s) {
703
+ assert.equal(row.s, el.s);
704
+ }
705
+ else {
706
+ assert.isUndefined(el.s);
707
+ }
708
+ if (row.v) {
709
+ assert.equal(row.v, el.v);
710
+ }
711
+ else {
712
+ assert.isUndefined(el.v);
713
+ }
714
+ }
715
+ rows = [];
716
+ for await (const queryRow of rwIModel2.createQueryReader("SELECT * FROM TestDomain.Test2dElement2nd", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
717
+ rows.push(queryRow.toRow());
718
+ }
719
+ assert.equal(rows.length, 10);
720
+ assert.equal(rows.map((r) => r.t).filter((v) => v).length, 10);
721
+ assert.equal(rows.map((r) => r.r).filter((v) => v).length, 10);
722
+ for (const row of rows) {
723
+ const el = rwIModel2.elements.getElementProps(row.id);
724
+ assert.isDefined(el);
725
+ if (row.t) {
726
+ assert.equal(row.t, el.t);
727
+ }
728
+ else {
729
+ assert.isUndefined(el.t);
730
+ }
731
+ if (row.r) {
732
+ assert.equal(row.r, el.r);
733
+ }
734
+ else {
735
+ assert.isUndefined(el.r);
736
+ }
737
+ }
738
+ }
739
+ rwIModel.close();
740
+ rwIModel2.close();
741
+ });
742
+ it("parent lock should suffice when inserting into deeply nested sub-model", async () => {
743
+ const version0 = IModelTestUtils.resolveAssetFile("test.bim");
744
+ const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName: "subModelCoveredByParentLockTest", version0 });
745
+ let iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId });
746
+ iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
747
+ /*
748
+ Job Subject
749
+ +- DefinitionPartition -- [DefinitionModel]
750
+ */
751
+ await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });
752
+ const jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, "JobSubject").insert();
753
+ const definitionModelId = DefinitionModel.insert(iModel, jobSubjectId, "Definition");
754
+ iModel.saveChanges();
755
+ const locks = iModel.locks;
756
+ expect(locks.isServerBased).true;
757
+ await iModel.pushChanges({ description: "create model" });
758
+ expect(iModel.locks).equal(locks); // pushing should not change your locks
759
+ /*
760
+ Job Subject <--- Lock this
761
+ +- DefinitionPartition -- [DefinitionModel]
762
+ SpatialCategory <=== insert this
763
+ DrawingCategory "
764
+ */
765
+ assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));
766
+ assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));
767
+ assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));
768
+ await iModel.locks.acquireLocks({ exclusive: jobSubjectId });
769
+ iModel.locks.checkExclusiveLock(jobSubjectId, "", "");
770
+ iModel.locks.checkSharedLock(jobSubjectId, "", "");
771
+ iModel.locks.checkSharedLock(definitionModelId, "", "");
772
+ iModel.locks.checkExclusiveLock(definitionModelId, "", "");
773
+ const spatialCategoryId = SpatialCategory.insert(iModel, definitionModelId, "SpatialCategory", new SubCategoryAppearance()); // throws if we get locking error
774
+ const drawingCategoryId = DrawingCategory.insert(iModel, definitionModelId, "DrawingCategory", new SubCategoryAppearance());
775
+ assert.isTrue(iModel.elements.getElement(spatialCategoryId).model === definitionModelId);
776
+ assert.isTrue(iModel.elements.getElement(drawingCategoryId).model === definitionModelId);
777
+ iModel.saveChanges();
778
+ await iModel.pushChanges({ description: "insert category" });
779
+ /*
780
+ Create some more nesting.
781
+
782
+ Job Subject <--- Lock this
783
+ +- DefinitionPartition -- [DefinitionModel]
784
+ | SpatialCategory
785
+ +- Child Subject <== Insert
786
+ +- DocumentList -- [DocumentListModel] "
787
+ Drawing -- [DrawingModel] "
788
+ */
789
+ assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));
790
+ assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));
791
+ assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));
792
+ await iModel.locks.acquireLocks({ exclusive: jobSubjectId });
793
+ iModel.locks.checkExclusiveLock(jobSubjectId, "", "");
794
+ iModel.locks.checkSharedLock(IModel.repositoryModelId, "", "");
795
+ const childSubjectId = Subject.insert(iModel, jobSubjectId, "Child Subject");
796
+ const documentListModelId = DocumentListModel.insert(iModel, childSubjectId, "Document"); // creates DocumentList and DocumentListModel
797
+ assert.isTrue(Id64.isValidId64(documentListModelId));
798
+ const drawingModelId = Drawing.insert(iModel, documentListModelId, "Drawing"); // creates Drawing and DrawingModel
799
+ assert.isTrue(iModel.elements.getElement(childSubjectId).parent?.id === jobSubjectId);
800
+ assert.isTrue(iModel.elements.getElement(childSubjectId).model === IModel.repositoryModelId);
801
+ assert.isTrue(iModel.elements.getElement(documentListModelId).parent?.id === childSubjectId);
802
+ assert.isTrue(iModel.elements.getElement(documentListModelId).model === IModel.repositoryModelId);
803
+ assert.isTrue(iModel.elements.getElement(drawingModelId).model === documentListModelId);
804
+ iModel.saveChanges();
805
+ await iModel.pushChanges({ description: "insert doc list with nested drawing model" });
806
+ /*
807
+ Verify that even a deeply nested insertion is covered by the exclusive lock on the top-level parent.
808
+
809
+ Job Subject <--- Lock this
810
+ +- DefinitionPartition -- DefinitionModel
811
+ | SpatialCategory
812
+ +- Child Subject
813
+ +- DocumentList -- [DocumentListModel]
814
+ Drawing -- [DrawingModel]
815
+ DrawingGraphic <== Insert this
816
+ */
817
+ assert.isFalse(iModel.locks.holdsExclusiveLock(jobSubjectId));
818
+ assert.isFalse(iModel.locks.holdsExclusiveLock(definitionModelId));
819
+ assert.isFalse(iModel.locks.holdsSharedLock(definitionModelId));
820
+ assert.isFalse(iModel.locks.holdsSharedLock(documentListModelId));
821
+ assert.isFalse(iModel.locks.holdsSharedLock(drawingModelId));
822
+ await iModel.locks.acquireLocks({ exclusive: jobSubjectId });
823
+ iModel.locks.checkExclusiveLock(jobSubjectId, "", "");
824
+ iModel.locks.checkSharedLock(IModel.repositoryModelId, "", "");
825
+ iModel.locks.checkSharedLock(documentListModelId, "", "");
826
+ iModel.locks.checkSharedLock(drawingModelId, "", "");
827
+ const drawingGraphicProps1 = {
828
+ classFullName: DrawingGraphic.classFullName,
829
+ model: drawingModelId,
830
+ category: drawingCategoryId,
831
+ code: Code.createEmpty(),
832
+ userLabel: "DrawingGraphic1",
833
+ geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),
834
+ placement: { origin: Point2d.create(2, 2), angle: 0 },
835
+ };
836
+ const drawingGraphicId1 = iModel.elements.insertElement(drawingGraphicProps1);
837
+ assert.isTrue(iModel.elements.getElement(drawingGraphicId1).model === drawingModelId);
838
+ iModel.saveChanges();
839
+ expect(iModel.locks.holdsExclusiveLock(drawingModelId)).true;
840
+ const fileName = iModel[_nativeDb].getFilePath();
841
+ iModel.close(); // close rw
842
+ iModel = await BriefcaseDb.open({ fileName, readonly: true }); // reopen readonly
843
+ expect(iModel.locks.isServerBased).false; // readonly sessions should not have server based locks
844
+ // verify we can push changes from a readonly briefcase
845
+ await iModel.pushChanges({ description: "insert graphic into nested sub-model" });
846
+ // try it again to verify we can get the ServerBasedLocks again
847
+ await iModel.pushChanges({ description: "should do nothing" });
848
+ iModel.close();
849
+ // reopen readwrite to verify we released all locks from readonly briefcase
850
+ iModel = await BriefcaseDb.open({ fileName });
851
+ expect(iModel.locks.isServerBased).true;
852
+ const serverLocks = iModel.locks;
853
+ expect(serverLocks.holdsExclusiveLock(drawingModelId)).false;
854
+ expect(serverLocks.getLockCount(LockState.Shared)).equal(0);
855
+ expect(serverLocks.getLockCount(LockState.Exclusive)).equal(0);
856
+ iModel.close();
857
+ });
858
+ });
859
+ //# sourceMappingURL=IModelWrite.test.js.map