@itwin/core-backend 3.0.0-dev.76 → 3.0.0-dev.80

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 (368) hide show
  1. package/lib/{AliCloudStorageService.d.ts → cjs/AliCloudStorageService.d.ts} +0 -0
  2. package/lib/cjs/AliCloudStorageService.d.ts.map +1 -0
  3. package/lib/{AliCloudStorageService.js → cjs/AliCloudStorageService.js} +0 -0
  4. package/lib/cjs/AliCloudStorageService.js.map +1 -0
  5. package/lib/{BackendHubAccess.d.ts → cjs/BackendHubAccess.d.ts} +0 -0
  6. package/lib/cjs/BackendHubAccess.d.ts.map +1 -0
  7. package/lib/{BackendHubAccess.js → cjs/BackendHubAccess.js} +0 -0
  8. package/lib/cjs/BackendHubAccess.js.map +1 -0
  9. package/lib/{BackendLoggerCategory.d.ts → cjs/BackendLoggerCategory.d.ts} +0 -0
  10. package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -0
  11. package/lib/{BackendLoggerCategory.js → cjs/BackendLoggerCategory.js} +0 -0
  12. package/lib/cjs/BackendLoggerCategory.js.map +1 -0
  13. package/lib/{BisCoreSchema.d.ts → cjs/BisCoreSchema.d.ts} +0 -0
  14. package/lib/cjs/BisCoreSchema.d.ts.map +1 -0
  15. package/lib/{BisCoreSchema.js → cjs/BisCoreSchema.js} +0 -0
  16. package/lib/cjs/BisCoreSchema.js.map +1 -0
  17. package/lib/{BriefcaseManager.d.ts → cjs/BriefcaseManager.d.ts} +0 -0
  18. package/lib/cjs/BriefcaseManager.d.ts.map +1 -0
  19. package/lib/{BriefcaseManager.js → cjs/BriefcaseManager.js} +2 -2
  20. package/lib/cjs/BriefcaseManager.js.map +1 -0
  21. package/lib/{Category.d.ts → cjs/Category.d.ts} +0 -0
  22. package/lib/cjs/Category.d.ts.map +1 -0
  23. package/lib/{Category.js → cjs/Category.js} +0 -0
  24. package/lib/cjs/Category.js.map +1 -0
  25. package/lib/{ChangeSummaryManager.d.ts → cjs/ChangeSummaryManager.d.ts} +1 -1
  26. package/lib/cjs/ChangeSummaryManager.d.ts.map +1 -0
  27. package/lib/{ChangeSummaryManager.js → cjs/ChangeSummaryManager.js} +0 -0
  28. package/lib/cjs/ChangeSummaryManager.js.map +1 -0
  29. package/lib/{ChangedElementsDb.d.ts → cjs/ChangedElementsDb.d.ts} +0 -0
  30. package/lib/cjs/ChangedElementsDb.d.ts.map +1 -0
  31. package/lib/{ChangedElementsDb.js → cjs/ChangedElementsDb.js} +0 -0
  32. package/lib/cjs/ChangedElementsDb.js.map +1 -0
  33. package/lib/{ChangedElementsManager.d.ts → cjs/ChangedElementsManager.d.ts} +0 -0
  34. package/lib/cjs/ChangedElementsManager.d.ts.map +1 -0
  35. package/lib/{ChangedElementsManager.js → cjs/ChangedElementsManager.js} +0 -0
  36. package/lib/cjs/ChangedElementsManager.js.map +1 -0
  37. package/lib/{CheckpointManager.d.ts → cjs/CheckpointManager.d.ts} +3 -1
  38. package/lib/cjs/CheckpointManager.d.ts.map +1 -0
  39. package/lib/{CheckpointManager.js → cjs/CheckpointManager.js} +2 -2
  40. package/lib/cjs/CheckpointManager.js.map +1 -0
  41. package/lib/{ClassRegistry.d.ts → cjs/ClassRegistry.d.ts} +0 -0
  42. package/lib/cjs/ClassRegistry.d.ts.map +1 -0
  43. package/lib/{ClassRegistry.js → cjs/ClassRegistry.js} +0 -0
  44. package/lib/cjs/ClassRegistry.js.map +1 -0
  45. package/lib/{CloudStorageBackend.d.ts → cjs/CloudStorageBackend.d.ts} +0 -0
  46. package/lib/cjs/CloudStorageBackend.d.ts.map +1 -0
  47. package/lib/{CloudStorageBackend.js → cjs/CloudStorageBackend.js} +3 -3
  48. package/lib/cjs/CloudStorageBackend.js.map +1 -0
  49. package/lib/{CodeSpecs.d.ts → cjs/CodeSpecs.d.ts} +0 -0
  50. package/lib/cjs/CodeSpecs.d.ts.map +1 -0
  51. package/lib/{CodeSpecs.js → cjs/CodeSpecs.js} +0 -0
  52. package/lib/cjs/CodeSpecs.js.map +1 -0
  53. package/lib/{ConcurrentQuery.d.ts → cjs/ConcurrentQuery.d.ts} +0 -0
  54. package/lib/cjs/ConcurrentQuery.d.ts.map +1 -0
  55. package/lib/{ConcurrentQuery.js → cjs/ConcurrentQuery.js} +0 -0
  56. package/lib/cjs/ConcurrentQuery.js.map +1 -0
  57. package/lib/{DevTools.d.ts → cjs/DevTools.d.ts} +0 -0
  58. package/lib/cjs/DevTools.d.ts.map +1 -0
  59. package/lib/{DevTools.js → cjs/DevTools.js} +3 -3
  60. package/lib/cjs/DevTools.js.map +1 -0
  61. package/lib/{DisplayStyle.d.ts → cjs/DisplayStyle.d.ts} +0 -0
  62. package/lib/cjs/DisplayStyle.d.ts.map +1 -0
  63. package/lib/{DisplayStyle.js → cjs/DisplayStyle.js} +5 -2
  64. package/lib/cjs/DisplayStyle.js.map +1 -0
  65. package/lib/{ECDb.d.ts → cjs/ECDb.d.ts} +0 -0
  66. package/lib/cjs/ECDb.d.ts.map +1 -0
  67. package/lib/{ECDb.js → cjs/ECDb.js} +51 -85
  68. package/lib/cjs/ECDb.js.map +1 -0
  69. package/lib/{ECSchemaXmlContext.d.ts → cjs/ECSchemaXmlContext.d.ts} +0 -0
  70. package/lib/cjs/ECSchemaXmlContext.d.ts.map +1 -0
  71. package/lib/{ECSchemaXmlContext.js → cjs/ECSchemaXmlContext.js} +0 -0
  72. package/lib/cjs/ECSchemaXmlContext.js.map +1 -0
  73. package/lib/{ECSqlStatement.d.ts → cjs/ECSqlStatement.d.ts} +0 -0
  74. package/lib/cjs/ECSqlStatement.d.ts.map +1 -0
  75. package/lib/{ECSqlStatement.js → cjs/ECSqlStatement.js} +0 -0
  76. package/lib/cjs/ECSqlStatement.js.map +1 -0
  77. package/lib/{Element.d.ts → cjs/Element.d.ts} +0 -0
  78. package/lib/cjs/Element.d.ts.map +1 -0
  79. package/lib/{Element.js → cjs/Element.js} +11 -4
  80. package/lib/cjs/Element.js.map +1 -0
  81. package/lib/{ElementAspect.d.ts → cjs/ElementAspect.d.ts} +0 -0
  82. package/lib/cjs/ElementAspect.d.ts.map +1 -0
  83. package/lib/{ElementAspect.js → cjs/ElementAspect.js} +0 -0
  84. package/lib/cjs/ElementAspect.js.map +1 -0
  85. package/lib/{ElementGraphics.d.ts → cjs/ElementGraphics.d.ts} +0 -0
  86. package/lib/cjs/ElementGraphics.d.ts.map +1 -0
  87. package/lib/{ElementGraphics.js → cjs/ElementGraphics.js} +0 -0
  88. package/lib/cjs/ElementGraphics.js.map +1 -0
  89. package/lib/{Entity.d.ts → cjs/Entity.d.ts} +0 -0
  90. package/lib/cjs/Entity.d.ts.map +1 -0
  91. package/lib/{Entity.js → cjs/Entity.js} +0 -0
  92. package/lib/cjs/Entity.js.map +1 -0
  93. package/lib/{ExportGraphics.d.ts → cjs/ExportGraphics.d.ts} +0 -0
  94. package/lib/cjs/ExportGraphics.d.ts.map +1 -0
  95. package/lib/{ExportGraphics.js → cjs/ExportGraphics.js} +0 -0
  96. package/lib/cjs/ExportGraphics.js.map +1 -0
  97. package/lib/{ExternalSource.d.ts → cjs/ExternalSource.d.ts} +0 -0
  98. package/lib/cjs/ExternalSource.d.ts.map +1 -0
  99. package/lib/{ExternalSource.js → cjs/ExternalSource.js} +0 -0
  100. package/lib/cjs/ExternalSource.js.map +1 -0
  101. package/lib/{GeometrySummary.d.ts → cjs/GeometrySummary.d.ts} +0 -0
  102. package/lib/cjs/GeometrySummary.d.ts.map +1 -0
  103. package/lib/{GeometrySummary.js → cjs/GeometrySummary.js} +0 -0
  104. package/lib/cjs/GeometrySummary.js.map +1 -0
  105. package/lib/{IModelCloneContext.d.ts → cjs/IModelCloneContext.d.ts} +0 -0
  106. package/lib/cjs/IModelCloneContext.d.ts.map +1 -0
  107. package/lib/{IModelCloneContext.js → cjs/IModelCloneContext.js} +0 -0
  108. package/lib/cjs/IModelCloneContext.js.map +1 -0
  109. package/lib/{IModelDb.d.ts → cjs/IModelDb.d.ts} +4 -6
  110. package/lib/cjs/IModelDb.d.ts.map +1 -0
  111. package/lib/{IModelDb.js → cjs/IModelDb.js} +99 -104
  112. package/lib/cjs/IModelDb.js.map +1 -0
  113. package/lib/{IModelHost.d.ts → cjs/IModelHost.d.ts} +1 -2
  114. package/lib/cjs/IModelHost.d.ts.map +1 -0
  115. package/lib/{IModelHost.js → cjs/IModelHost.js} +11 -6
  116. package/lib/cjs/IModelHost.js.map +1 -0
  117. package/lib/{IModelHubBackend.d.ts → cjs/IModelHubBackend.d.ts} +0 -0
  118. package/lib/cjs/IModelHubBackend.d.ts.map +1 -0
  119. package/lib/{IModelHubBackend.js → cjs/IModelHubBackend.js} +6 -6
  120. package/lib/cjs/IModelHubBackend.js.map +1 -0
  121. package/lib/{IModelJsFs.d.ts → cjs/IModelJsFs.d.ts} +0 -0
  122. package/lib/cjs/IModelJsFs.d.ts.map +1 -0
  123. package/lib/{IModelJsFs.js → cjs/IModelJsFs.js} +0 -0
  124. package/lib/cjs/IModelJsFs.js.map +1 -0
  125. package/lib/{IModelSchemaLoader.d.ts → cjs/IModelSchemaLoader.d.ts} +0 -0
  126. package/lib/cjs/IModelSchemaLoader.d.ts.map +1 -0
  127. package/lib/{IModelSchemaLoader.js → cjs/IModelSchemaLoader.js} +0 -0
  128. package/lib/cjs/IModelSchemaLoader.js.map +1 -0
  129. package/lib/{IpcHost.d.ts → cjs/IpcHost.d.ts} +0 -0
  130. package/lib/cjs/IpcHost.d.ts.map +1 -0
  131. package/lib/{IpcHost.js → cjs/IpcHost.js} +0 -0
  132. package/lib/cjs/IpcHost.js.map +1 -0
  133. package/lib/{LineStyle.d.ts → cjs/LineStyle.d.ts} +0 -0
  134. package/lib/cjs/LineStyle.d.ts.map +1 -0
  135. package/lib/{LineStyle.js → cjs/LineStyle.js} +0 -0
  136. package/lib/cjs/LineStyle.js.map +1 -0
  137. package/lib/{LocalhostIpcHost.d.ts → cjs/LocalhostIpcHost.d.ts} +0 -0
  138. package/lib/cjs/LocalhostIpcHost.d.ts.map +1 -0
  139. package/lib/{LocalhostIpcHost.js → cjs/LocalhostIpcHost.js} +0 -0
  140. package/lib/cjs/LocalhostIpcHost.js.map +1 -0
  141. package/lib/{Material.d.ts → cjs/Material.d.ts} +0 -0
  142. package/lib/cjs/Material.d.ts.map +1 -0
  143. package/lib/{Material.js → cjs/Material.js} +0 -0
  144. package/lib/cjs/Material.js.map +1 -0
  145. package/lib/{Model.d.ts → cjs/Model.d.ts} +0 -0
  146. package/lib/cjs/Model.d.ts.map +1 -0
  147. package/lib/{Model.js → cjs/Model.js} +1 -1
  148. package/lib/cjs/Model.js.map +1 -0
  149. package/lib/{NativeAppStorage.d.ts → cjs/NativeAppStorage.d.ts} +0 -0
  150. package/lib/cjs/NativeAppStorage.d.ts.map +1 -0
  151. package/lib/{NativeAppStorage.js → cjs/NativeAppStorage.js} +0 -0
  152. package/lib/cjs/NativeAppStorage.js.map +1 -0
  153. package/lib/{NativeHost.d.ts → cjs/NativeHost.d.ts} +2 -2
  154. package/lib/cjs/NativeHost.d.ts.map +1 -0
  155. package/lib/{NativeHost.js → cjs/NativeHost.js} +4 -1
  156. package/lib/cjs/NativeHost.js.map +1 -0
  157. package/lib/{NavigationRelationship.d.ts → cjs/NavigationRelationship.d.ts} +0 -0
  158. package/lib/cjs/NavigationRelationship.d.ts.map +1 -0
  159. package/lib/{NavigationRelationship.js → cjs/NavigationRelationship.js} +0 -0
  160. package/lib/cjs/NavigationRelationship.js.map +1 -0
  161. package/lib/{PromiseMemoizer.d.ts → cjs/PromiseMemoizer.d.ts} +0 -0
  162. package/lib/cjs/PromiseMemoizer.d.ts.map +1 -0
  163. package/lib/{PromiseMemoizer.js → cjs/PromiseMemoizer.js} +0 -0
  164. package/lib/cjs/PromiseMemoizer.js.map +1 -0
  165. package/lib/{Relationship.d.ts → cjs/Relationship.d.ts} +0 -0
  166. package/lib/cjs/Relationship.d.ts.map +1 -0
  167. package/lib/{Relationship.js → cjs/Relationship.js} +0 -0
  168. package/lib/cjs/Relationship.js.map +1 -0
  169. package/lib/{RpcBackend.d.ts → cjs/RpcBackend.d.ts} +0 -0
  170. package/lib/cjs/RpcBackend.d.ts.map +1 -0
  171. package/lib/{RpcBackend.js → cjs/RpcBackend.js} +0 -0
  172. package/lib/cjs/RpcBackend.js.map +1 -0
  173. package/lib/{SQLiteDb.d.ts → cjs/SQLiteDb.d.ts} +0 -0
  174. package/lib/cjs/SQLiteDb.d.ts.map +1 -0
  175. package/lib/{SQLiteDb.js → cjs/SQLiteDb.js} +0 -0
  176. package/lib/cjs/SQLiteDb.js.map +1 -0
  177. package/lib/{Schema.d.ts → cjs/Schema.d.ts} +0 -0
  178. package/lib/cjs/Schema.d.ts.map +1 -0
  179. package/lib/{Schema.js → cjs/Schema.js} +0 -0
  180. package/lib/cjs/Schema.js.map +1 -0
  181. package/lib/{ServerBasedLocks.d.ts → cjs/ServerBasedLocks.d.ts} +0 -0
  182. package/lib/cjs/ServerBasedLocks.d.ts.map +1 -0
  183. package/lib/{ServerBasedLocks.js → cjs/ServerBasedLocks.js} +0 -0
  184. package/lib/cjs/ServerBasedLocks.js.map +1 -0
  185. package/lib/{SqliteStatement.d.ts → cjs/SqliteStatement.d.ts} +0 -0
  186. package/lib/cjs/SqliteStatement.d.ts.map +1 -0
  187. package/lib/{SqliteStatement.js → cjs/SqliteStatement.js} +0 -0
  188. package/lib/cjs/SqliteStatement.js.map +1 -0
  189. package/lib/{Texture.d.ts → cjs/Texture.d.ts} +0 -0
  190. package/lib/cjs/Texture.d.ts.map +1 -0
  191. package/lib/{Texture.js → cjs/Texture.js} +0 -0
  192. package/lib/cjs/Texture.js.map +1 -0
  193. package/lib/{TxnManager.d.ts → cjs/TxnManager.d.ts} +0 -0
  194. package/lib/cjs/TxnManager.d.ts.map +1 -0
  195. package/lib/{TxnManager.js → cjs/TxnManager.js} +0 -0
  196. package/lib/cjs/TxnManager.js.map +1 -0
  197. package/lib/{ViewDefinition.d.ts → cjs/ViewDefinition.d.ts} +0 -0
  198. package/lib/cjs/ViewDefinition.d.ts.map +1 -0
  199. package/lib/{ViewDefinition.js → cjs/ViewDefinition.js} +0 -0
  200. package/lib/cjs/ViewDefinition.js.map +1 -0
  201. package/lib/{assets → cjs/assets}/IModelChange.02.00.00.ecschema.xml +0 -0
  202. package/lib/{core-backend.d.ts → cjs/core-backend.d.ts} +0 -0
  203. package/lib/cjs/core-backend.d.ts.map +1 -0
  204. package/lib/{core-backend.js → cjs/core-backend.js} +0 -0
  205. package/lib/cjs/core-backend.js.map +1 -0
  206. package/lib/{domains → cjs/domains}/FunctionalElements.d.ts +0 -0
  207. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -0
  208. package/lib/{domains → cjs/domains}/FunctionalElements.js +0 -0
  209. package/lib/cjs/domains/FunctionalElements.js.map +1 -0
  210. package/lib/{domains → cjs/domains}/FunctionalSchema.d.ts +0 -0
  211. package/lib/cjs/domains/FunctionalSchema.d.ts.map +1 -0
  212. package/lib/{domains → cjs/domains}/FunctionalSchema.js +0 -0
  213. package/lib/cjs/domains/FunctionalSchema.js.map +1 -0
  214. package/lib/{domains → cjs/domains}/GenericElements.d.ts +0 -0
  215. package/lib/cjs/domains/GenericElements.d.ts.map +1 -0
  216. package/lib/{domains → cjs/domains}/GenericElements.js +0 -0
  217. package/lib/cjs/domains/GenericElements.js.map +1 -0
  218. package/lib/{domains → cjs/domains}/GenericSchema.d.ts +0 -0
  219. package/lib/cjs/domains/GenericSchema.d.ts.map +1 -0
  220. package/lib/{domains → cjs/domains}/GenericSchema.js +0 -0
  221. package/lib/cjs/domains/GenericSchema.js.map +1 -0
  222. package/lib/{rpc-impl → cjs/rpc-impl}/DevToolsRpcImpl.d.ts +0 -0
  223. package/lib/cjs/rpc-impl/DevToolsRpcImpl.d.ts.map +1 -0
  224. package/lib/{rpc-impl → cjs/rpc-impl}/DevToolsRpcImpl.js +0 -0
  225. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -0
  226. package/lib/{rpc-impl → cjs/rpc-impl}/IModelReadRpcImpl.d.ts +0 -0
  227. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -0
  228. package/lib/{rpc-impl → cjs/rpc-impl}/IModelReadRpcImpl.js +1 -1
  229. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -0
  230. package/lib/{rpc-impl → cjs/rpc-impl}/IModelTileRpcImpl.d.ts +0 -0
  231. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts.map +1 -0
  232. package/lib/{rpc-impl → cjs/rpc-impl}/IModelTileRpcImpl.js +6 -3
  233. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -0
  234. package/lib/{rpc-impl → cjs/rpc-impl}/RpcBriefcaseUtility.d.ts +0 -0
  235. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -0
  236. package/lib/{rpc-impl → cjs/rpc-impl}/RpcBriefcaseUtility.js +9 -8
  237. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -0
  238. package/lib/{rpc-impl → cjs/rpc-impl}/SnapshotIModelRpcImpl.d.ts +0 -0
  239. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts.map +1 -0
  240. package/lib/{rpc-impl → cjs/rpc-impl}/SnapshotIModelRpcImpl.js +1 -1
  241. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -0
  242. package/lib/{rpc-impl → cjs/rpc-impl}/WipRpcImpl.d.ts +1 -2
  243. package/lib/cjs/rpc-impl/WipRpcImpl.d.ts.map +1 -0
  244. package/lib/{rpc-impl → cjs/rpc-impl}/WipRpcImpl.js +1 -2
  245. package/lib/cjs/rpc-impl/WipRpcImpl.js.map +1 -0
  246. package/package.json +37 -41
  247. package/lib/AliCloudStorageService.d.ts.map +0 -1
  248. package/lib/AliCloudStorageService.js.map +0 -1
  249. package/lib/BackendHubAccess.d.ts.map +0 -1
  250. package/lib/BackendHubAccess.js.map +0 -1
  251. package/lib/BackendLoggerCategory.d.ts.map +0 -1
  252. package/lib/BackendLoggerCategory.js.map +0 -1
  253. package/lib/BisCoreSchema.d.ts.map +0 -1
  254. package/lib/BisCoreSchema.js.map +0 -1
  255. package/lib/BriefcaseManager.d.ts.map +0 -1
  256. package/lib/BriefcaseManager.js.map +0 -1
  257. package/lib/Category.d.ts.map +0 -1
  258. package/lib/Category.js.map +0 -1
  259. package/lib/ChangeSummaryManager.d.ts.map +0 -1
  260. package/lib/ChangeSummaryManager.js.map +0 -1
  261. package/lib/ChangedElementsDb.d.ts.map +0 -1
  262. package/lib/ChangedElementsDb.js.map +0 -1
  263. package/lib/ChangedElementsManager.d.ts.map +0 -1
  264. package/lib/ChangedElementsManager.js.map +0 -1
  265. package/lib/CheckpointManager.d.ts.map +0 -1
  266. package/lib/CheckpointManager.js.map +0 -1
  267. package/lib/ClassRegistry.d.ts.map +0 -1
  268. package/lib/ClassRegistry.js.map +0 -1
  269. package/lib/CloudStorageBackend.d.ts.map +0 -1
  270. package/lib/CloudStorageBackend.js.map +0 -1
  271. package/lib/CodeSpecs.d.ts.map +0 -1
  272. package/lib/CodeSpecs.js.map +0 -1
  273. package/lib/ConcurrentQuery.d.ts.map +0 -1
  274. package/lib/ConcurrentQuery.js.map +0 -1
  275. package/lib/DevTools.d.ts.map +0 -1
  276. package/lib/DevTools.js.map +0 -1
  277. package/lib/DisplayStyle.d.ts.map +0 -1
  278. package/lib/DisplayStyle.js.map +0 -1
  279. package/lib/ECDb.d.ts.map +0 -1
  280. package/lib/ECDb.js.map +0 -1
  281. package/lib/ECSchemaXmlContext.d.ts.map +0 -1
  282. package/lib/ECSchemaXmlContext.js.map +0 -1
  283. package/lib/ECSqlStatement.d.ts.map +0 -1
  284. package/lib/ECSqlStatement.js.map +0 -1
  285. package/lib/Element.d.ts.map +0 -1
  286. package/lib/Element.js.map +0 -1
  287. package/lib/ElementAspect.d.ts.map +0 -1
  288. package/lib/ElementAspect.js.map +0 -1
  289. package/lib/ElementGraphics.d.ts.map +0 -1
  290. package/lib/ElementGraphics.js.map +0 -1
  291. package/lib/Entity.d.ts.map +0 -1
  292. package/lib/Entity.js.map +0 -1
  293. package/lib/ExportGraphics.d.ts.map +0 -1
  294. package/lib/ExportGraphics.js.map +0 -1
  295. package/lib/ExternalSource.d.ts.map +0 -1
  296. package/lib/ExternalSource.js.map +0 -1
  297. package/lib/GeometrySummary.d.ts.map +0 -1
  298. package/lib/GeometrySummary.js.map +0 -1
  299. package/lib/IModelCloneContext.d.ts.map +0 -1
  300. package/lib/IModelCloneContext.js.map +0 -1
  301. package/lib/IModelDb.d.ts.map +0 -1
  302. package/lib/IModelDb.js.map +0 -1
  303. package/lib/IModelHost.d.ts.map +0 -1
  304. package/lib/IModelHost.js.map +0 -1
  305. package/lib/IModelHubBackend.d.ts.map +0 -1
  306. package/lib/IModelHubBackend.js.map +0 -1
  307. package/lib/IModelJsFs.d.ts.map +0 -1
  308. package/lib/IModelJsFs.js.map +0 -1
  309. package/lib/IModelSchemaLoader.d.ts.map +0 -1
  310. package/lib/IModelSchemaLoader.js.map +0 -1
  311. package/lib/IpcHost.d.ts.map +0 -1
  312. package/lib/IpcHost.js.map +0 -1
  313. package/lib/LineStyle.d.ts.map +0 -1
  314. package/lib/LineStyle.js.map +0 -1
  315. package/lib/LocalhostIpcHost.d.ts.map +0 -1
  316. package/lib/LocalhostIpcHost.js.map +0 -1
  317. package/lib/Material.d.ts.map +0 -1
  318. package/lib/Material.js.map +0 -1
  319. package/lib/Model.d.ts.map +0 -1
  320. package/lib/Model.js.map +0 -1
  321. package/lib/NativeAppStorage.d.ts.map +0 -1
  322. package/lib/NativeAppStorage.js.map +0 -1
  323. package/lib/NativeHost.d.ts.map +0 -1
  324. package/lib/NativeHost.js.map +0 -1
  325. package/lib/NavigationRelationship.d.ts.map +0 -1
  326. package/lib/NavigationRelationship.js.map +0 -1
  327. package/lib/PromiseMemoizer.d.ts.map +0 -1
  328. package/lib/PromiseMemoizer.js.map +0 -1
  329. package/lib/Relationship.d.ts.map +0 -1
  330. package/lib/Relationship.js.map +0 -1
  331. package/lib/RpcBackend.d.ts.map +0 -1
  332. package/lib/RpcBackend.js.map +0 -1
  333. package/lib/SQLiteDb.d.ts.map +0 -1
  334. package/lib/SQLiteDb.js.map +0 -1
  335. package/lib/Schema.d.ts.map +0 -1
  336. package/lib/Schema.js.map +0 -1
  337. package/lib/ServerBasedLocks.d.ts.map +0 -1
  338. package/lib/ServerBasedLocks.js.map +0 -1
  339. package/lib/SqliteStatement.d.ts.map +0 -1
  340. package/lib/SqliteStatement.js.map +0 -1
  341. package/lib/Texture.d.ts.map +0 -1
  342. package/lib/Texture.js.map +0 -1
  343. package/lib/TxnManager.d.ts.map +0 -1
  344. package/lib/TxnManager.js.map +0 -1
  345. package/lib/ViewDefinition.d.ts.map +0 -1
  346. package/lib/ViewDefinition.js.map +0 -1
  347. package/lib/core-backend.d.ts.map +0 -1
  348. package/lib/core-backend.js.map +0 -1
  349. package/lib/domains/FunctionalElements.d.ts.map +0 -1
  350. package/lib/domains/FunctionalElements.js.map +0 -1
  351. package/lib/domains/FunctionalSchema.d.ts.map +0 -1
  352. package/lib/domains/FunctionalSchema.js.map +0 -1
  353. package/lib/domains/GenericElements.d.ts.map +0 -1
  354. package/lib/domains/GenericElements.js.map +0 -1
  355. package/lib/domains/GenericSchema.d.ts.map +0 -1
  356. package/lib/domains/GenericSchema.js.map +0 -1
  357. package/lib/rpc-impl/DevToolsRpcImpl.d.ts.map +0 -1
  358. package/lib/rpc-impl/DevToolsRpcImpl.js.map +0 -1
  359. package/lib/rpc-impl/IModelReadRpcImpl.d.ts.map +0 -1
  360. package/lib/rpc-impl/IModelReadRpcImpl.js.map +0 -1
  361. package/lib/rpc-impl/IModelTileRpcImpl.d.ts.map +0 -1
  362. package/lib/rpc-impl/IModelTileRpcImpl.js.map +0 -1
  363. package/lib/rpc-impl/RpcBriefcaseUtility.d.ts.map +0 -1
  364. package/lib/rpc-impl/RpcBriefcaseUtility.js.map +0 -1
  365. package/lib/rpc-impl/SnapshotIModelRpcImpl.d.ts.map +0 -1
  366. package/lib/rpc-impl/SnapshotIModelRpcImpl.js.map +0 -1
  367. package/lib/rpc-impl/WipRpcImpl.d.ts.map +0 -1
  368. package/lib/rpc-impl/WipRpcImpl.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"NativeAppStorage.js","sourceRoot":"","sources":["../src/NativeAppStorage.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module NativeApp\r\n */\r\n\r\nimport { join } from \"path\";\r\nimport { DbResult, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { IModelError, StorageValue } from \"@itwin/core-common\";\r\nimport { ECDb, ECDbOpenMode } from \"./ECDb\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { IModelJsFs } from \"./IModelJsFs\";\r\nimport { NativeHost } from \"./NativeHost\";\r\n\r\n// cspell:ignore ecdb\r\n\r\n/**\r\n * A local file stored in the [[NativeHost.appSettingsCacheDir]] for storing key/value pairs.\r\n * @public\r\n */\r\nexport class NativeAppStorage {\r\n private static readonly _ext = \".settings-db\";\r\n private static _storages = new Map<string, NativeAppStorage>();\r\n private static _init: boolean = false;\r\n private constructor(private _ecdb: ECDb, public readonly id: string) { }\r\n\r\n /** Set the value for a key */\r\n public setData(key: string, value: StorageValue): void {\r\n const rc = this._ecdb.withPreparedSqliteStatement(\"INSERT INTO app_setting(key,type,val)VALUES(?,?,?) ON CONFLICT(key) DO UPDATE SET type=excluded.type,val=excluded.val\", (stmt) => {\r\n let valType = (value === undefined || value === null) ? \"null\" : typeof value;\r\n if (valType === \"object\" && (value instanceof Uint8Array))\r\n valType = \"Uint8Array\";\r\n\r\n switch (valType) {\r\n case \"null\":\r\n case \"number\":\r\n case \"string\":\r\n case \"boolean\":\r\n case \"Uint8Array\":\r\n break;\r\n default:\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, `Unsupported type ${valType} for value for key='${key}`);\r\n }\r\n\r\n stmt.bindValue(1, key);\r\n stmt.bindValue(2, valType);\r\n stmt.bindValue(3, value);\r\n return stmt.step();\r\n });\r\n if (rc !== DbResult.BE_SQLITE_DONE)\r\n throw new IModelError(rc, \"SQLite error\");\r\n\r\n this._ecdb.saveChanges();\r\n }\r\n\r\n /** Get the value for a key from this Storage. If key is not present or is null, return undefined. */\r\n public getData(key: string): StorageValue {\r\n return this._ecdb.withPreparedSqliteStatement(\"SELECT type,val FROM app_setting WHERE key=?\", (stmt) => {\r\n stmt.bindValue(1, key);\r\n if (DbResult.BE_SQLITE_ROW !== stmt.step())\r\n return undefined;\r\n const valType = stmt.getValueString(0);\r\n switch (valType) {\r\n case \"number\":\r\n return stmt.getValueDouble(1);\r\n case \"string\":\r\n return stmt.getValueString(1);\r\n case \"boolean\":\r\n return Boolean(stmt.getValueInteger(1));\r\n case \"Uint8Array\":\r\n return stmt.getValueBlob(1);\r\n case \"null\":\r\n return undefined;\r\n }\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, `Unsupported type in cache ${valType}`);\r\n });\r\n }\r\n\r\n /** return the type of the value for a key, or undefined if not present. */\r\n public getValueType(key: string): \"number\" | \"string\" | \"boolean\" | \"Uint8Array\" | \"null\" | undefined {\r\n return this._ecdb.withSqliteStatement(\"SELECT type FROM app_setting WHERE key=?\", (stmt) => {\r\n stmt.bindValue(1, key);\r\n return stmt.step() === DbResult.BE_SQLITE_ROW ? stmt.getValueString(0) as any : undefined;\r\n });\r\n }\r\n\r\n /** return `true` if the key is present, but has a null value. */\r\n public hasNullValue(key: string): boolean {\r\n return this.getValueType(key) === \"null\";\r\n }\r\n\r\n /** Get the value for a key as a string. If it is not present, or not of type string, return undefined */\r\n public getString(key: string): string | undefined {\r\n const val = this.getData(key);\r\n return typeof val === \"string\" ? val : undefined;\r\n }\r\n\r\n /** Get the value for a key as a number. If it is not present, or not of type number, return undefined */\r\n public getNumber(key: string): number | undefined {\r\n const val = this.getData(key);\r\n return typeof val === \"number\" ? val : undefined;\r\n }\r\n\r\n /** Get the value for a key as a boolean. If it is not present, or not of type boolean, return undefined */\r\n public getBoolean(key: string): boolean | undefined {\r\n const val = this.getData(key);\r\n return typeof val === \"boolean\" ? val : undefined;\r\n }\r\n\r\n /** Get the value for a key as a Uint8Array. If it is not present, or not of type Uint8Array, return undefined */\r\n public getUint8Array(key: string): Uint8Array | undefined {\r\n const val = this.getData(key);\r\n return val instanceof Uint8Array ? val : undefined;\r\n }\r\n\r\n /** Get all key names in this Storage */\r\n public getKeys(): string[] {\r\n const keys = new Array<string>();\r\n this._ecdb.withPreparedSqliteStatement(\"SELECT key FROM app_setting\", (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n keys.push(stmt.getValueString(0));\r\n }\r\n });\r\n return keys;\r\n }\r\n\r\n /** Remove a key/value pair from this Storage */\r\n public removeData(key: string) {\r\n const rc = this._ecdb.withPreparedSqliteStatement(\"DELETE FROM app_setting WHERE key=?\", (stmt) => {\r\n stmt.bindValue(1, key);\r\n return stmt.step();\r\n });\r\n if (rc !== DbResult.BE_SQLITE_DONE) {\r\n throw new IModelError(rc, \"SQLite error\");\r\n }\r\n }\r\n\r\n /** Remove all key/value pairs */\r\n public removeAll() {\r\n const rc = this._ecdb.withPreparedSqliteStatement(\"DELETE FROM app_setting\", (stmt) => {\r\n return stmt.step();\r\n });\r\n if (rc !== DbResult.BE_SQLITE_DONE) {\r\n throw new IModelError(rc, \"SQLite error\");\r\n }\r\n }\r\n\r\n /** Close this Storage. */\r\n public close(deleteFile: boolean = false) {\r\n const storageFile = join(NativeHost.appSettingsCacheDir, this.id);\r\n this._ecdb.saveChanges();\r\n this._ecdb.closeDb();\r\n (this._ecdb as any) = undefined;\r\n if (deleteFile)\r\n IModelJsFs.removeSync(storageFile);\r\n NativeAppStorage._storages.delete(this.id);\r\n }\r\n\r\n private static init(ecdb: ECDb): DbResult {\r\n return ecdb.withPreparedSqliteStatement(\"CREATE TABLE app_setting(key PRIMARY KEY,type,val);\", (stmt) => {\r\n return stmt.step();\r\n });\r\n }\r\n\r\n /** find and open storage by its name. */\r\n public static find(name: string): NativeAppStorage {\r\n const storage = this._storages.get(name);\r\n if (undefined === storage)\r\n throw new IModelError(IModelStatus.FileNotFound, `Storage ${name} not open`);\r\n return storage;\r\n }\r\n\r\n /** Close all opened Storages.\r\n * @internal\r\n */\r\n public static closeAll() {\r\n this._storages.forEach((value) => value.close());\r\n this._storages.clear();\r\n }\r\n\r\n /** @internal */\r\n public static getStorageNames(): string[] {\r\n return IModelJsFs.readdirSync(NativeHost.appSettingsCacheDir).filter((name) => name.endsWith(this._ext));\r\n }\r\n\r\n /** Open or find a Storage by name. */\r\n public static open(name: string): NativeAppStorage {\r\n if (!this._init) {\r\n IModelHost.onBeforeShutdown.addOnce(() => this.closeAll());\r\n this._init = true;\r\n }\r\n const fileName = name + this._ext;\r\n if (!IModelJsFs.existsSync(NativeHost.appSettingsCacheDir))\r\n IModelJsFs.recursiveMkDirSync(NativeHost.appSettingsCacheDir);\r\n\r\n const storageFile = join(NativeHost.appSettingsCacheDir, fileName);\r\n try {\r\n return this.find(fileName); // see if it's already open\r\n } catch (err) {\r\n const ecdb = new ECDb();\r\n if (IModelJsFs.existsSync(storageFile)) {\r\n ecdb.openDb(storageFile, ECDbOpenMode.ReadWrite);\r\n } else {\r\n ecdb.createDb(storageFile);\r\n const rc = this.init(ecdb);\r\n if (rc !== DbResult.BE_SQLITE_DONE)\r\n throw new IModelError(rc, \"SQLite error\");\r\n ecdb.saveChanges();\r\n }\r\n const storage = new NativeAppStorage(ecdb, fileName);\r\n this._storages.set(fileName, storage);\r\n return storage;\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NativeHost.d.ts","sourceRoot":"","sources":["../src/NativeHost.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAc,OAAO,EAAc,MAAM,qBAAqB,CAAC;AACnF,OAAO,EACwB,0BAA0B,EAAuB,mCAAmC,EAC7F,sBAAsB,EAAmB,YAAY,EAC1E,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAwB,MAAM,uBAAuB,CAAC;AAI1G,OAAO,EAAuB,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,gBAAgB;AAChB,8BAAsB,6BAA8B,SAAQ,sBAAuB,YAAW,mBAAmB;IAC/G,SAAS,CAAC,YAAY,EAAE,WAAW,CAAM;aACzB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;aACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;IAChD,MAAM,CAAC,EAAE,mCAAmC,CAAC;IAC7C,YAAY,SAAW;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAE1B,SAAS,aAAa,MAAM,CAAC,EAAE,mCAAmC;IAK3D,cAAc,CAAC,KAAK,EAAE,WAAW;IAO3B,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAMtC,UAAU,CAAC,MAAM,CAAC,EAAE,mCAAmC;CAQrE;AAuHD;aACa;AACb,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,UAAU,CAAC,EAAE;QACX,+GAA+G;QAC/G,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAA6B;IAC1D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAS;IACxC,OAAO;IAEP,gBAAgB;IAChB,WAAkB,aAAa,kCAA8E;IAE7G,8IAA8I;IAC9I,gBAAuB,oBAAoB,kBAAuB,WAAW,KAAK,IAAI,EAAI;IAE1F,qEAAqE;IACrE,gBAAuB,6BAA6B,mBAAwB,0BAA0B,KAAK,IAAI,EAAI;IAEnH,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAS;IAE7C,0DAA0D;IAC1D,WAAkB,mBAAmB,IAAI,MAAM,CAI9C;IAED,yEAAyE;WAC3D,oBAAoB,CAAC,CAAC,SAAS,MAAM,sBAAsB,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAIxI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,WAAkB,OAAO,IAAI,OAAO,CAA0B;IAC9D,WAAkB,eAAe,WAAoC;IACrE,kDAAkD;IAClD,WAAkB,aAAa,qBAE9B;IAED;;;OAGG;WACiB,OAAO,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAehE,mEAAmE;WAC/C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7C,iDAAiD;WACnC,yBAAyB,IAAI,0BAA0B;IAIrE;;;;OAIG;WACW,4BAA4B,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,0BAA0B,GAAG,IAAI;CAOjH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NativeHost.js","sourceRoot":"","sources":["../src/NativeHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module NativeApp\r\n */\r\n\r\nimport { join } from \"path\";\r\nimport { AccessToken, AuthStatus, BeEvent, GuidString } from \"@itwin/core-bentley\";\r\nimport {\r\n BriefcaseProps, IModelError, InternetConnectivityStatus, LocalBriefcaseProps, NativeAppAuthorizationConfiguration, nativeAppChannel,\r\n NativeAppFunctions, NativeAppNotifications, nativeAppNotify, OverriddenBy, RequestNewBriefcaseProps, SessionProps, StorageValue,\r\n} from \"@itwin/core-common\";\r\nimport { AuthorizationClient, ImsAuthorizationClient, RequestGlobalOptions } from \"@bentley/itwin-client\";\r\nimport { BriefcaseManager } from \"./BriefcaseManager\";\r\nimport { Downloads } from \"./CheckpointManager\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { IpcHandler, IpcHost, IpcHostOpts } from \"./IpcHost\";\r\nimport { NativeAppStorage } from \"./NativeAppStorage\";\r\n\r\n/** @internal */\r\nexport abstract class NativeAppAuthorizationBackend extends ImsAuthorizationClient implements AuthorizationClient {\r\n protected _accessToken: AccessToken = \"\";\r\n public abstract signIn(): Promise<void>;\r\n public abstract signOut(): Promise<void>;\r\n protected abstract refreshToken(): Promise<AccessToken>;\r\n public config?: NativeAppAuthorizationConfiguration;\r\n public expireSafety = 60 * 10; // refresh token 10 minutes before real expiration time\r\n public issuerUrl?: string;\r\n\r\n protected constructor(config?: NativeAppAuthorizationConfiguration) {\r\n super();\r\n this.config = config;\r\n }\r\n\r\n public setAccessToken(token: AccessToken) {\r\n if (token === this._accessToken)\r\n return;\r\n this._accessToken = token;\r\n NativeHost.onAccessTokenChanged.raiseEvent(token);\r\n }\r\n\r\n public async getAccessToken(): Promise<AccessToken> {\r\n if (!this._accessToken) // TODO: This should happen from a timer, not here\r\n this.setAccessToken(await this.refreshToken());\r\n return this._accessToken;\r\n }\r\n\r\n public async initialize(config?: NativeAppAuthorizationConfiguration) {\r\n this.config = config ?? this.config;\r\n if (!this.config)\r\n throw new IModelError(AuthStatus.Error, \"Must specify a valid configuration when initializing authorization\");\r\n if (this.config.expiryBuffer)\r\n this.expireSafety = this.config.expiryBuffer;\r\n this.issuerUrl = this.config.issuerUrl ?? await this.getUrl();\r\n }\r\n}\r\n\r\n/**\r\n * Implementation of NativeAppFunctions\r\n */\r\nclass NativeAppHandler extends IpcHandler implements NativeAppFunctions {\r\n public get channelName() { return nativeAppChannel; }\r\n\r\n public async setAccessToken(token: AccessToken) {\r\n NativeHost.authorization.setAccessToken(token);\r\n }\r\n public async getAccessToken(): Promise<AccessToken> {\r\n return NativeHost.authorization.getAccessToken();\r\n }\r\n public async initializeAuth(props: SessionProps, config?: NativeAppAuthorizationConfiguration): Promise<number> {\r\n IModelHost.session.applicationId = props.applicationId;\r\n IModelHost.applicationVersion = props.applicationVersion;\r\n IModelHost.sessionId = props.sessionId;\r\n\r\n await NativeHost.authorization.initialize(config);\r\n return NativeHost.authorization.expireSafety;\r\n }\r\n public async signIn(): Promise<void> {\r\n return NativeHost.authorization.signIn();\r\n }\r\n public async signOut(): Promise<void> {\r\n return NativeHost.authorization.signOut();\r\n }\r\n public async checkInternetConnectivity(): Promise<InternetConnectivityStatus> {\r\n return NativeHost.checkInternetConnectivity();\r\n }\r\n public async overrideInternetConnectivity(by: OverriddenBy, status: InternetConnectivityStatus): Promise<void> {\r\n NativeHost.overrideInternetConnectivity(by, status);\r\n }\r\n public async acquireNewBriefcaseId(iModelId: GuidString): Promise<number> {\r\n return BriefcaseManager.acquireNewBriefcaseId({ iModelId });\r\n }\r\n public async getBriefcaseFileName(props: BriefcaseProps): Promise<string> {\r\n return BriefcaseManager.getFileName(props);\r\n }\r\n public async downloadBriefcase(request: RequestNewBriefcaseProps, reportProgress: boolean, progressInterval?: number): Promise<LocalBriefcaseProps> {\r\n const args = {\r\n ...request,\r\n onProgress: (_a: number, _b: number) => checkAbort(),\r\n };\r\n\r\n if (reportProgress) {\r\n const interval = progressInterval ?? 250; // by default, only send progress events every 250 milliseconds\r\n let nextTime = Date.now() + interval;\r\n args.onProgress = (loaded, total) => {\r\n const now = Date.now();\r\n if (loaded >= total || now >= nextTime) {\r\n nextTime = now + interval;\r\n IpcHost.send(`nativeApp.progress-${request.iModelId}`, { loaded, total });\r\n }\r\n return checkAbort();\r\n };\r\n }\r\n\r\n const downloadPromise = BriefcaseManager.downloadBriefcase(args);\r\n const checkAbort = () => {\r\n const job = Downloads.isInProgress(args.fileName!);\r\n return (job && (job.request as any).abort === 1) ? 1 : 0;\r\n };\r\n return downloadPromise;\r\n }\r\n\r\n public async requestCancelDownloadBriefcase(fileName: string): Promise<boolean> {\r\n const job = Downloads.isInProgress(fileName);\r\n if (job)\r\n (job.request as any).abort = 1;\r\n return job !== undefined;\r\n }\r\n\r\n public async deleteBriefcaseFiles(fileName: string): Promise<void> {\r\n await BriefcaseManager.deleteBriefcaseFiles(fileName, await IModelHost.getAccessToken());\r\n }\r\n\r\n public async getCachedBriefcases(iModelId?: GuidString): Promise<LocalBriefcaseProps[]> {\r\n return BriefcaseManager.getCachedBriefcases(iModelId);\r\n }\r\n\r\n public async storageMgrOpen(storageId: string): Promise<string> {\r\n return NativeAppStorage.open(storageId).id;\r\n }\r\n\r\n public async storageMgrClose(storageId: string, deleteIt: boolean): Promise<void> {\r\n NativeAppStorage.find(storageId).close(deleteIt);\r\n }\r\n\r\n public async storageMgrNames(): Promise<string[]> {\r\n return NativeAppStorage.getStorageNames();\r\n }\r\n\r\n public async storageGetValueType(storageId: string, key: string): Promise<\"number\" | \"string\" | \"boolean\" | \"Uint8Array\" | \"null\" | undefined> {\r\n return NativeAppStorage.find(storageId).getValueType(key);\r\n }\r\n\r\n public async storageGet(storageId: string, key: string): Promise<StorageValue | undefined> {\r\n return NativeAppStorage.find(storageId).getData(key);\r\n }\r\n\r\n public async storageSet(storageId: string, key: string, value: StorageValue): Promise<void> {\r\n NativeAppStorage.find(storageId).setData(key, value);\r\n }\r\n\r\n public async storageRemove(storageId: string, key: string): Promise<void> {\r\n NativeAppStorage.find(storageId).removeData(key);\r\n }\r\n\r\n public async storageKeys(storageId: string): Promise<string[]> {\r\n return NativeAppStorage.find(storageId).getKeys();\r\n }\r\n\r\n public async storageRemoveAll(storageId: string): Promise<void> {\r\n NativeAppStorage.find(storageId).removeAll();\r\n }\r\n}\r\n\r\n/** Options for [[NativeHost.startup]]\r\n * @public */\r\nexport interface NativeHostOpts extends IpcHostOpts {\r\n nativeHost?: {\r\n /** Application name. Used, for example, to name the settings file. If not supplied, defaults to \"iTwinApp\". */\r\n applicationName?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Backend for desktop/mobile native applications\r\n * @public\r\n */\r\nexport class NativeHost {\r\n private static _reachability?: InternetConnectivityStatus;\r\n private static _applicationName: string;\r\n private constructor() { } // no instances - static methods only\r\n\r\n /** @internal */\r\n public static get authorization() { return IModelHost.authorizationClient as NativeAppAuthorizationBackend; }\r\n\r\n /** Event called when the user's sign-in state changes - this may be due to calls to signIn(), signOut() or because the token was refreshed */\r\n public static readonly onAccessTokenChanged = new BeEvent<(token: AccessToken) => void>();\r\n\r\n /** Event called when the internet connectivity changes, if known. */\r\n public static readonly onInternetConnectivityChanged = new BeEvent<(status: InternetConnectivityStatus) => void>();\r\n\r\n private static _appSettingsCacheDir?: string;\r\n\r\n /** Get the local cache folder for application settings */\r\n public static get appSettingsCacheDir(): string {\r\n if (this._appSettingsCacheDir === undefined)\r\n this._appSettingsCacheDir = join(IModelHost.cacheDir, \"appSettings\");\r\n return this._appSettingsCacheDir;\r\n }\r\n\r\n /** Send a notification to the NativeApp connected to this NativeHost. */\r\n public static notifyNativeFrontend<T extends keyof NativeAppNotifications>(methodName: T, ...args: Parameters<NativeAppNotifications[T]>) {\r\n return IpcHost.send(nativeAppNotify, methodName, ...args);\r\n }\r\n\r\n private static _isValid = false;\r\n public static get isValid(): boolean { return this._isValid; }\r\n public static get applicationName() { return this._applicationName; }\r\n /** Get the settings store for this NativeHost. */\r\n public static get settingsStore() {\r\n return NativeAppStorage.open(this.applicationName);\r\n }\r\n\r\n /**\r\n * Start the backend of a native app.\r\n * @note this method calls [[IpcHost.startup]] internally.\r\n */\r\n public static async startup(opt?: NativeHostOpts): Promise<void> {\r\n if (!this.isValid) {\r\n this._isValid = true;\r\n this.onInternetConnectivityChanged.addListener((status: InternetConnectivityStatus) =>\r\n NativeHost.notifyNativeFrontend(\"notifyInternetConnectivityChanged\", status));\r\n this.onAccessTokenChanged.addListener((token: AccessToken) =>\r\n NativeHost.notifyNativeFrontend(\"notifyAccessTokenChanged\", token));\r\n this._applicationName = opt?.nativeHost?.applicationName ?? \"iTwinApp\";\r\n }\r\n\r\n await IpcHost.startup(opt);\r\n if (IpcHost.isValid) // for tests, we use NativeHost but don't have a frontend\r\n NativeAppHandler.register();\r\n }\r\n\r\n /** Shutdown native app backend. Also calls [[IpcHost.shutdown]] */\r\n public static async shutdown(): Promise<void> {\r\n this._isValid = false;\r\n this.onInternetConnectivityChanged.clear();\r\n this.onAccessTokenChanged.clear();\r\n await IpcHost.shutdown();\r\n }\r\n\r\n /** get current value of internet connectivity */\r\n public static checkInternetConnectivity(): InternetConnectivityStatus {\r\n return this._reachability ?? InternetConnectivityStatus.Online;\r\n }\r\n\r\n /**\r\n * Override internet connectivity state\r\n * @param _overridenBy who overrode the value.\r\n * @internal\r\n */\r\n public static overrideInternetConnectivity(_overridenBy: OverriddenBy, status: InternetConnectivityStatus): void {\r\n if (this._reachability !== status) {\r\n this._reachability = status;\r\n RequestGlobalOptions.online = this._reachability === InternetConnectivityStatus.Online;\r\n this.onInternetConnectivityChanged.raiseEvent(status);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NavigationRelationship.d.ts","sourceRoot":"","sources":["../src/NavigationRelationship.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NavigationRelationship.js","sourceRoot":"","sources":["../src/NavigationRelationship.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Relationships\r\n */\r\n\r\n// NOTE: A NavigationRelationship is not an Entity, so is not registered in the ClassRegistry.\r\n// NOTE: It does, however, have a classFullName property for consistency with Entity subclasses.\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { RelatedElement, TypeDefinition } from \"@itwin/core-common\";\r\n\r\n/** Relates a parent Element to child Elements which represent parts of the Entity modeled by the parent Element.\r\n * @public\r\n */\r\nexport class ElementOwnsChildElements extends RelatedElement {\r\n public static classFullName = \"BisCore:ElementOwnsChildElements\";\r\n public constructor(parentId: Id64String, relClassName: string = ElementOwnsChildElements.classFullName) {\r\n super({ id: parentId, relClassName });\r\n }\r\n}\r\n\r\n/** Relates a parent [[Subject]] to [[Subject]] child elements.\r\n * @public\r\n */\r\nexport class SubjectOwnsSubjects extends ElementOwnsChildElements {\r\n public static override classFullName = \"BisCore:SubjectOwnsSubjects\";\r\n public constructor(parentId: Id64String, relClassName: string = SubjectOwnsSubjects.classFullName) {\r\n super(parentId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a parent [[Subject]] to [[InformationPartitionElement]] child elements.\r\n * @public\r\n */\r\nexport class SubjectOwnsPartitionElements extends ElementOwnsChildElements {\r\n public static override classFullName = \"BisCore:SubjectOwnsPartitionElements\";\r\n public constructor(parentId: Id64String, relClassName: string = SubjectOwnsPartitionElements.classFullName) {\r\n super(parentId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a parent [[Category]] to [[SubCategory]] child elements.\r\n * @public\r\n */\r\nexport class CategoryOwnsSubCategories extends ElementOwnsChildElements {\r\n public static override classFullName = \"BisCore:CategoryOwnsSubCategories\";\r\n public constructor(parentId: Id64String, relClassName: string = CategoryOwnsSubCategories.classFullName) {\r\n super(parentId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a parent [[RenderMaterial]] to [[RenderMaterial]] child elements.\r\n * @public\r\n */\r\nexport class RenderMaterialOwnsRenderMaterials extends ElementOwnsChildElements {\r\n public static override classFullName = \"BisCore:RenderMaterialOwnsRenderMaterials\";\r\n public constructor(parentId: Id64String, relClassName: string = RenderMaterialOwnsRenderMaterials.classFullName) {\r\n super(parentId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a parent Element to child Elements which represent **hidden** parts of the Entity.\r\n * @public\r\n */\r\nexport class ElementEncapsulatesElements extends ElementOwnsChildElements {\r\n public static override classFullName = \"BisCore:ElementEncapsulatesElements\";\r\n public constructor(parentId: Id64String, relClassName: string = ElementEncapsulatesElements.classFullName) {\r\n super(parentId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a parent [[PhysicalElement]] to [[PhysicalElement]] children that it assembles.\r\n * @public\r\n */\r\nexport class PhysicalElementAssemblesElements extends ElementOwnsChildElements {\r\n public static override classFullName = \"BisCore:PhysicalElementAssemblesElements\";\r\n public constructor(parentId: Id64String, relClassName: string = PhysicalElementAssemblesElements.classFullName) {\r\n super(parentId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a parent [[ExternalSource]] to its [[ExternalSourceAttachment]] children.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class ExternalSourceOwnsAttachments extends ElementOwnsChildElements {\r\n public static override classFullName = \"BisCore:ExternalSourceOwnsAttachments\";\r\n public constructor(parentId: Id64String, relClassName: string = ExternalSourceOwnsAttachments.classFullName) {\r\n super(parentId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a parent [[FolderLink]] to its [[RepositoryLink]] children.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class FolderContainsRepositories extends ElementOwnsChildElements {\r\n public static override classFullName = \"BisCore:FolderContainsRepositories\";\r\n public constructor(parentId: Id64String, relClassName: string = FolderContainsRepositories.classFullName) {\r\n super(parentId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a [[GeometricElement2d]] to its [[TypeDefinitionElement]]\r\n * @public\r\n */\r\nexport class GeometricElement2dHasTypeDefinition extends TypeDefinition {\r\n public static classFullName = \"BisCore:GeometricElement2dHasTypeDefinition\";\r\n public constructor(id: Id64String, relClassName: string = GeometricElement2dHasTypeDefinition.classFullName) {\r\n super({ id, relClassName });\r\n }\r\n}\r\n\r\n/** Relates a [[GraphicalElement2d]] to its [[GraphicalType2d]]\r\n * @public\r\n */\r\nexport class GraphicalElement2dIsOfType extends GeometricElement2dHasTypeDefinition {\r\n public static override classFullName = \"BisCore:GraphicalElement2dIsOfType\";\r\n public constructor(id: Id64String, relClassName: string = GraphicalElement2dIsOfType.classFullName) {\r\n super(id, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a [[GeometricElement3d]] to its [[TypeDefinitionElement]]\r\n * @public\r\n */\r\nexport class GeometricElement3dHasTypeDefinition extends TypeDefinition {\r\n public static classFullName = \"BisCore:GeometricElement3dHasTypeDefinition\";\r\n public constructor(id: Id64String, relClassName: string = GeometricElement3dHasTypeDefinition.classFullName) {\r\n super({ id, relClassName });\r\n }\r\n}\r\n\r\n/** Relates a [[SpatialLocationElement]] to its [[SpatialLocationType]]\r\n * @public\r\n */\r\nexport class SpatialLocationIsOfType extends GeometricElement3dHasTypeDefinition {\r\n public static override classFullName = \"BisCore:SpatialLocationIsOfType\";\r\n public constructor(id: Id64String, relClassName: string = SpatialLocationIsOfType.classFullName) {\r\n super(id, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a [[PhysicalElement]] to its [[PhysicalType]]\r\n * @public\r\n */\r\nexport class PhysicalElementIsOfType extends GeometricElement3dHasTypeDefinition {\r\n public static override classFullName = \"BisCore:PhysicalElementIsOfType\";\r\n public constructor(id: Id64String, relClassName: string = PhysicalElementIsOfType.classFullName) {\r\n super(id, relClassName);\r\n }\r\n}\r\n\r\n/** Relates a [[PhysicalElement]] to its [[PhysicalMaterial]]\r\n * @public\r\n */\r\nexport class PhysicalElementIsOfPhysicalMaterial extends RelatedElement {\r\n public static classFullName = \"BisCore:PhysicalElementIsOfPhysicalMaterial\";\r\n public constructor(id: Id64String) {\r\n super({ id });\r\n }\r\n}\r\n\r\n/** Relates a [[PhysicalType]] to its [[PhysicalMaterial]]\r\n * @public\r\n */\r\nexport class PhysicalTypeIsOfPhysicalMaterial extends RelatedElement {\r\n public static classFullName = \"BisCore:PhysicalTypeIsOfPhysicalMaterial\";\r\n public constructor(id: Id64String) {\r\n super({ id });\r\n }\r\n}\r\n\r\n/** Relates an [[Element]] and an [[ElementUniqueAspect]] that it owns.\r\n * @public\r\n */\r\nexport class ElementOwnsUniqueAspect extends RelatedElement {\r\n public static classFullName = \"BisCore:ElementOwnsUniqueAspect\";\r\n public constructor(elementId: Id64String, relClassName: string = ElementOwnsUniqueAspect.classFullName) {\r\n super({ id: elementId, relClassName });\r\n }\r\n}\r\n\r\n/** Relates an [[Element]] and an [[ElementMultiAspect]] that it owns.\r\n * @public\r\n */\r\nexport class ElementOwnsMultiAspects extends RelatedElement {\r\n public static classFullName = \"BisCore:ElementOwnsMultiAspects\";\r\n public constructor(elementId: Id64String, relClassName: string = ElementOwnsMultiAspects.classFullName) {\r\n super({ id: elementId, relClassName });\r\n }\r\n}\r\n\r\n/** Relates an [[Element]] and an [[ExternalSourceAspect]] that it owns.\r\n * @public\r\n */\r\nexport class ElementOwnsExternalSourceAspects extends ElementOwnsMultiAspects {\r\n public static override classFullName = \"BisCore:ElementOwnsExternalSourceAspects\";\r\n public constructor(elementId: Id64String, relClassName: string = ElementOwnsExternalSourceAspects.classFullName) {\r\n super(elementId, relClassName);\r\n }\r\n}\r\n\r\n/** Relates an [[ExternalSource]] to the [[RepositoryLink]] that it is persisted in.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class ExternalSourceIsInRepository extends RelatedElement {\r\n public static classFullName = \"BisCore:ExternalSourceIsInRepository\";\r\n public constructor(repositoryId: Id64String, relClassName: string = ExternalSourceIsInRepository.classFullName) {\r\n super({ id: repositoryId, relClassName });\r\n }\r\n}\r\n\r\n/** Relates an [[ExternalSource]] to the [[RepositoryLink]] that it is persisted in.\r\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\r\n * @beta\r\n */\r\nexport class ExternalSourceAttachmentAttachesSource extends RelatedElement {\r\n public static classFullName = \"BisCore:ExternalSourceAttachmentAttachesSource\";\r\n public constructor(externalSourceId: Id64String, relClassName: string = ExternalSourceAttachmentAttachesSource.classFullName) {\r\n super({ id: externalSourceId, relClassName });\r\n }\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PromiseMemoizer.d.ts","sourceRoot":"","sources":["../src/PromiseMemoizer.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC;aAUM,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAT/C,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,GAAG,CAAC;IAEnB,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,SAAS,CAAkB;IAEnC,IAAW,SAAS,IAAI,OAAO,CAAkD;IACjF,IAAW,WAAW,IAAI,OAAO,CAA4B;IAC7D,IAAW,UAAU,IAAI,OAAO,CAA2B;gBACxB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;CAKvD;AAED,gBAAgB;AAChB,oBAAY,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9D,gBAAgB;AAChB,oBAAY,iBAAiB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC;AAE3D;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4E;IAC5G,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;;;;;;OAQG;gBACgB,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,GAAE,MAAY,EAAE,YAAY,GAAE,MAAc;IAO1I,iCAAiC;IAC1B,OAAO,YAAa,GAAG,EAAE,KAAG,iBAAiB,CAAC,CAAC,CAqBpD;IAEF,mCAAmC;IAC5B,cAAc,YAAa,GAAG,EAAE,UAGrC;IAEF,8CAA8C;IACvC,UAAU,aAEf;CACH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PromiseMemoizer.js","sourceRoot":"","sources":["../src/PromiseMemoizer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\n\nimport { Logger } from \"@itwin/core-bentley\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\n\n/** Wrapper around a promise that allows synchronous queries of it's state\n * @internal\n */\nexport class QueryablePromise<T> {\n public result?: T;\n public error?: any;\n\n private _fulfilled: boolean = false;\n private _rejected: boolean = false;\n\n public get isPending(): boolean { return !this.isFulfilled && !this.isRejected; }\n public get isFulfilled(): boolean { return this._fulfilled; }\n public get isRejected(): boolean { return this._rejected; }\n public constructor(public readonly promise: Promise<T>) {\n this.promise\n .then((res: T) => { this.result = res; this._fulfilled = true; })\n .catch((err: any) => { this.error = err; this._rejected = true; });\n }\n}\n\n/** @internal */\nexport type MemoizeFnType<T> = (...args: any[]) => Promise<T>;\n/** @internal */\nexport type GenerateKeyFnType = (...args: any[]) => string;\n\n/** Utility to cache and retrieve results of long running asynchronous functions.\n * The cache is keyed on the input arguments passed to these functions\n * @internal\n */\nexport class PromiseMemoizer<T> {\n private readonly _cachedPromises: Map<string, QueryablePromise<T>> = new Map<string, QueryablePromise<T>>();\n private readonly _memoizeFn: MemoizeFnType<T>;\n private readonly _generateKeyFn: GenerateKeyFnType;\n private readonly _maxCacheSize: number;\n private readonly _cacheTimeout: number;\n\n /**\n * Constructor\n * @param memoizeFn Function to memoize\n * @param generateKeyFn Function to generate the key for the memoized function\n * @param maxCacheSize Maximum size of the memoizer cache.\n * If the maximum cache size is exceeded, fulfilled/rejected entries are first discarded - these\n * may have been unclaimed/orphaned promises. If the cache size is still above the maxCacheSize\n * threshold, the entire cache is then cleared.\n */\n public constructor(memoizeFn: MemoizeFnType<T>, generateKeyFn: GenerateKeyFnType, maxCacheSize: number = 500, cacheTimeout: number = 30000) {\n this._memoizeFn = memoizeFn;\n this._generateKeyFn = generateKeyFn;\n this._maxCacheSize = maxCacheSize;\n this._cacheTimeout = cacheTimeout;\n }\n\n /** Call the memoized function */\n public memoize = (...args: any[]): QueryablePromise<T> => {\n const key: string = this._generateKeyFn(...args);\n let qp: QueryablePromise<T> | undefined = this._cachedPromises.get(key);\n if (qp)\n return qp;\n\n if (this._cachedPromises.size >= this._maxCacheSize) {\n if (this._maxCacheSize > 1)\n Logger.logError(BackendLoggerCategory.PromiseMemoizer, \"Cleared too many unresolved entries in memoizer cache\");\n this.clearCache();\n }\n\n const removeCachedPromise = (v: T) => {\n setTimeout(() => this._cachedPromises.delete(key), this._cacheTimeout);\n return v;\n };\n\n const p = this._memoizeFn(...args).then(removeCachedPromise, (e) => { throw removeCachedPromise(e); });\n qp = new QueryablePromise<T>(p);\n this._cachedPromises.set(key, qp);\n return qp;\n };\n\n /** Delete the memoized function */\n public deleteMemoized = (...args: any[]) => {\n const key: string = this._generateKeyFn(...args);\n this._cachedPromises.delete(key);\n };\n\n /** Clear all entries in the memoizer cache */\n public clearCache = () => {\n this._cachedPromises.clear();\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Relationship.d.ts","sourceRoot":"","sources":["../src/Relationship.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Relationship.js","sourceRoot":"","sources":["../src/Relationship.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Relationships\n */\n\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { IModelError, IModelStatus, RelationshipProps, SourceAndTarget } from \"@itwin/core-common\";\nimport { ECSqlStatement } from \"./ECSqlStatement\";\nimport { Entity } from \"./Entity\";\nimport { IModelDb } from \"./IModelDb\";\n\nexport type { SourceAndTarget, RelationshipProps } from \"@itwin/core-common\"; // for backwards compatibility\n\n/** Base class for all link table ECRelationships\n * @public\n */\nexport class Relationship extends Entity implements RelationshipProps {\n /** @internal */\n public static override get className(): string { return \"Relationship\"; }\n public readonly sourceId: Id64String;\n public readonly targetId: Id64String;\n\n /** @internal */\n constructor(props: RelationshipProps, iModel: IModelDb) {\n super(props, iModel);\n this.sourceId = Id64.fromJSON(props.sourceId);\n this.targetId = Id64.fromJSON(props.targetId);\n }\n\n /** @internal */\n public override toJSON(): RelationshipProps {\n const val = super.toJSON() as RelationshipProps;\n val.sourceId = this.sourceId;\n val.targetId = this.targetId;\n return val;\n }\n\n /**\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when its input has changed or is the output of some upstream relationship whose input has changed.\n * This callback is invoked after the input element has been processed by upstream relationships.\n * A subclass of ElementDrivesElement can re-implement this static method to take some action. onRootChanged may modify the output element only.\n * @param _props The ElementDrivesElement relationship instance.\n * @param _iModel The iModel\n */\n public static onRootChanged(_props: RelationshipProps, _iModel: IModelDb): void { }\n\n /**\n * Callback invoked by saveChanges on an ElementDrivesElement relationship when the relationship instance has been deleted.\n * A subclass of ElementDrivesElement can re-implement this static method to take some action.\n * @param _props The deleted ElementDrivesElement relationship instance.\n * @param _iModel The iModel\n */\n public static onDeletedDependency(_props: RelationshipProps, _iModel: IModelDb): void { }\n\n /** Insert this Relationship into the iModel. */\n public insert(): Id64String { return this.iModel.relationships.insertInstance(this); }\n /** Update this Relationship in the iModel. */\n public update() { this.iModel.relationships.updateInstance(this); }\n /** Delete this Relationship from the iModel. */\n public delete() { this.iModel.relationships.deleteInstance(this); }\n\n public static getInstance<T extends Relationship>(iModel: IModelDb, criteria: Id64String | SourceAndTarget): T { return iModel.relationships.getInstance(this.classFullName, criteria); }\n}\n\n/** A Relationship where one Element refers to another Element\n * @public\n */\nexport class ElementRefersToElements extends Relationship {\n /** @internal */\n public static override get className(): string { return \"ElementRefersToElements\"; }\n /** Create an instance of the Relationship.\n * @param iModel The iModel that will contain the relationship\n * @param sourceId The sourceId of the relationship, that is, the driver element\n * @param targetId The targetId of the relationship, that is, the driven element\n * @return an instance of the specified class.\n */\n public static create<T extends ElementRefersToElements>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): T {\n return iModel.relationships.createInstance({ sourceId, targetId, classFullName: this.classFullName }) as T;\n }\n /** Insert a new instance of the Relationship.\n * @param iModel The iModel that will contain the relationship\n * @param sourceId The sourceId of the relationship, that is, the driver element\n * @param targetId The targetId of the relationship, that is, the driven element\n * @return The Id of the inserted Relationship.\n */\n public static insert<T extends ElementRefersToElements>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String): Id64String {\n const relationship: T = this.create(iModel, sourceId, targetId);\n return iModel.relationships.insertInstance(relationship);\n }\n}\n\n/** Relates a [[DrawingGraphic]] to the [[Element]] that it represents\n * @public\n */\nexport class DrawingGraphicRepresentsElement extends ElementRefersToElements {\n /** @internal */\n public static override get className(): string { return \"DrawingGraphicRepresentsElement\"; }\n}\n\n/** Relates a [[GraphicalElement3d]] to the [[Element]] that it represents\n * @public\n */\nexport class GraphicalElement3dRepresentsElement extends ElementRefersToElements {\n /** @internal */\n public static override get className(): string { return \"GraphicalElement3dRepresentsElement\"; }\n}\n\n/** Relates a [[SynchronizationConfigLink]] to N [[ExternalSource]] instances.\n * Each relationship instance represents an external source processed by the synchronization configuration.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class SynchronizationConfigProcessesSources extends ElementRefersToElements {\n /** @internal */\n public static override get className(): string { return \"SynchronizationConfigProcessesSources\"; }\n}\n\n/** Relates a [[SynchronizationConfigLink]] to *root* [[ExternalSource]] instances.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class SynchronizationConfigSpecifiesRootSources extends SynchronizationConfigProcessesSources {\n /** @internal */\n public static override get className(): string { return \"SynchronizationConfigSpecifiesRootSources\"; }\n}\n\n/** Properties that are common to all types of link table ECRelationships\n * @public\n */\nexport interface ElementGroupsMembersProps extends RelationshipProps {\n memberPriority: number;\n}\n\n/** An ElementRefersToElements relationship where one Element *groups* a set of other Elements.\n * @public\n */\nexport class ElementGroupsMembers extends ElementRefersToElements {\n /** @internal */\n public static override get className(): string { return \"ElementGroupsMembers\"; }\n public memberPriority: number;\n\n constructor(props: ElementGroupsMembersProps, iModel: IModelDb) {\n super(props, iModel);\n this.memberPriority = props.memberPriority;\n }\n\n public static override create<T extends ElementRefersToElements>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, memberPriority: number = 0): T {\n const props: ElementGroupsMembersProps = { sourceId, targetId, memberPriority, classFullName: this.classFullName };\n return iModel.relationships.createInstance(props) as T;\n }\n}\n\n/** Relates a [[DefinitionGroup]] to its [[DefinitionElement]] members.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.10\n * @public\n */\nexport class DefinitionGroupGroupsDefinitions extends ElementGroupsMembers {\n /** @internal */\n public static override get className(): string { return \"DefinitionGroupGroupsDefinitions\"; }\n}\n\n/** Represents group membership where the group Element (and its properties) impart information about the member Elements above mere membership.\n * Implies that properties of the group should be considered as properties of its members.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.11\n * @public\n */\nexport class GroupImpartsToMembers extends ElementGroupsMembers {\n /** @internal */\n public static override get className(): string { return \"GroupImpartsToMembers\"; }\n}\n\n/** Relates an [[ExternalSourceGroup]] to its [[ExternalSource]] members.\n * @note The associated ECClass was added to the BisCore schema in version 1.0.13\n * @beta\n */\nexport class ExternalSourceGroupGroupsSources extends ElementGroupsMembers {\n /** @internal */\n public static override get className(): string { return \"ExternalSourceGroupGroupsSources\"; }\n}\n\n/** Properties that are common to all types of ElementDrivesElements\n * @beta\n */\nexport interface ElementDrivesElementProps extends RelationshipProps {\n status: number;\n priority: number;\n}\n\n/** A Relationship indicating that one Element *drives* another Element.\n * An ElementDrivesElement relationship defines a one-way \"driving\" relationship from the source to the target.\n * When the source of an ElementDrivesElement relationship changes, the ElementDrivesElement itself can get a callback, and both the source and target elements can get callbacks.\n * By inserting ElementDrivesElement relationships, an app can create and store an acyclic directed graph of dependencies between elements.\n *\n * # Defining dependencies\n * Create an ElementDrivesElement relationship to specify that the source element drives the target element.\n * For example, to specify that element e1 drives element e2, create a relationship between them like this:\n * ```ts\n * const ede = ElementDrivesElement.create(iModel, e1id, e2id);\n * ede.insert();\n * ```\n * This creates a persistent relationship. The fact that e1 drives e2 is persisted in the iModel.\n *\n * # Defining dependency graphs\n * When you create multiple ElementDrivesElement relationships, you create a network of dependencies. The target of one may be the source of another.\n * A change in the content of an DgnElement can therefore trigger changes to many downstream elements.\n *\n * For example, to make element e1 drive element e2 and e2 drive another element, e3, create two relationships like this:\n * ```ts\n * const ede12 = ElementDrivesElement.create(iModel, e1id, e2id);\n * const ede23 = ElementDrivesElement.create(iModel, e2id, e3id);\n * ede12.insert();\n * ede23.insert();\n * ```\n * Those two relationships create this graph:\n * ```\n * e1 --> e2 --> e3\n * ```\n * Where the \"-->\" is meant to represent a driving relationship.\n *\n * The order in which you create the relationships does not matter.\n * The graph indicates that e3 depends on e2 and e2 depends on e1.\n *\n * An ElementDrivesElement relationship is between one source element and one target element.\n * Many ElementDrivesElement relationships can point to a given element, and many can point out of it.\n * Thus, you can define many:many relationships.\n * For example:\n * ```ts\n * const ede12 = ElementDrivesElement.create(iModel, e1id, e2id);\n * const ede112 = ElementDrivesElement.create(iModel, e11id, e2id);\n * const ede23 = ElementDrivesElement.create(iModel, e2id, e3id);\n * const ede231 = ElementDrivesElement.create(iModel, e2id, e31id);\n * ede12.insert();\n * ede112.insert();\n * ede23.insert();\n * ede231.insert();\n * ```\n * Creates this graph:\n * ```\n * e1 e3\n * \\ /\n * e2\n * / \\\n * e11 e31\n * ```\n * e2 depends on both e1 and e11. e2 then drives e3 and e31.\n *\n * In an ElementDrivesElement dependency graph, the relationships are the \"edges\" and the Elements are the \"nodes\".\n * The following terms are used when referring to the elements (nodes) in a dependency graph:\n * * Inputs - The sources of all edges that point to the element. This includes all upstream elements that flow into the element.\n * * Outputs - The targets of all edges that point out of the element. This includes all downstream elements.\n *\n * #Subgraph Processing\n * When changes are made, iModel.js finds and processes only the part of the overall graph that is affected. So, for example,\n * suppose we have this graph:\n * ```\n * e1 --> e2 --> e3\n * ```\n * If e1 changes, then the subgraph to be processed is equal to the full graph, as shown.\n *\n * If only e2 changes, then the subgraph to be processed is just:\n * ```\n * e2 --> e3\n * ```\n * If only e3 changes, then the subgraph consists of e3 by itself.\n *\n * Returning to the second example above, suppose we have this graph:\n * ```\n * e1 e3\n * \\ /\n * e2\n * / \\\n * e11 e31\n * ```\n * If e1 is changed, the affected subgraph is:\n * ```\n * e1 e3\n * \\ /\n * e2\n * \\\n * e31\n * ```\n * If e2 is changed, the affected subgraph is:\n * ```\n * e3\n * /\n * e2\n * \\\n * e31\n * ```\n * # Callbacks\n * Once iModel.js has found the affected subgraph to process, it propagates changes through it by making callbacks.\n * Classes for both elements (nodes) and ElementDrivesElements relationships (edges) can receive callbacks.\n *\n * ## ElementDrivesElement Callbacks\n * The following callbacks are invoked on ElementDrivesElement relationship classes (edges):\n * * onRootChanged\n * * onDeletedDependency\n *\n * Note that these are static methods. Their default implementations do nothing.\n * To receive and act on these callbacks, a domain should define a subclass of ElementDrivesElement and use that to create relationships.\n * The subclass should then implement the callbacks that it would like to act on.\n *\n * A ElementDrivesElement subclass callback is expected to make changes to the output element only!\n *\n * ## Element Callbacks\n * The following callbacks are invoked on Element classes (nodes):\n * * Element.onBeforeOutputsHandled\n * * Element.onAllInputsHandled\n *\n * ## Order\n * Callbacks are invoked by BriefcaseDb.saveChanges.\n * They are invoked in dependency (topological) order: driving elements first, then driven elements.\n *\n * Each callback is invoked only once. No matter how many times a given element was changed during the transaction,\n * a callback such as ElementDrivesElement.onRootChanged will be invoked only once.\n * In the same way, no matter how many of its inputs were changed, a callback such as Element.onAllInputsHandled will be\n * invoked only once.\n *\n * For example, suppose we have a graph:\n * ```\n * e1 --> e2 --> e3\n * ```\n *\n * Suppose that e1 is directly modified. No callbacks are made at that time.\n * Later, when BriefcaseDb.saveChanges is called, the following callbacks are made, in order:\n * 1. Element.onBeforeOutputsHandled e1\n * 1. ElementDrivesElement.onRootChanged e1->e2\n * 1. Element.onAllInputsHandled e2\n * 1. ElementDrivesElement.onRootChanged e2->e3\n * 1. Element.onAllInputsHandled e3\n *\n * Suppose that e3 is modified directly and BriefcaseDb.saveChanges is called.\n * Since no input to a relationship was changed, the sub-graph will be empty, and no callbacks will be made.\n *\n * Returning to the second example above, suppose we have this graph:\n * ```\n * e1 e3\n * \\ /\n * e2\n * / \\\n * e11 e31\n * ```\n * If e1 is changed and BriefcaseDb.saveChanges is called, the subgraph is:\n * ```\n * e1 e3\n * \\ /\n * e2\n * \\\n * e31\n * ```\n * The callbacks are:\n * 1. Element.onBeforeOutputsHandled e1\n * 1. ElementDrivesElement.onRootChanged e1->e2\n * 1. Element.onAllInputsHandled e2\n * 1. ElementDrivesElement.onRootChanged e2->e3\n * 1. Element.onAllInputsHandled e3\n * 1. ElementDrivesElement.onRootChanged e2->e31\n * 1. Element.onAllInputsHandled e31\n *\n * (The ElementDrivesElement.)\n *\n * #Errors\n * Circular dependencies are not permitted. If a cycle is detected, that is treated as a fatal error. All ElementDrivesElement relationships\n * involved in a cycle will have their status set to 1, indicating a failure.\n *\n * A callback may call txnManager.reportError to reject an invalid change. It can classify the error as fatal or just a warning.\n * A callback make set the status value of an ElementDrivesElement instance to 1 to indicate a processing falure in that edge.\n *\n * After BriefcaseDb.saveChanges is called, an app should check db.txns.validationErrors and db.txns.hasFatalError to find out if graph-evaluation failed.\n *\n * @beta\n */\nexport class ElementDrivesElement extends Relationship implements ElementDrivesElementProps {\n /** @internal */\n public static override get className(): string { return \"ElementDrivesElement\"; }\n /** Relationship status\n * * 0 indicates no errors. iModel.js sets this after a successful evaluation.\n * * 1 indicates that this driving relationship could not be evaluated. The callback itself can set this to indicate that it failed to process the input changes. Also, iModel.js sets this if it finds that the relationship is part of a circular dependency.\n * * 0x80 The app or callback can set this to tell iModel.js not propagate changes through this relationship.\n */\n public status: number;\n /** Affects the order in which relationships are processed in the case where two relationships have the same output. */\n public priority: number;\n\n /** @internal */\n constructor(props: ElementDrivesElementProps, iModel: IModelDb) {\n super(props, iModel);\n this.status = props.status;\n this.priority = props.priority;\n }\n\n public static create<T extends ElementRefersToElements>(iModel: IModelDb, sourceId: Id64String, targetId: Id64String, priority: number = 0): T {\n const props: ElementDrivesElementProps = { sourceId, targetId, priority, status: 0, classFullName: this.classFullName };\n return iModel.relationships.createInstance(props) as T;\n }\n}\n\n/** Manages [[Relationship]]s.\n * @public\n */\nexport class Relationships {\n private _iModel: IModelDb;\n\n /** @internal */\n constructor(iModel: IModelDb) { this._iModel = iModel; }\n\n /** Create a new instance of a Relationship.\n * @param props The properties of the new Relationship.\n * @throws [[IModelError]] if there is a problem creating the Relationship.\n */\n public createInstance(props: RelationshipProps): Relationship { return this._iModel.constructEntity<Relationship>(props); }\n\n /** Check classFullName to ensure it is a link table relationship class. */\n private checkRelationshipClass(classFullName: string) {\n if (!this._iModel.nativeDb.isLinkTableRelationship(classFullName.replace(\".\", \":\"))) {\n throw new IModelError(DbResult.BE_SQLITE_ERROR, `Class '${classFullName}' must be a relationship class and it should be subclass of BisCore:ElementRefersToElements or BisCore:ElementDrivesElement.`);\n }\n }\n\n /** Insert a new relationship instance into the iModel. The relationship provided must be subclass of BisCore:ElementRefersToElements or BisCore:ElementDrivesElement.\n * @param props The properties of the new relationship.\n * @returns The Id of the newly inserted relationship.\n * @note The id property of the props object is set as a side effect of this function.\n */\n public insertInstance(props: RelationshipProps): Id64String {\n this.checkRelationshipClass(props.classFullName);\n return props.id = this._iModel.nativeDb.insertLinkTableRelationship(props);\n }\n\n /** Update the properties of an existing relationship instance in the iModel.\n * @param props the properties of the relationship instance to update. Any properties that are not present will be left unchanged.\n */\n public updateInstance(props: RelationshipProps): void {\n this._iModel.nativeDb.updateLinkTableRelationship(props);\n }\n\n /** Delete an Relationship instance from this iModel. */\n public deleteInstance(props: RelationshipProps): void {\n this._iModel.nativeDb.deleteLinkTableRelationship(props);\n }\n\n /** Get the props of a Relationship instance\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\n * @param criteria Either the relationship instanceId or the source and target Ids\n * @throws [IModelError]($common) if the relationship is not found or cannot be loaded.\n * @see tryGetInstanceProps\n */\n public getInstanceProps<T extends RelationshipProps>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T {\n const relationshipProps = this.tryGetInstanceProps<T>(relClassFullName, criteria);\n if (undefined === relationshipProps) {\n throw new IModelError(IModelStatus.NotFound, \"Relationship not found\");\n }\n return relationshipProps;\n }\n\n /** Get the props of a Relationship instance\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\n * @param criteria Either the relationship instanceId or the source and target Ids\n * @returns The RelationshipProps or `undefined` if the relationship is not found.\n * @note Useful for cases when a relationship may or may not exist and throwing an `Error` would be overkill.\n * @see getInstanceProps\n */\n public tryGetInstanceProps<T extends RelationshipProps>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T | undefined {\n let props: T | undefined;\n if (typeof criteria === \"string\") {\n props = this._iModel.withPreparedStatement(`SELECT * FROM ${relClassFullName} WHERE ecinstanceid=?`, (stmt: ECSqlStatement) => {\n stmt.bindId(1, criteria);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getRow() as T : undefined;\n });\n } else {\n props = this._iModel.withPreparedStatement(`SELECT * FROM ${relClassFullName} WHERE SourceECInstanceId=? AND TargetECInstanceId=?`, (stmt: ECSqlStatement) => {\n stmt.bindId(1, criteria.sourceId);\n stmt.bindId(2, criteria.targetId);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getRow() as T : undefined;\n });\n }\n if (undefined !== props) {\n props.classFullName = (props as any).className.replace(\".\", \":\");\n }\n return props;\n }\n\n /** Get a Relationship instance\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\n * @param criteria Either the relationship instanceId or the source and target Ids\n * @throws [IModelError]($common) if the relationship is not found or cannot be loaded.\n * @see tryGetInstance\n */\n public getInstance<T extends Relationship>(relClassSqlName: string, criteria: Id64String | SourceAndTarget): T {\n return this._iModel.constructEntity<T>(this.getInstanceProps(relClassSqlName, criteria));\n }\n\n /** Get a Relationship instance\n * @param relClassFullName The full class name of the relationship in the form of \"schema:class\"\n * @param criteria Either the relationship instanceId or the source and target Ids\n * @returns The relationship or `undefined` if the relationship is not found.\n * @note Useful for cases when a relationship may or may not exist and throwing an `Error` would be overkill.\n * @see getInstance\n */\n public tryGetInstance<T extends Relationship>(relClassFullName: string, criteria: Id64String | SourceAndTarget): T | undefined {\n const relationshipProps = this.tryGetInstanceProps<T>(relClassFullName, criteria);\n return undefined !== relationshipProps ? this._iModel.constructEntity<T>(relationshipProps) : undefined;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RpcBackend.d.ts","sourceRoot":"","sources":["../src/RpcBackend.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAiD,WAAW,EAAmD,MAAM,oBAAoB,CAAC;AAIjJ;;;;;;GAMG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAElD;;SAEK;IACL,WAAkB,eAAe,IAAI,WAAW,GAAG,SAAS,CAE3D;IAED,8CAA8C;WAC1B,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAGpF;AAGD,gBAAgB;AAChB,wBAAgB,oBAAoB,SA8DnC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RpcBackend.js","sourceRoot":"","sources":["../src/RpcBackend.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\n// cspell:ignore calltrace\n\nimport * as multiparty from \"multiparty\";\nimport * as FormData from \"form-data\";\nimport { BentleyStatus, HttpServerRequest, IModelError, RpcActivity, RpcInvocation, RpcMultipart, RpcSerializedValue } from \"@itwin/core-common\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Logger } from \"@itwin/core-bentley\";\n\n/**\n * Utility for tracing Rpc activity processing. When multiple Rpc requests are being processed asynchronously, this\n * class can be used to correlate the current calltrace with the originating RpcActivity. This is used for automatic appending\n * of RpcActivity to log messages emitted during Rpc processing. It may also be used to retrieve the user accessToken\n * from the RpcActivity.\n * @public\n */\nexport class RpcTrace {\n private static _storage = new AsyncLocalStorage();\n\n /** Get the [RpcActivity]($common) for the currently executing async, or `undefined` if there is no\n * RpcActivity in the current call stack.\n * */\n public static get currentActivity(): RpcActivity | undefined {\n return RpcTrace._storage.getStore() as RpcActivity | undefined;\n }\n\n /** Start the processing of an RpcActivity. */\n public static async run<T>(activity: RpcActivity, fn: () => Promise<T>): Promise<T> {\n return RpcTrace._storage.run(activity, fn);\n }\n}\n\nlet initialized = false;\n/** @internal */\nexport function initializeRpcBackend() {\n if (initialized)\n return;\n\n initialized = true;\n\n RpcInvocation.runActivity = RpcTrace.run; // redirect the invocation processing to the tracer\n\n // set up static logger metadata to include current RpcActivity information for logs during rpc processing\n Logger.staticMetaData.set(\"rpc\", () => RpcInvocation.sanitizeForLog(RpcTrace.currentActivity));\n\n RpcMultipart.createStream = (value: RpcSerializedValue) => {\n const form = new FormData();\n RpcMultipart.writeValueToForm(form, value);\n return form;\n };\n\n RpcMultipart.parseRequest = async (req: HttpServerRequest) => {\n return new Promise<RpcSerializedValue>((resolve, reject) => {\n const form = new multiparty.Form({ maxFieldsSize: Infinity });\n form.on(\"error\", (err) => {\n reject(err);\n });\n\n const value = RpcSerializedValue.create();\n const data: { [index: string]: { size: number, chunks: Buffer[] } } = {};\n\n form.on(\"part\", (part: multiparty.Part) => {\n part.on(\"data\", (chunk: string | Buffer) => {\n if (part.name === \"objects\") {\n value.objects += chunk.toString();\n } else if (Buffer.isBuffer(chunk)) {\n if (!data[part.name]) {\n data[part.name] = { size: 0, chunks: [] };\n }\n\n data[part.name].size += chunk.byteLength;\n data[part.name].chunks.push(chunk);\n } else {\n throw new IModelError(BentleyStatus.ERROR, \"Unknown input.\");\n }\n });\n });\n\n form.on(\"close\", () => {\n let i = 0;\n for (; ;) {\n const part = data[`data-${i}`];\n if (!part) {\n break;\n }\n\n value.data.push(Buffer.concat(part.chunks, part.size));\n ++i;\n }\n\n resolve(value);\n });\n\n form.parse(req);\n });\n };\n}\n\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SQLiteDb.d.ts","sourceRoot":"","sources":["../src/SQLiteDb.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AAEpE;;GAEG;AACH,qBAAa,QAAS,YAAW,WAAW;IAC1C,OAAO,CAAC,SAAS,CAAC,CAA0B;IAC5C,OAAO,CAAC,qBAAqB,CAAyC;IAEtE,gBAAgB;IAChB,IAAW,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAE7C;;IAKD,8FAA8F;IACvF,OAAO,IAAI,IAAI;IAStB;;OAEG;IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIvC;;OAEG;IACI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIzD,2CAA2C;IAC3C,IAAW,MAAM,IAAI,OAAO,CAAmC;IAE/D,sBAAsB;IACf,OAAO,IAAI,IAAI;IAKtB,oGAAoG;IAC7F,WAAW,IAAI,IAAI;IAI1B,yHAAyH;IAClH,cAAc,IAAI,IAAI;IAI7B;;;;;;;;;;;SAWK;IACE,2BAA2B,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,CAAC,GAAG,CAAC;IAiB7F;;;;;;;;SAQK;IACE,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,CAAC,GAAG,CAAC;IAiBrF;;;;SAIK;IACE,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,eAAe;IAM7E,+BAA+B;IACxB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;CAQzC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SQLiteDb.js","sourceRoot":"","sources":["../src/SQLiteDb.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module SQLiteDb\r\n */\r\n\r\nimport { DbResult, IDisposable, OpenMode } from \"@itwin/core-bentley\";\r\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { SqliteStatement, StatementCache } from \"./SqliteStatement\";\r\n\r\n/** A SQLiteDb file\r\n * @public\r\n */\r\nexport class SQLiteDb implements IDisposable {\r\n private _nativeDb?: IModelJsNative.SQLiteDb;\r\n private _sqliteStatementCache = new StatementCache<SqliteStatement>();\r\n\r\n /** @internal */\r\n public get nativeDb(): IModelJsNative.SQLiteDb {\r\n return this._nativeDb!;\r\n }\r\n\r\n constructor() {\r\n this._nativeDb = new IModelHost.platform.SQLiteDb();\r\n }\r\n /** Call this function when finished with this SQLiteDb. This releases the native resources */\r\n public dispose(): void {\r\n if (!this._nativeDb)\r\n return;\r\n\r\n this.closeDb();\r\n this._nativeDb.dispose();\r\n this._nativeDb = undefined;\r\n }\r\n\r\n /** Create a SQLiteDb\r\n * @param pathName The path to the SQLiteDb file to create.\r\n */\r\n public createDb(pathName: string): void {\r\n this.nativeDb.createDb(pathName);\r\n }\r\n\r\n /** Open a SQLiteDb.\r\n * @param pathName The path to the SQLiteDb file to open\r\n */\r\n public openDb(pathName: string, openMode: OpenMode): void {\r\n this.nativeDb.openDb(pathName, openMode);\r\n }\r\n\r\n /** Returns true if the SQLiteDb is open */\r\n public get isOpen(): boolean { return this.nativeDb.isOpen(); }\r\n\r\n /** Close SQLiteDb. */\r\n public closeDb(): void {\r\n this._sqliteStatementCache.clear();\r\n this.nativeDb.closeDb();\r\n }\r\n\r\n /** Commit the outermost transaction, writing changes to the file. Then, restart the transaction. */\r\n public saveChanges(): void {\r\n this.nativeDb.saveChanges();\r\n }\r\n\r\n /** Abandon (cancel) the outermost transaction, discarding all changes since last save. Then, restart the transaction. */\r\n public abandonChanges(): void {\r\n this.nativeDb.abandonChanges();\r\n }\r\n\r\n /**\r\n * Use a prepared SQL statement, potentially from the statement cache. If the requested statement doesn't exist\r\n * in the statement cache, a new statement is prepared. After the callback completes, the statement is reset and saved\r\n * in the statement cache so it can be reused in the future. Use this method for SQL statements that will be\r\n * reused often and are expensive to prepare. The statement cache holds the most recently used statements, discarding\r\n * the oldest statements as it fills. For statements you don't intend to reuse, instead use [[withSqliteStatement]].\r\n * @param sql The SQLite SQL statement to execute\r\n * @param callback the callback to invoke on the prepared statement\r\n * @returns the value returned by `callback`.\r\n * @see [[withPreparedStatement]]\r\n * @public\r\n */\r\n public withPreparedSqliteStatement<T>(sql: string, callback: (stmt: SqliteStatement) => T): T {\r\n const stmt = this._sqliteStatementCache.findAndRemove(sql) ?? this.prepareSqliteStatement(sql);\r\n const release = () => this._sqliteStatementCache.addOrDispose(stmt);\r\n try {\r\n const val: T = callback(stmt);\r\n if (val instanceof Promise) {\r\n val.then(release, release);\r\n } else {\r\n release();\r\n }\r\n return val;\r\n } catch (err) {\r\n release();\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Prepared and execute a callback on a SQL statement. After the callback completes the statement is disposed.\r\n * Use this method for SQL statements are either not expected to be reused, or are not expensive to prepare.\r\n * For statements that will be reused often, instead use [[withPreparedSqliteStatement]].\r\n * @param sql The SQLite SQL statement to execute\r\n * @param callback the callback to invoke on the prepared statement\r\n * @returns the value returned by `callback`.\r\n * @public\r\n */\r\n public withSqliteStatement<T>(sql: string, callback: (stmt: SqliteStatement) => T): T {\r\n const stmt = this.prepareSqliteStatement(sql);\r\n const release = () => stmt.dispose();\r\n try {\r\n const val: T = callback(stmt);\r\n if (val instanceof Promise) {\r\n val.then(release, release);\r\n } else {\r\n release();\r\n }\r\n return val;\r\n } catch (err) {\r\n release();\r\n throw err;\r\n }\r\n }\r\n\r\n /** Prepare an SQL statement.\r\n * @param sql The SQLite SQL statement to prepare\r\n * @param logErrors Determine if errors are logged or not\r\n * @internal\r\n */\r\n public prepareSqliteStatement(sql: string, logErrors = true): SqliteStatement {\r\n const stmt = new SqliteStatement(sql);\r\n stmt.prepare(this.nativeDb, logErrors);\r\n return stmt;\r\n }\r\n\r\n /** execute an SQL statement */\r\n public executeSQL(sql: string): DbResult {\r\n const stmt = this.prepareSqliteStatement(sql);\r\n try {\r\n return stmt.step();\r\n } finally {\r\n stmt.dispose();\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH;;GAEG;AACH,qBAAa,MAAM;IACjB;;;;OAIG;IACH,WAAkB,UAAU,IAAI,MAAM,CAA4E;IAElH;;;OAGG;IACH,WAAkB,uBAAuB,IAAI,OAAO,CAAkB;IAEtE;;;;;;OAMG;WACW,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAQ3D;;;OAGG;IACH,SAAS;CACV;AAED;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAoC;IAC9E,OAAO;IAEP;;OAEG;WACW,cAAc,CAAC,MAAM,EAAE,OAAO,MAAM;IAOlD;;;;;OAKG;WACW,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAQ3D;;;OAGG;WACW,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,MAAM,GAAG,SAAS;CACjF"}
package/lib/Schema.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAmD;AACnD,oDAAiD;AACjD,mDAAgD;AAEhD;;GAEG;AACH,MAAa,MAAM;IACjB;;;;OAIG;IACI,MAAM,KAAK,UAAU,KAAa,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAElH;;;OAGG;IACI,MAAM,KAAK,uBAAuB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAEtE;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAAC,aAAqB;QAChD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QAC1C,IAAI,cAAc;YAChB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;QAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,gBAA0B,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;CAC/G;AAlCD,wBAkCC;AAED;;GAEG;AACH,MAAa,OAAO;IAElB,gBAAwB,CAAC,CAAC,sBAAsB;IAEhD;;OAEG;IACI,MAAM,CAAC,cAAc,CAAC,MAAqB;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAC/B,MAAM,IAAI,yBAAW,CAAC,2BAAY,CAAC,aAAa,EAAE,WAAW,MAAM,CAAC,UAAU,yBAAyB,CAAC,CAAC;QAC3G,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,UAAkB;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,MAAM;YACtB,6BAAa,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,mBAAmB,CAAC,UAAkB,IAA+B,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;;AAhCpJ,0BAiCC;AAhCyB,0BAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Schema\n */\n\nimport { IModelStatus } from \"@itwin/core-bentley\";\nimport { IModelError } from \"@itwin/core-common\";\nimport { ClassRegistry } from \"./ClassRegistry\";\n\n/** Base class for all schema classes - see [working with schemas and elements in TypeScript]($docs/learning/backend/SchemasAndElementsInTypeScript.md).\n * @public\n */\nexport class Schema {\n /** The name of the BIS schema handled by this Schema.\n * @note Every subclass of Schema ** MUST ** override this method to identify its BIS schema.\n * Failure to do so will ordinarily result in an error when the schema is registered, since there may only\n * be one JavaScript class for a given BIS schema (usually the errant schema will collide with its superclass.)\n */\n public static get schemaName(): string { throw new Error(`you must override static schemaName in ${this.name}`); }\n\n /** if true, this Schema is a proxy for a missing Domain marked with the `BisCore.SchemaHasBehavior` customAttribute.\n * Classes generated for this Schema will disallow protected operations.\n * @internal\n */\n public static get missingRequiredBehavior(): boolean { return false; }\n\n /** Get a semver-compatible string from a padded version string.\n * works on unpadded version strings as well\n * if there is no write version, it will be added\n * @example Schema.toSemverString(\"1.02.03\") === \"1.2.3\"\n * @example Schema.toSemverString(\"1.01\") === \"1.0.1\" // write version was added\n * @beta\n */\n public static toSemverString(paddedVersion: string): string {\n const tuple = paddedVersion.split(\".\").map(Number);\n const noWriteVersion = tuple.length === 2;\n if (noWriteVersion)\n tuple.splice(1, 0, 0); // insert 0 before the second element\n return tuple.join(\".\");\n }\n\n /** Schemas may not be instantiated. The method is not private only because that precludes subclassing. It throws an\n * error if it is ever called.\n * @internal\n */\n protected constructor() { throw new Error(`cannot create an instance of a Schema ${this.constructor.name}`); }\n}\n\n/** Manages registered schemas\n * @public\n */\nexport class Schemas {\n private static readonly _registeredSchemas = new Map<string, typeof Schema>();\n private constructor() { } // this is a singleton\n\n /** Register a schema prior to using it.\n * @throws [[IModelError]] if a schema of the same name is already registered.\n */\n public static registerSchema(schema: typeof Schema) {\n const key = schema.schemaName.toLowerCase();\n if (this.getRegisteredSchema(key))\n throw new IModelError(IModelStatus.DuplicateName, `Schema \"${schema.schemaName}\" is already registered`);\n this._registeredSchemas.set(key, schema);\n }\n\n /** Unregister a schema, by name, if one is already registered.\n * This function is not normally needed, but is useful for cases where a generated *proxy* schema needs to be replaced by the *real* schema.\n * @param schemaName Name of the schema to unregister\n * @return true if the schema was unregistered\n * @internal\n */\n public static unregisterSchema(schemaName: string): boolean {\n const schema = this.getRegisteredSchema(schemaName);\n if (undefined !== schema)\n ClassRegistry.unregisterClassesFrom(schema);\n\n return this._registeredSchemas.delete(schemaName.toLowerCase());\n }\n\n /** Look up a previously registered schema\n * @param schemaName The name of the schema\n * @returns the previously registered schema or undefined if not registered.\n */\n public static getRegisteredSchema(schemaName: string): typeof Schema | undefined { return this._registeredSchemas.get(schemaName.toLowerCase()); }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ServerBasedLocks.d.ts","sourceRoot":"","sources":["../src/ServerBasedLocks.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAkB,OAAO,EAAE,UAAU,EAA0B,MAAM,qBAAqB,CAAC;AAElG,OAAO,EAAW,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC;CAC3C;AASD,gBAAgB;AAChB,qBAAa,gBAAiB,YAAW,WAAW;IAClD,IAAW,aAAa,YAAmB;IAC3C,SAAS,CAAC,QAAQ,CAAC,MAAM,WAAkB;IAC3C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;gBAEvB,MAAM,EAAE,WAAW;IAY/B,KAAK;IAKZ,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB,qBAAqB;IACd,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAQhC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7C,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,uBAAuB;IAgB/B,mGAAmG;IAC5F,kBAAkB,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAK3C,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAM/C,sIAAsI;IACtI,OAAO,CAAC,aAAa;IAUrB,sGAAsG;IACtG,OAAO,CAAC,mBAAmB;IAM3B,mEAAmE;YACrD,eAAe;IAmB7B;;;OAGG;IACU,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9D;;;OAGG;IACU,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D,wGAAwG;IACjG,iBAAiB,CAAC,EAAE,EAAE,UAAU;IAKvC,yDAAyD;IACzD,OAAO,KAAK,iBAAiB,GAAqD;IAElF,uGAAuG;IAChG,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKzE,kGAAkG;IAC3F,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAKvE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ServerBasedLocks.js","sourceRoot":"","sources":["../src/ServerBasedLocks.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { DbResult, Id64, Id64Arg, Id64String, IModelStatus, OpenMode } from \"@itwin/core-bentley\";\r\nimport { IModel, IModelError } from \"@itwin/core-common\";\r\nimport { LockMap, LockState } from \"./BackendHubAccess\";\r\nimport { BriefcaseDb, LockControl } from \"./IModelDb\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { SQLiteDb } from \"./SQLiteDb\";\r\n\r\n/**\r\n * Both the Model and Parent of an element are considered \"owners\" of their member elements. That means:\r\n * 1) they must hold at least a shared lock before an exclusive lock can be acquired for their members\r\n * 2) if they hold an exclusive lock, then all of their members are exclusively locked implicitly.\r\n * @internal\r\n */\r\nexport interface ElementOwners {\r\n readonly modelId: Id64String;\r\n readonly parentId: Id64String | undefined;\r\n}\r\n\r\n// eslint-disable-next-line no-restricted-syntax\r\nconst enum LockOrigin {\r\n Acquired = 0,\r\n NewElement = 1,\r\n Discovered = 2,\r\n}\r\n\r\n/** @internal */\r\nexport class ServerBasedLocks implements LockControl {\r\n public get isServerBased() { return true; }\r\n protected readonly lockDb = new SQLiteDb();\r\n protected readonly briefcase: BriefcaseDb;\r\n\r\n public constructor(iModel: BriefcaseDb) {\r\n this.briefcase = iModel;\r\n const dbName = `${iModel.nativeDb.getTempFileBaseName()}-locks`;\r\n try {\r\n this.lockDb.openDb(dbName, OpenMode.ReadWrite);\r\n } catch (_e) {\r\n this.lockDb.createDb(dbName);\r\n this.lockDb.executeSQL(\"CREATE TABLE locks(id INTEGER PRIMARY KEY NOT NULL,state INTEGER NOT NULL,origin INTEGER)\");\r\n this.lockDb.saveChanges();\r\n }\r\n }\r\n\r\n public close() {\r\n if (this.lockDb.isOpen)\r\n this.lockDb.closeDb();\r\n }\r\n\r\n private getOwners(id: Id64String): ElementOwners {\r\n return this.briefcase.withPreparedSqliteStatement(\"SELECT ModelId,ParentId FROM bis_Element WHERE id=?\", (stmt) => {\r\n stmt.bindId(1, id);\r\n const rc = stmt.step();\r\n if (DbResult.BE_SQLITE_ROW !== rc)\r\n throw new IModelError(rc, `element ${id} not found`);\r\n\r\n return { modelId: stmt.getValueId(0), parentId: stmt.getValueId(1) };\r\n });\r\n }\r\n\r\n private getLockState(id?: Id64String): LockState | undefined {\r\n return (id === undefined || !Id64.isValid(id)) ? undefined : this.lockDb.withPreparedSqliteStatement(\"SELECT state FROM locks WHERE id=?\", (stmt) => {\r\n stmt.bindId(1, id);\r\n return (DbResult.BE_SQLITE_ROW === stmt.step()) ? stmt.getValueInteger(0) : undefined;\r\n });\r\n }\r\n\r\n /** Clear the cache of locally held locks.\r\n * Note: does *not* release locks from server.\r\n */\r\n private clearAllLocks() {\r\n this.lockDb.executeSQL(\"DELETE FROM locks\");\r\n this.lockDb.saveChanges();\r\n }\r\n\r\n /** only for tests */\r\n public getLockCount(state: LockState): number {\r\n return this.lockDb.withSqliteStatement(\"SELECT count(*) FROM locks WHERE state=?\", (stmt) => {\r\n stmt.bindInteger(1, state);\r\n stmt.step();\r\n return stmt.getValueInteger(0);\r\n });\r\n }\r\n\r\n public async releaseAllLocks(): Promise<void> {\r\n await IModelHost.hubAccess.releaseAllLocks(this.briefcase); // throws if unsuccessful\r\n this.clearAllLocks();\r\n }\r\n\r\n private insertLock(id: Id64String, state: LockState, origin: LockOrigin): true {\r\n this.lockDb.withPreparedSqliteStatement(\"INSERT INTO locks(id,state,origin) VALUES (?,?,?) ON CONFLICT(id) DO UPDATE SET state=excluded.state,origin=excluded.origin\", (stmt) => {\r\n stmt.bindId(1, id);\r\n stmt.bindInteger(2, state);\r\n stmt.bindInteger(3, origin);\r\n const rc = stmt.step();\r\n if (DbResult.BE_SQLITE_DONE !== rc)\r\n throw new IModelError(rc, \"can't insert lock into database\");\r\n });\r\n return true;\r\n }\r\n\r\n private ownerHoldsExclusiveLock(id: Id64String | undefined): boolean {\r\n if (id === undefined || id === IModel.rootSubjectId)\r\n return false; // has no owners\r\n\r\n const { modelId, parentId } = this.getOwners(id);\r\n if (this.getLockState(modelId) === LockState.Exclusive || this.getLockState(parentId) === LockState.Exclusive)\r\n return true;\r\n\r\n // see if this model is exclusively locked by one of its owners. If so, save that fact on modelId so future tests won't have to descend.\r\n if (this.ownerHoldsExclusiveLock(modelId))\r\n return this.insertLock(modelId, LockState.Exclusive, LockOrigin.Discovered);\r\n\r\n // see if the parent is exclusively locked by one of its owners. If so, save that fact on parentId so future tests won't have to descend.\r\n return this.ownerHoldsExclusiveLock(parentId) ? this.insertLock(parentId!, LockState.Exclusive, LockOrigin.Discovered) : false;\r\n }\r\n\r\n /** Determine whether an the exclusive lock is already held by an element (or one of its owners) */\r\n public holdsExclusiveLock(id: Id64String): boolean {\r\n // see if we hold the exclusive lock. or if one of the element's owners is exclusively locked (recursively)\r\n return this.getLockState(id) === LockState.Exclusive || this.ownerHoldsExclusiveLock(id);\r\n }\r\n\r\n public holdsSharedLock(id: Id64String): boolean {\r\n const state = this.getLockState(id);\r\n // see if we hold shared or exclusive lock, or if an owner has exclusive lock. If so we implicitly have shared lock, but owner holding shared lock doesn't help.\r\n return (state === LockState.Shared || state === LockState.Exclusive) || this.ownerHoldsExclusiveLock(id);\r\n }\r\n\r\n /** if the shared lock on the element supplied is not already held, add it to the set of shared locks required. Then, check owners. */\r\n private addSharedLock(id: Id64String | undefined, locks: Set<Id64String>) {\r\n // if the id is not valid, or of the lock is already in the set, or if we already hold a shared lock, we're done\r\n // Note: if we hold a shared lock, it is guaranteed that we also hold all required shared locks on owners.\r\n if (id === undefined || !Id64.isValid(id) || locks.has(id) || this.holdsSharedLock(id))\r\n return;\r\n\r\n locks.add(id); // add to set of needed shared locks\r\n this.addOwnerSharedLocks(id, locks); // check parent models and groups\r\n }\r\n\r\n /** add owners (recursively) of an element to a list of required shared locks, if not already held. */\r\n private addOwnerSharedLocks(id: Id64String, locks: Set<Id64String>) {\r\n const el = this.getOwners(id);\r\n this.addSharedLock(el.parentId, locks); // if this element is in a group\r\n this.addSharedLock(el.modelId, locks); // check its model\r\n }\r\n\r\n /** attempt to acquire all necessary locks for a set of elements */\r\n private async acquireAllLocks(locks: LockMap) {\r\n if (locks.size === 0) // no locks are required.\r\n return;\r\n\r\n const sharedLocks = new Set<Id64String>();\r\n for (const lock of locks)\r\n this.addOwnerSharedLocks(lock[0], sharedLocks);\r\n\r\n for (const shared of sharedLocks) {\r\n if (!locks.has(shared)) // we may already be asking for exclusive lock\r\n locks.set(shared, LockState.Shared);\r\n }\r\n\r\n await IModelHost.hubAccess.acquireLocks(this.briefcase, locks); // throws if unsuccessful\r\n for (const lock of locks)\r\n this.insertLock(lock[0], lock[1], LockOrigin.Acquired);\r\n this.lockDb.saveChanges();\r\n }\r\n\r\n /**\r\n * Acquire the exclusive lock on one or more elements. This also attempts to acquire a shared lock on all of the element's owners, recursively.\r\n * If *any* lock cannot be obtained, no locks are acquired.\r\n */\r\n public async acquireExclusiveLock(ids: Id64Arg): Promise<void> {\r\n const locks = new Map<Id64String, LockState>();\r\n for (const id of Id64.iterable(ids)) {\r\n if (!this.holdsExclusiveLock(id))\r\n locks.set(id, LockState.Exclusive);\r\n }\r\n return this.acquireAllLocks(locks);\r\n }\r\n\r\n /**\r\n * Acquire a shared lock on one or more elements. This also attempts to acquire a shared lock on all of the element's owners, recursively.\r\n * If *any* lock cannot be obtained, no locks are acquired.\r\n */\r\n public async acquireSharedLock(ids: Id64Arg): Promise<void> {\r\n const locks = new Map<Id64String, LockState>();\r\n for (const id of Id64.iterable(ids)) {\r\n if (!this.holdsSharedLock(id))\r\n locks.set(id, LockState.Shared);\r\n }\r\n return this.acquireAllLocks(locks);\r\n }\r\n\r\n /** When an element is newly created in a session, we hold the lock on it implicitly. Save that fact. */\r\n public elementWasCreated(id: Id64String) {\r\n this.insertLock(id, LockState.Exclusive, LockOrigin.NewElement);\r\n this.lockDb.saveChanges();\r\n }\r\n\r\n /** locks are not necessary during change propagation. */\r\n private get _locksAreRequired() { return !this.briefcase.txns.isIndirectChanges; }\r\n\r\n /** throw if locks are currently required and the exclusive lock is not held on the supplied element */\r\n public checkExclusiveLock(id: Id64String, type: string, operation: string) {\r\n if (this._locksAreRequired && !this.holdsExclusiveLock(id))\r\n throw new IModelError(IModelStatus.LockNotHeld, `exclusive lock not held on ${type} for ${operation} (id=${id})`);\r\n }\r\n\r\n /** throw if locks are currently required and a shared lock is not held on the supplied element */\r\n public checkSharedLock(id: Id64String, type: string, operation: string) {\r\n if (this._locksAreRequired && !this.holdsSharedLock(id))\r\n throw new IModelError(IModelStatus.LockNotHeld, `shared lock not held on ${type} for ${operation} (id=${id})`);\r\n }\r\n\r\n}\r\n\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqliteStatement.d.ts","sourceRoot":"","sources":["../src/SqliteStatement.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqliteStatement.js","sourceRoot":"","sources":["../src/SqliteStatement.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAoG;AACpG,oDAA4D;AAE5D,6CAA0C;AAiB1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,eAAe;IAG1B,YAA2B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAI,CAAC;IAC5C,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,IAAW,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtC,oEAAoE;IACpE,IAAW,UAAU,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAErE;;;;;;OAMG;IACI,OAAO,CAAC,EAAwE,EAAE,SAAS,GAAG,IAAI;QACvG,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,IAAI,uBAAU,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAM,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED;OACG;IACI,KAAK;QACV,IAAI,CAAC,KAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,sHAAsH;IAC/G,OAAO;QACZ,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,wBAAwB;YAC9C,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;SACxB;IACH,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,SAAS,CAAC,SAAwB,EAAE,KAAU;QACnD,IAAI,IAAc,CAAC;QACnB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACzC,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACxC;aAAM,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;YACtC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;gBACzB,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;;gBAEjD,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SACnD;aAAM,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;YACvC,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1D;aAAM,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;YACtC,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SACjD;aAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;YACrB,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;SAChD;aAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACpD;aAAM,IAAI,KAAK,YAAY,UAAU,EAAE;YACtC,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SAC/C;;YACC,MAAM,IAAI,yBAAW,CAAC,uBAAQ,CAAC,eAAe,EAAE,mBAAmB,KAAK,kCAAkC,CAAC,CAAC;QAE9G,IAAI,IAAI,KAAK,uBAAQ,CAAC,YAAY;YAChC,MAAM,IAAI,yBAAW,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACtD,CAAC;IAEO,SAAS,CAAC,IAAc;QAC9B,IAAI,IAAI,KAAK,uBAAQ,CAAC,YAAY;YAChC,MAAM,IAAI,yBAAW,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACrD,CAAC;IACD;;;OAGG;IACI,WAAW,CAAC,SAAwB,EAAE,GAAW;QACtD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD;;;OAGG;IACI,UAAU,CAAC,SAAwB,EAAE,GAAW;QACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IACD;;;OAGG;IACI,UAAU,CAAC,SAAwB,EAAE,GAAW;QACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,SAAwB,EAAE,EAAc;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD;;;OAGG;IACI,QAAQ,CAAC,SAAwB,EAAE,IAAgB;QACxD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IACD;;;OAGG;IACI,QAAQ,CAAC,SAAwB,EAAE,IAAgB;QACxD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;OAMG;IACI,UAAU,CAAC,MAAsB;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,MAAM,UAAU,GAAW,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,UAAU,GAAQ,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI;oBACjD,SAAS;gBAEX,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;aACxC;YACD,OAAO;SACR;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC1C,MAAM,SAAS,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,UAAU,GAAQ,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI;gBACjD,SAAS;YAEX,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;SACvC;IACH,CAAC;IAED;;OAEG;IACI,aAAa;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,aAAa,EAAE,CAAC;QACzC,IAAI,IAAI,KAAK,uBAAQ,CAAC,YAAY;YAChC,MAAM,IAAI,yBAAW,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;OAUG;IACI,IAAI,KAAe,OAAO,IAAI,CAAC,KAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEtD,4EAA4E;IACrE,cAAc,KAAa,OAAO,IAAI,CAAC,KAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAExE;;OAEG;IACI,QAAQ,CAAC,QAAgB,IAAiB,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,KAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjG;;OAEG;IACI,YAAY,CAAC,QAAgB,IAAgB,OAAO,IAAI,CAAC,KAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG;;MAEE;IACK,cAAc,CAAC,QAAgB,IAAY,OAAO,IAAI,CAAC,KAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG;;MAEE;IACK,eAAe,CAAC,QAAgB,IAAY,OAAO,IAAI,CAAC,KAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClG;;MAEE;IACK,cAAc,CAAC,QAAgB,IAAY,OAAO,IAAI,CAAC,KAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG;;MAEE;IACK,UAAU,CAAC,QAAgB,IAAgB,OAAO,IAAI,CAAC,KAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5F;;MAEE;IACK,YAAY,CAAC,QAAgB,IAAgB,OAAO,IAAI,CAAC,KAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhG;;;;;;;;;;;;OAYG;IACI,MAAM;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACvC,MAAM,GAAG,GAAW,EAAE,CAAC;QACvB,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBACvB,MAAM,QAAQ,GAAW,eAAe,CAAC,8BAA8B,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;gBACzG,IAAI,GAAQ,CAAC;gBACb,QAAQ,WAAW,CAAC,IAAI,EAAE;oBACxB,KAAK,eAAe,CAAC,IAAI;wBACvB,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;wBAC5B,MAAM;oBACR,KAAK,eAAe,CAAC,MAAM;wBACzB,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;wBAC9B,MAAM;oBACR,KAAK,eAAe,CAAC,OAAO;wBAC1B,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC;wBAC/B,MAAM;oBACR,KAAK,eAAe,CAAC,MAAM;wBACzB,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;wBAC9B,MAAM;oBAER;wBACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAClD;gBAED,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;aAC5G;SACF;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,MAAM,CAAC,8BAA8B,CAAC,kBAAuC,EAAE,WAAwB;QAC7G,IAAI,MAAM,GAAG,uBAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAExD,gFAAgF;QAChF,IAAI,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS;YACtB,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;aAC/B;YACH,MAAM,EAAE,CAAC;YACT,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvC,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;SACxB;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;OACG;IACI,IAAI;QACT,OAAO,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC3H,CAAC;IAED,yEAAyE;IAClE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAA4B,OAAO,IAAI,CAAC,CAAC,CAAC;CACnE;AAlSD,0CAkSC;AAED;;;;;;GAMG;AACH,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,8EAA8E;IAC9E,+CAA+C;IAC/C,2DAAW,CAAA;IACX,yDAAU,CAAA;IACV,yDAAU,CAAA;IACV,qDAAQ,CAAA;IACR,qDAAQ,CAAA;AACV,CAAC,EARW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAQ1B;AAED;;;;;GAKG;AACH,MAAa,WAAW;IAItB,YAAmB,IAAoC,EAAE,QAAgB;QACvE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,kDAAkD;IAClD,IAAW,MAAM,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAE/E,uCAAuC;IACvC,IAAW,IAAI,KAAsB,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEvF,gDAAgD;IAChD,IAAW,UAAU,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpF;;;;;;;;;OASG;IACH,IAAW,KAAK;QACd,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,eAAe,CAAC,IAAI;gBACvB,OAAO,SAAS,CAAC;YACnB,KAAK,eAAe,CAAC,IAAI;gBACvB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,eAAe,CAAC,MAAM;gBACzB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,KAAK,eAAe,CAAC,OAAO;gBAC1B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,KAAK,eAAe,CAAC,MAAM;gBACzB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B;gBACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAChD;IACH,CAAC;IAED,4BAA4B;IACrB,OAAO,KAAiB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChF,sCAAsC;IAC/B,SAAS,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChF,uCAAuC;IAChC,UAAU,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClF,sCAAsC;IAC/B,SAAS,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChF,mCAAmC;IAC5B,KAAK,KAAiB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5E,oCAAoC;IAC7B,OAAO,KAAiB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;CACjF;AAzDD,kCAyDC;AAUD;;;;GAIG;AACH,MAAa,cAAc;IAGzB,YAAmB,QAAQ,GAAG,EAAE;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAM,CAAe,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,YAAY,CAAC,IAAU;QAC5B,IAAA,qBAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,iGAAiG;YACjH,OAAO;SACR;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;YACpC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACrB;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,aAAa,CAAC,GAAW;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAjCD,wCAiCC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module SQLite\r\n */\r\n\r\nimport { assert, DbResult, GuidString, Id64String, IDisposable, LRUMap } from \"@itwin/core-bentley\";\r\nimport { ECJsNames, IModelError } from \"@itwin/core-common\";\r\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { IModelHost } from \"./IModelHost\";\r\n\r\n/** Marks a string as either an [Id64String]($core-bentley) or [GuidString]($core-bentley), so\r\n * that it can be passed to the [bindValue]($backend.SqliteStatement) or [bindValues]($backend.SqliteStatement)\r\n * methods of [SqliteStatement]($backend).\r\n * @internal\r\n */\r\nexport interface StringParam {\r\n id?: Id64String;\r\n guid?: GuidString;\r\n}\r\n\r\n/** parameter Index (1-based), or name of the parameter (including the initial ':', '@' or '$')\r\n * @public\r\n */\r\nexport type BindParameter = number | string;\r\n\r\n/** Executes SQLite SQL statements.\r\n *\r\n * A statement must be prepared before it can be executed, and it must be released when no longer needed.\r\n * See [IModelDb.withPreparedSqliteStatement]($backend) or\r\n * [ECDb.withPreparedSqliteStatement]($backend) for a convenient and\r\n * reliable way to prepare, execute, and then release a statement.\r\n *\r\n * A statement may contain parameters that must be filled in before use by calling [SqliteStatement.bindValue]($backend)\r\n * or [SqliteStatement.bindValues]($backend).\r\n *\r\n * Once prepared (and parameters are bound, if any), the statement is executed by calling [SqliteStatement.step]($backend).\r\n * In case of an **SQL SELECT** statement, the current row can be retrieved with [SqliteStatement.getRow]($backend) as\r\n * a whole, or with [SqliteStatement.getValue]($backend) when individual values are needed.\r\n * Alternatively, query results of an **SQL SELECT** statement can be stepped through by using\r\n * standard iteration syntax, such as `for of`.\r\n *\r\n * > Preparing a statement can be time-consuming. The best way to reduce the effect of this overhead is to cache and reuse prepared\r\n * > statements. A cached prepared statement may be used in different places in an app, as long as the statement is general enough.\r\n * > The key to making this strategy work is to phrase a statement in a general way and use placeholders to represent parameters that will vary on each use.\r\n * @public\r\n */\r\nexport class SqliteStatement implements IterableIterator<any>, IDisposable {\r\n private _stmt: IModelJsNative.SqliteStatement | undefined;\r\n\r\n public constructor(private _sql: string) { }\r\n public get stmt() { return this._stmt; }\r\n public get sql() { return this._sql; }\r\n\r\n /** Check if this statement has been prepared successfully or not */\r\n public get isPrepared(): boolean { return undefined !== this._stmt; }\r\n\r\n /** Prepare this statement prior to first use.\r\n * @param db The DgnDb or ECDb to prepare the statement against\r\n * @param sql The SQL statement string to prepare\r\n * @param logErrors Determine if errors are logged or not\r\n * @throws if the SQL statement cannot be prepared. Normally, prepare fails due to SQL syntax errors or references to tables or properties that do not exist.\r\n * The error.message property will provide details.\r\n */\r\n public prepare(db: IModelJsNative.DgnDb | IModelJsNative.ECDb | IModelJsNative.SQLiteDb, logErrors = true): void {\r\n if (this.isPrepared)\r\n throw new Error(\"SqliteStatement is already prepared\");\r\n this._stmt = new IModelHost.platform.SqliteStatement();\r\n this._stmt.prepare(db, this._sql, logErrors);\r\n }\r\n\r\n /** Indicates whether the prepared statement makes no **direct* changes to the content of the file\r\n * or not. See [SQLite docs](https://www.sqlite.org/c3ref/stmt_readonly.html) for details.\r\n */\r\n public get isReadonly(): boolean {\r\n return this._stmt!.isReadonly();\r\n }\r\n\r\n /** Reset this statement so that the next call to step will return the first row, if any.\r\n */\r\n public reset(): void {\r\n this._stmt!.reset();\r\n }\r\n\r\n /** Call this function when finished with this statement. This releases the native resources held by the statement. */\r\n public dispose(): void {\r\n if (this._stmt) {\r\n this._stmt.dispose(); // free native statement\r\n this._stmt = undefined;\r\n }\r\n }\r\n\r\n /** Binds a value to the specified SQL parameter.\r\n * The value must be of one of these types:\r\n * JavaScript Type | SQLite Type\r\n * --- | ---\r\n * undefined | NULL\r\n * boolean | INTEGER with true being bound as 1 and false as 0\r\n * number | INTEGER if number is integral or REAL if number is not integral\r\n * string | TEXT\r\n * Uint8Array or ArrayBuffer | BLOB\r\n * [StringParam]($backend) where member **id** is set | INTEGER\r\n * [StringParam]($backend) where member **guid** is set | BLOB\r\n *\r\n * @param parameter Index (1-based) or name of the parameter (including the initial ':', '@' or '$')\r\n * @param value Value to bind.\r\n * @throws [IModelError]($common) if the value is of an unsupported type or in\r\n * case of other binding errors.\r\n */\r\n public bindValue(parameter: BindParameter, value: any): void {\r\n let stat: DbResult;\r\n if (value === undefined || value === null) {\r\n stat = this._stmt!.bindNull(parameter);\r\n } else if (typeof (value) === \"number\") {\r\n if (Number.isInteger(value))\r\n stat = this._stmt!.bindInteger(parameter, value);\r\n else\r\n stat = this._stmt!.bindDouble(parameter, value);\r\n } else if (typeof (value) === \"boolean\") {\r\n stat = this._stmt!.bindInteger(parameter, value ? 1 : 0);\r\n } else if (typeof (value) === \"string\") {\r\n stat = this._stmt!.bindString(parameter, value);\r\n } else if (!!value.id) {\r\n stat = this._stmt!.bindId(parameter, value.id);\r\n } else if (!!value.guid) {\r\n stat = this._stmt!.bindGuid(parameter, value.guid);\r\n } else if (value instanceof Uint8Array) {\r\n stat = this._stmt!.bindBlob(parameter, value);\r\n } else\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, `Parameter value ${value} is of an unsupported data type.`);\r\n\r\n if (stat !== DbResult.BE_SQLITE_OK)\r\n throw new IModelError(stat, \"Error in bindValue\");\r\n }\r\n\r\n private checkBind(stat: DbResult) {\r\n if (stat !== DbResult.BE_SQLITE_OK)\r\n throw new IModelError(stat, \"SQLite Bind error\");\r\n }\r\n /** Bind an integer parameter\r\n * @param parameter Index (1-based) or name of the parameter (including the initial ':', '@' or '$')\r\n * @param val integer to bind.\r\n */\r\n public bindInteger(parameter: BindParameter, val: number) {\r\n this.checkBind(this._stmt!.bindInteger(parameter, val));\r\n }\r\n /** Bind a double parameter\r\n * @param parameter Index (1-based) or name of the parameter (including the initial ':', '@' or '$')\r\n * @param val double to bind.\r\n */\r\n public bindDouble(parameter: BindParameter, val: number) {\r\n this.checkBind(this._stmt!.bindDouble(parameter, val));\r\n }\r\n /** Bind a string parameter\r\n * @param parameter Index (1-based) or name of the parameter (including the initial ':', '@' or '$')\r\n * @param val string to bind.\r\n */\r\n public bindString(parameter: BindParameter, val: string) {\r\n this.checkBind(this._stmt!.bindString(parameter, val));\r\n }\r\n /** Bind an Id64String parameter as a 64-bit integer\r\n * @param parameter Index (1-based) or name of the parameter (including the initial ':', '@' or '$')\r\n * @param val Id to bind.\r\n */\r\n public bindId(parameter: BindParameter, id: Id64String) {\r\n this.checkBind(this._stmt!.bindId(parameter, id));\r\n }\r\n /** Bind a Guid parameter\r\n * @param parameter Index (1-based) or name of the parameter (including the initial ':', '@' or '$')\r\n * @param val Guid to bind.\r\n */\r\n public bindGuid(parameter: BindParameter, guid: GuidString) {\r\n this.checkBind(this._stmt!.bindGuid(parameter, guid));\r\n }\r\n /** Bind a blob parameter\r\n * @param parameter Index (1-based) or name of the parameter (including the initial ':', '@' or '$')\r\n * @param val blob to bind.\r\n */\r\n public bindBlob(parameter: BindParameter, blob: Uint8Array) {\r\n this.checkBind(this._stmt!.bindBlob(parameter, blob));\r\n }\r\n\r\n /** Bind values to all parameters in the statement.\r\n * @param values The values to bind to the parameters.\r\n * Pass an *array* of values if the parameters are *positional*.\r\n * Pass an *object of the values keyed on the parameter name* for *named parameters*.\r\n * The values in either the array or object must match the respective types of the parameter.\r\n * See [[SqliteStatement.bindValue]] for details on the supported types.\r\n */\r\n public bindValues(values: any[] | object): void {\r\n if (Array.isArray(values)) {\r\n for (let i = 0; i < values.length; i++) {\r\n const paramIndex: number = i + 1;\r\n const paramValue: any = values[i];\r\n if (paramValue === undefined || paramValue === null)\r\n continue;\r\n\r\n this.bindValue(paramIndex, paramValue);\r\n }\r\n return;\r\n }\r\n\r\n for (const entry of Object.entries(values)) {\r\n const paramName: string = entry[0];\r\n const paramValue: any = entry[1];\r\n if (paramValue === undefined || paramValue === null)\r\n continue;\r\n\r\n this.bindValue(paramName, paramValue);\r\n }\r\n }\r\n\r\n /** Clear any bindings that were previously set on this statement.\r\n * @throws [IModelError]($common) in case of errors\r\n */\r\n public clearBindings(): void {\r\n const stat = this._stmt!.clearBindings();\r\n if (stat !== DbResult.BE_SQLITE_OK)\r\n throw new IModelError(stat, \"Error in clearBindings\");\r\n }\r\n\r\n /** Step this statement to the next row.\r\n *\r\n * For **SQL SELECT** statements the method returns\r\n * - [DbResult.BE_SQLITE_ROW]($core-bentley) if the statement now points successfully to the next row.\r\n * - [DbResult.BE_SQLITE_DONE]($core-bentley) if the statement has no more rows.\r\n * - Error status in case of errors.\r\n *\r\n * For **SQL INSERT, UPDATE, DELETE** statements the method returns\r\n * - [DbResult.BE_SQLITE_DONE]($core-bentley) if the statement has been executed successfully.\r\n * - Error status in case of errors.\r\n */\r\n public step(): DbResult { return this._stmt!.step(); }\r\n\r\n /** Get the query result's column count (only for SQL SELECT statements). */\r\n public getColumnCount(): number { return this._stmt!.getColumnCount(); }\r\n\r\n /** Get the value for the column at the given index in the query result.\r\n * @param columnIx Index of SQL column in query result (0-based)\r\n */\r\n public getValue(columnIx: number): SqliteValue { return new SqliteValue(this._stmt!, columnIx); }\r\n\r\n /** Get a value as a blob\r\n * @param colIndex Index of SQL column in query result (0-based)\r\n */\r\n public getValueBlob(colIndex: number): Uint8Array { return this._stmt!.getValueBlob(colIndex); }\r\n /** Get a value as a double\r\n * @param colIndex Index of SQL column in query result (0-based)\r\n */\r\n public getValueDouble(colIndex: number): number { return this._stmt!.getValueDouble(colIndex); }\r\n /** Get a value as a integer\r\n * @param colIndex Index of SQL column in query result (0-based)\r\n */\r\n public getValueInteger(colIndex: number): number { return this._stmt!.getValueInteger(colIndex); }\r\n /** Get a value as a string\r\n * @param colIndex Index of SQL column in query result (0-based)\r\n */\r\n public getValueString(colIndex: number): string { return this._stmt!.getValueString(colIndex); }\r\n /** Get a value as an Id\r\n * @param colIndex Index of SQL column in query result (0-based)\r\n */\r\n public getValueId(colIndex: number): Id64String { return this._stmt!.getValueId(colIndex); }\r\n /** Get a value as a Guid\r\n * @param colIndex Index of SQL column in query result (0-based)\r\n */\r\n public getValueGuid(colIndex: number): GuidString { return this._stmt!.getValueGuid(colIndex); }\r\n\r\n /** Get the current row.\r\n * The returned row is formatted as JavaScript object where every SELECT clause item becomes a property in the JavaScript object.\r\n *\r\n * The SQL select clause item's name becomes the member name of the JavaScript object, **with the first character lowered**.\r\n *\r\n * SQLite Type | JavaScript Type\r\n * --- | ---\r\n * [SqliteValueType.Null]($backend) | undefined\r\n * [SqliteValueType.Integer]($backend) | number\r\n * [SqliteValueType.Double]($backend) | number\r\n * [SqliteValueType.String]($backend) | string\r\n * [SqliteValueType.Blob]($backend) | Uint8Array\r\n */\r\n public getRow(): any {\r\n const colCount = this.getColumnCount();\r\n const row: object = {};\r\n const duplicatePropNames = new Map<string, number>();\r\n for (let i = 0; i < colCount; i++) {\r\n const sqliteValue = this.getValue(i);\r\n if (!sqliteValue.isNull) {\r\n const propName: string = SqliteStatement.determineResultRowPropertyName(duplicatePropNames, sqliteValue);\r\n let val: any;\r\n switch (sqliteValue.type) {\r\n case SqliteValueType.Blob:\r\n val = sqliteValue.getBlob();\r\n break;\r\n case SqliteValueType.Double:\r\n val = sqliteValue.getDouble();\r\n break;\r\n case SqliteValueType.Integer:\r\n val = sqliteValue.getInteger();\r\n break;\r\n case SqliteValueType.String:\r\n val = sqliteValue.getString();\r\n break;\r\n\r\n default:\r\n throw new Error(\"Unsupported SqliteValueType\");\r\n }\r\n\r\n Object.defineProperty(row, propName, { enumerable: true, configurable: true, writable: true, value: val });\r\n }\r\n }\r\n return row;\r\n }\r\n\r\n private static determineResultRowPropertyName(duplicatePropNames: Map<string, number>, sqliteValue: SqliteValue): string {\r\n let jsName = ECJsNames.toJsName(sqliteValue.columnName);\r\n\r\n // now check duplicates. If there are, append a numeric suffix to the duplicates\r\n let suffix = duplicatePropNames.get(jsName);\r\n if (suffix === undefined)\r\n duplicatePropNames.set(jsName, 0);\r\n else {\r\n suffix++;\r\n duplicatePropNames.set(jsName, suffix);\r\n jsName += `_${suffix}`;\r\n }\r\n\r\n return jsName;\r\n }\r\n\r\n /** Calls step when called as an iterator.\r\n */\r\n public next(): IteratorResult<any> {\r\n return DbResult.BE_SQLITE_ROW === this.step() ? { done: false, value: this.getRow() } : { done: true, value: undefined };\r\n }\r\n\r\n /** The iterator that will step through the results of this statement. */\r\n public [Symbol.iterator](): IterableIterator<any> { return this; }\r\n}\r\n\r\n/** Data type of a value in in an SQLite SQL query result.\r\n * See also:\r\n * - [SqliteValue]($backend)\r\n * - [SqliteStatement]($backend)\r\n * - [SqliteStatement.getValue]($backend)\r\n * @public\r\n */\r\nexport enum SqliteValueType {\r\n // do not change the values of that enum. It must correspond to the respective\r\n // enum DbValueType in the native BeSQLite API.\r\n Integer = 1,\r\n Double = 2,\r\n String = 3,\r\n Blob = 4,\r\n Null = 5,\r\n}\r\n\r\n/** Value of a column in a row of an SQLite SQL query result.\r\n * See also:\r\n * - [SqliteStatement]($backend)\r\n * - [SqliteStatement.getValue]($backend)\r\n * @public\r\n */\r\nexport class SqliteValue {\r\n private readonly _stmt: IModelJsNative.SqliteStatement;\r\n private readonly _colIndex: number;\r\n\r\n public constructor(stmt: IModelJsNative.SqliteStatement, colIndex: number) {\r\n this._stmt = stmt;\r\n this._colIndex = colIndex;\r\n }\r\n\r\n /** Indicates whether the value is NULL or not. */\r\n public get isNull(): boolean { return this._stmt.isValueNull(this._colIndex); }\r\n\r\n /** Gets the data type of the value. */\r\n public get type(): SqliteValueType { return this._stmt.getColumnType(this._colIndex); }\r\n\r\n /** Gets the name of the column of the value. */\r\n public get columnName(): string { return this._stmt.getColumnName(this._colIndex); }\r\n\r\n /** Gets the SqlValue as JavaScript value.\r\n *\r\n * SQLite Type | JavaScript Type\r\n * --- | ---\r\n * [SqliteValueType.Null]($backend) | undefined\r\n * [SqliteValueType.Integer]($backend) | number\r\n * [SqliteValueType.Double]($backend) | number\r\n * [SqliteValueType.String]($backend) | string\r\n * [SqliteValueType.Blob]($backend) | Uint8Array\r\n */\r\n public get value(): any {\r\n switch (this.type) {\r\n case SqliteValueType.Null:\r\n return undefined;\r\n case SqliteValueType.Blob:\r\n return this.getBlob();\r\n case SqliteValueType.Double:\r\n return this.getDouble();\r\n case SqliteValueType.Integer:\r\n return this.getInteger();\r\n case SqliteValueType.String:\r\n return this.getString();\r\n default:\r\n throw new Error(\"Unhandled SqliteValueType\");\r\n }\r\n }\r\n\r\n /** Get the value as BLOB */\r\n public getBlob(): Uint8Array { return this._stmt.getValueBlob(this._colIndex); }\r\n /** Get the value as a double value */\r\n public getDouble(): number { return this._stmt.getValueDouble(this._colIndex); }\r\n /** Get the value as a integer value */\r\n public getInteger(): number { return this._stmt.getValueInteger(this._colIndex); }\r\n /** Get the value as a string value */\r\n public getString(): string { return this._stmt.getValueString(this._colIndex); }\r\n /** Get the value as an Id value */\r\n public getId(): Id64String { return this._stmt.getValueId(this._colIndex); }\r\n /** Get the value as a Guid value */\r\n public getGuid(): GuidString { return this._stmt.getValueGuid(this._colIndex); }\r\n}\r\n\r\ninterface Statement {\r\n isPrepared: boolean;\r\n sql: string;\r\n dispose(): void;\r\n reset(): void;\r\n clearBindings(): void;\r\n}\r\n\r\n/** A cache for previously prepared SqliteStatements.\r\n * It only holds Statements after they are no longer in use, resetting and clearing their bindings before saving them.\r\n * When a request to use a statement from the cache is made, it is first removed from the cache.\r\n * @internal\r\n */\r\nexport class StatementCache<Stmt extends Statement> {\r\n private _cache: LRUMap<string, Stmt>;\r\n\r\n public constructor(maxCount = 40) {\r\n this._cache = new LRUMap<string, Stmt>(maxCount);\r\n }\r\n\r\n public get size() { return this._cache.size; }\r\n public addOrDispose(stmt: Stmt): void {\r\n assert(stmt.isPrepared);\r\n\r\n const existing = this._cache.get(stmt.sql);\r\n if (existing !== undefined) {\r\n stmt.dispose(); // we already have a statement with this sql cached, we can't save another one so just dispose it\r\n return;\r\n }\r\n if (this._cache.size >= this._cache.limit) {\r\n const oldest = this._cache.shift()!;\r\n oldest[1].dispose();\r\n }\r\n stmt.reset();\r\n stmt.clearBindings();\r\n this._cache.set(stmt.sql, stmt);\r\n }\r\n\r\n public findAndRemove(sql: string): Stmt | undefined {\r\n return this._cache.delete(sql);\r\n }\r\n\r\n public clear() {\r\n this._cache.forEach((stmt) => stmt.dispose());\r\n this._cache.clear();\r\n }\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Texture.d.ts","sourceRoot":"","sources":["../src/Texture.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EACL,mBAAmB,EAAe,IAAI,EAAE,cAAc,EAAY,iBAAiB,EAAE,YAAY,EAClG,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;IACpE,IAAI,EAAE,mBAAmB,GAAG,UAAU,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,iBAAiB;IAC5C,gBAAgB;IAChB,WAA2B,SAAS,IAAI,MAAM,CAAsB;IAC7D,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAE5B,gBAAgB;gBACJ,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ;IAOvD,gBAAgB;IACA,MAAM,IAAI,YAAY;IAQtC;;;;OAIG;WACW,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5F;;;;;;;;;;OAUG;WACW,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,GAAG,mBAAmB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAc9L;;;;;;;;;;OAUG;WACW,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,GAAG,mBAAmB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU;CAIlM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Texture.js","sourceRoot":"","sources":["../src/Texture.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,oDAE4B;AAC5B,uCAA8C;AAW9C;;GAEG;AACH,MAAa,OAAQ,SAAQ,2BAAiB;IAO5C,gBAAgB;IAChB,YAAY,KAAyB,EAAE,MAAgB;QACrD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,iCAAmB,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACvG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACvC,CAAC;IAZD,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,SAAS,CAAC,CAAC,CAAC;IAapE,gBAAgB;IACA,MAAM;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAkB,CAAC;QAC3C,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,GAAG,CAAC,IAAI,GAAG,iCAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,UAAU,CAAC,MAAgB,EAAE,YAA4B,EAAE,IAAY;QACnF,MAAM,QAAQ,GAAa,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAW,CAAC,OAAO,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,kBAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpH,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,aAAa,CAAC,QAAkB,EAAE,iBAA6B,EAAE,IAAY,EAAE,MAAyB,EAAE,IAAsC,EAAE,WAAoB;QAClL,MAAM,YAAY,GAAuB;YACvC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC;YACxD,MAAM;YACN,IAAI;YACJ,WAAW;YACX,KAAK,EAAE,iBAAiB;YACxB,SAAS,EAAE,KAAK;SACjB,CAAC;QAEF,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,aAAa,CAAC,QAAkB,EAAE,iBAA6B,EAAE,IAAY,EAAE,MAAyB,EAAE,IAAsC,EAAE,WAAoB;QAClL,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACjG,OAAO,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;CACF;AA1ED,0BA0EC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Elements\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Base64EncodedString, BisCodeSpec, Code, CodeScopeProps, CodeSpec, ImageSourceFormat, TextureProps,\r\n} from \"@itwin/core-common\";\r\nimport { DefinitionElement } from \"./Element\";\r\nimport { IModelDb } from \"./IModelDb\";\r\n\r\n/** A [TextureProps]($common) in which the image data can be specified either as a base-64-encoded string or a Uint8Array.\r\n * @see [[Texture]] constructor.\r\n * @internal\r\n */\r\nexport interface TextureCreateProps extends Omit<TextureProps, \"data\"> {\r\n data: Base64EncodedString | Uint8Array;\r\n}\r\n\r\n/** Defines a rendering texture that is associated with a Material and applied to surface geometry.\r\n * @public\r\n */\r\nexport class Texture extends DefinitionElement {\r\n /** @internal */\r\n public static override get className(): string { return \"Texture\"; }\r\n public format: ImageSourceFormat;\r\n public data: Uint8Array;\r\n public description?: string;\r\n\r\n /** @internal */\r\n constructor(props: TextureCreateProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.format = props.format;\r\n this.data = typeof props.data === \"string\" ? Base64EncodedString.toUint8Array(props.data) : props.data;\r\n this.description = props.description;\r\n }\r\n\r\n /** @internal */\r\n public override toJSON(): TextureProps {\r\n const val = super.toJSON() as TextureProps;\r\n val.format = this.format;\r\n val.data = Base64EncodedString.fromUint8Array(this.data);\r\n val.description = this.description;\r\n return val;\r\n }\r\n\r\n /** Create a Code for a Texture given a name that is meant to be unique within the scope of the specified DefinitionModel.\r\n * @param iModel The IModelDb\r\n * @param scopeModelId The Id of the DefinitionModel that contains the Texture and provides the scope for its name.\r\n * @param name The Texture name\r\n */\r\n public static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, name: string): Code {\r\n const codeSpec: CodeSpec = iModel.codeSpecs.getByName(BisCodeSpec.texture);\r\n return 0 === name.length ? Code.createEmpty() : new Code({ spec: codeSpec.id, scope: scopeModelId, value: name });\r\n }\r\n\r\n /** Create a texture with the given parameters.\r\n * @param iModelDb The iModel to contain the texture.\r\n * @param definitionModelId The [[DefinitionModel]] to contain the texture.\r\n * @param name The name to serve as the texture's [Code]($common) value.\r\n * @param format The format of the image data.\r\n * @param data The image data in the format specified by `format`.\r\n * @param description An optional description of the texture\r\n * @returns The newly constructed Texture element.\r\n * @throws [[IModelError]] if unable to create the element.\r\n * @see [[insertTexture]] to insert a new texture into the iModel.\r\n */\r\n public static createTexture(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Texture {\r\n const textureProps: TextureCreateProps = {\r\n classFullName: this.classFullName,\r\n code: this.createCode(iModelDb, definitionModelId, name),\r\n format,\r\n data,\r\n description,\r\n model: definitionModelId,\r\n isPrivate: false,\r\n };\r\n\r\n return new Texture(textureProps, iModelDb);\r\n }\r\n\r\n /** Insert a new texture into a [[DefinitionModel]].\r\n * @param iModelDb The iModel to contain the texture.\r\n * @param definitionModelId The [[DefinitionModel]] to contain the texture.\r\n * @param name The name to serve as the texture's [Code]($common) value.\r\n * @param format The format of the image data.\r\n * @param data The image data in the format specified by `format`.\r\n * @param description An optional description of the texture\r\n * @returns The Id of the newly-inserted texture element.\r\n * @throws [[IModelError]] if unable to insert the element.\r\n * @see [[insertTexture]] to insert a new texture into the iModel.\r\n */\r\n public static insertTexture(iModelDb: IModelDb, definitionModelId: Id64String, name: string, format: ImageSourceFormat, data: Uint8Array | Base64EncodedString, description?: string): Id64String {\r\n const texture = this.createTexture(iModelDb, definitionModelId, name, format, data, description);\r\n return iModelDb.elements.insertElement(texture);\r\n }\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TxnManager.d.ts","sourceRoot":"","sources":["../src/TxnManager.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TxnManager.js","sourceRoot":"","sources":["../src/TxnManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport {\r\n assert, BeEvent, BentleyError, compareStrings, CompressedId64Set, DbResult, Id64Array, Id64String, IModelStatus, IndexMap, Logger, OrderedId64Array,\r\n} from \"@itwin/core-bentley\";\r\nimport { ChangedEntities, EntityIdAndClassIdIterable, ModelGeometryChangesProps, ModelIdAndGeometryGuid } from \"@itwin/core-common\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { BriefcaseDb, StandaloneDb } from \"./IModelDb\";\r\nimport { IpcHost } from \"./IpcHost\";\r\nimport { Relationship, RelationshipProps } from \"./Relationship\";\r\nimport { SqliteStatement } from \"./SqliteStatement\";\r\n\r\n/** A string that identifies a Txn.\r\n * @public\r\n */\r\nexport type TxnIdString = string;\r\n\r\n/** An error generated during dependency validation.\r\n * @see [[TxnManager.validationErrors]].\r\n * @public\r\n */\r\nexport interface ValidationError {\r\n /** If true, txn is aborted. */\r\n fatal: boolean;\r\n /** The type of error. */\r\n errorType: string;\r\n /** Optional description of what went wrong. */\r\n message?: string;\r\n}\r\n\r\n/** Describes a set of [[Element]]s or [[Model]]s that changed as part of a transaction.\r\n * @see [[TxnManager.onElementsChanged]] and [[TxnManager.onModelsChanged]].\r\n * @public\r\n */\r\nexport interface TxnChangedEntities {\r\n /** The entities that were inserted by the transaction. */\r\n readonly inserts: EntityIdAndClassIdIterable;\r\n /** The entities that were deleted by the transaction. */\r\n readonly deletes: EntityIdAndClassIdIterable;\r\n /** The entities that were modified by the transaction, including any [[Element]]s for which one of their [[ElementAspect]]s was changed. */\r\n readonly updates: EntityIdAndClassIdIterable;\r\n}\r\n\r\ntype EntitiesChangedEvent = BeEvent<(changes: TxnChangedEntities) => void>;\r\n\r\n/** Strictly for tests. @internal */\r\nexport function setMaxEntitiesPerEvent(max: number): number {\r\n const prevMax = ChangedEntitiesProc.maxPerEvent;\r\n ChangedEntitiesProc.maxPerEvent = max;\r\n return prevMax;\r\n}\r\n\r\n/** Maintains an ordered array of entity Ids and a parallel array containing the index of the corresponding entity's class Id. */\r\nclass ChangedEntitiesArray {\r\n public readonly entityIds = new OrderedId64Array();\r\n private readonly _classIndices: number[] = [];\r\n private readonly _classIds: IndexMap<Id64String>;\r\n\r\n public constructor(classIds: IndexMap<Id64String>) {\r\n this._classIds = classIds;\r\n }\r\n\r\n public insert(entityId: Id64String, classId: Id64String): void {\r\n const entityIndex = this.entityIds.insert(entityId);\r\n const classIndex = this._classIds.insert(classId);\r\n assert(classIndex >= 0);\r\n if (this.entityIds.length !== this._classIndices.length) {\r\n // New entity - insert corresponding class index entry.\r\n this._classIndices.splice(entityIndex, 0, classIndex);\r\n } else {\r\n // Existing entity - update corresponding class index.\r\n // (We do this because apparently connectors can (very rarely) change the class Id of an existing element).\r\n this._classIndices[entityIndex] = classIndex;\r\n }\r\n\r\n assert(this.entityIds.length === this._classIndices.length);\r\n }\r\n\r\n public clear(): void {\r\n this.entityIds.clear();\r\n this._classIndices.length = 0;\r\n }\r\n\r\n public addToChangedEntities(entities: ChangedEntities, type: \"deleted\" | \"inserted\" | \"updated\"): void {\r\n if (this.entityIds.length > 0)\r\n entities[type] = CompressedId64Set.compressIds(this.entityIds);\r\n }\r\n\r\n public iterable(classIds: Id64Array): EntityIdAndClassIdIterable {\r\n function* iterator(entityIds: ReadonlyArray<Id64String>, classIndices: number[]) {\r\n const entity = { id: \"\", classId: \"\" };\r\n for (let i = 0; i < entityIds.length; i++) {\r\n entity.id = entityIds[i];\r\n entity.classId = classIds[classIndices[i]];\r\n yield entity;\r\n }\r\n }\r\n\r\n return {\r\n [Symbol.iterator]: () => iterator(this.entityIds.array, this._classIndices),\r\n };\r\n }\r\n}\r\n\r\nclass ChangedEntitiesProc {\r\n private readonly _classIds = new IndexMap<Id64String>((lhs, rhs) => compareStrings(lhs, rhs));\r\n private readonly _inserted = new ChangedEntitiesArray(this._classIds);\r\n private readonly _deleted = new ChangedEntitiesArray(this._classIds);\r\n private readonly _updated = new ChangedEntitiesArray(this._classIds);\r\n private _currSize = 0;\r\n\r\n public static maxPerEvent = 1000;\r\n\r\n public static process(iModel: BriefcaseDb | StandaloneDb, mgr: TxnManager): void {\r\n if (mgr.isDisposed) {\r\n // The iModel is being closed. Do not prepare new sqlite statements.\r\n return;\r\n }\r\n\r\n this.processChanges(iModel, mgr.onElementsChanged, \"notifyElementsChanged\");\r\n this.processChanges(iModel, mgr.onModelsChanged, \"notifyModelsChanged\");\r\n }\r\n\r\n private sendEvent(iModel: BriefcaseDb | StandaloneDb, evt: EntitiesChangedEvent, evtName: \"notifyElementsChanged\" | \"notifyModelsChanged\") {\r\n if (this._currSize === 0)\r\n return;\r\n\r\n const classIds = this._classIds.toArray();\r\n\r\n // Notify backend listeners.\r\n const txnEntities: TxnChangedEntities = {\r\n inserts: this._inserted.iterable(classIds),\r\n deletes: this._deleted.iterable(classIds),\r\n updates: this._updated.iterable(classIds),\r\n };\r\n evt.raiseEvent(txnEntities);\r\n\r\n // Notify frontend listeners.\r\n const entities: ChangedEntities = {};\r\n this._inserted.addToChangedEntities(entities, \"inserted\");\r\n this._deleted.addToChangedEntities(entities, \"deleted\");\r\n this._updated.addToChangedEntities(entities, \"updated\");\r\n IpcHost.notifyTxns(iModel, evtName, entities);\r\n\r\n // Reset state.\r\n this._inserted.clear();\r\n this._deleted.clear();\r\n this._updated.clear();\r\n this._classIds.clear();\r\n this._currSize = 0;\r\n }\r\n\r\n private static processChanges(iModel: BriefcaseDb | StandaloneDb, changedEvent: EntitiesChangedEvent, evtName: \"notifyElementsChanged\" | \"notifyModelsChanged\") {\r\n try {\r\n const maxSize = this.maxPerEvent;\r\n const changes = new ChangedEntitiesProc();\r\n const select = \"notifyElementsChanged\" === evtName\r\n ? \"SELECT ElementId, ChangeType, ECClassId FROM temp.txn_Elements\"\r\n : \"SELECT ModelId, ChangeType, ECClassId FROM temp.txn_Models\";\r\n iModel.withPreparedSqliteStatement(select, (sql: SqliteStatement) => {\r\n const stmt = sql.stmt!;\r\n while (sql.step() === DbResult.BE_SQLITE_ROW) {\r\n const id = stmt.getValueId(0);\r\n const classId = stmt.getValueId(2);\r\n switch (stmt.getValueInteger(1)) {\r\n case 0:\r\n changes._inserted.insert(id, classId);\r\n break;\r\n case 1:\r\n changes._updated.insert(id, classId);\r\n break;\r\n case 2:\r\n changes._deleted.insert(id, classId);\r\n break;\r\n }\r\n\r\n if (++changes._currSize >= maxSize)\r\n changes.sendEvent(iModel, changedEvent, evtName);\r\n }\r\n });\r\n\r\n changes.sendEvent(iModel, changedEvent, evtName);\r\n } catch (err) {\r\n Logger.logError(BackendLoggerCategory.IModelDb, BentleyError.getErrorMessage(err));\r\n }\r\n }\r\n}\r\n\r\n/** Manages local changes to a [[BriefcaseDb]] or [[StandaloneDb]] via [Txns]($docs/learning/InteractiveEditing.md)\r\n * @public\r\n */\r\nexport class TxnManager {\r\n /** @internal */\r\n private _isDisposed = false;\r\n\r\n /** @internal */\r\n public get isDisposed(): boolean {\r\n return this._isDisposed;\r\n }\r\n\r\n /** @internal */\r\n constructor(private _iModel: BriefcaseDb | StandaloneDb) {\r\n _iModel.onBeforeClose.addOnce(() => {\r\n this._isDisposed = true;\r\n });\r\n }\r\n\r\n /** Array of errors from dependency propagation */\r\n public readonly validationErrors: ValidationError[] = [];\r\n\r\n private get _nativeDb() { return this._iModel.nativeDb; }\r\n private _getElementClass(elClassName: string): typeof Element {\r\n return this._iModel.getJsClass(elClassName) as unknown as typeof Element;\r\n }\r\n private _getRelationshipClass(relClassName: string): typeof Relationship {\r\n return this._iModel.getJsClass<typeof Relationship>(relClassName);\r\n }\r\n /** @internal */\r\n protected _onBeforeOutputsHandled(elClassName: string, elId: Id64String): void {\r\n (this._getElementClass(elClassName) as any).onBeforeOutputsHandled(elId, this._iModel);\r\n }\r\n /** @internal */\r\n protected _onAllInputsHandled(elClassName: string, elId: Id64String): void {\r\n (this._getElementClass(elClassName) as any).onAllInputsHandled(elId, this._iModel);\r\n }\r\n /** @internal */\r\n protected _onRootChanged(props: RelationshipProps): void {\r\n this._getRelationshipClass(props.classFullName).onRootChanged(props, this._iModel);\r\n }\r\n /** @internal */\r\n protected _onDeletedDependency(props: RelationshipProps): void {\r\n this._getRelationshipClass(props.classFullName).onDeletedDependency(props, this._iModel);\r\n }\r\n /** @internal */\r\n protected _onBeginValidate() { this.validationErrors.length = 0; }\r\n\r\n /** called from native code after validation of a Txn, either from saveChanges or apply changeset.\r\n * @internal\r\n */\r\n protected _onEndValidate() {\r\n ChangedEntitiesProc.process(this._iModel, this);\r\n this.onEndValidation.raiseEvent();\r\n // TODO: if (this.validationErrors.length !== 0) throw new IModelError(validation ...)\r\n }\r\n\r\n /** @internal */\r\n protected _onGeometryChanged(modelProps: ModelGeometryChangesProps[]) {\r\n this.onGeometryChanged.raiseEvent(modelProps);\r\n IpcHost.notifyEditingScope(this._iModel, \"notifyGeometryChanged\", modelProps); // send to frontend\r\n }\r\n\r\n /** @internal */\r\n protected _onGeometryGuidsChanged(changes: ModelIdAndGeometryGuid[]): void {\r\n this.onModelGeometryChanged.raiseEvent(changes);\r\n IpcHost.notifyTxns(this._iModel, \"notifyGeometryGuidsChanged\", changes);\r\n }\r\n\r\n /** @internal */\r\n protected _onCommit() {\r\n this.onCommit.raiseEvent();\r\n IpcHost.notifyTxns(this._iModel, \"notifyCommit\");\r\n }\r\n\r\n /** @internal */\r\n protected _onCommitted() {\r\n this.onCommitted.raiseEvent();\r\n IpcHost.notifyTxns(this._iModel, \"notifyCommitted\", this.hasPendingTxns, Date.now());\r\n }\r\n\r\n /** @internal */\r\n protected _onChangesApplied() {\r\n ChangedEntitiesProc.process(this._iModel, this);\r\n this.onChangesApplied.raiseEvent();\r\n IpcHost.notifyTxns(this._iModel, \"notifyChangesApplied\");\r\n }\r\n\r\n /** @internal */\r\n protected _onBeforeUndoRedo(isUndo: boolean) {\r\n this.onBeforeUndoRedo.raiseEvent(isUndo);\r\n IpcHost.notifyTxns(this._iModel, \"notifyBeforeUndoRedo\", isUndo);\r\n }\r\n\r\n /** @internal */\r\n protected _onAfterUndoRedo(isUndo: boolean) {\r\n this.onAfterUndoRedo.raiseEvent(isUndo);\r\n IpcHost.notifyTxns(this._iModel, \"notifyAfterUndoRedo\", isUndo);\r\n }\r\n\r\n /** Dependency handlers may call method this to report a validation error.\r\n * @param error The error. If error.fatal === true, the transaction will cancel rather than commit.\r\n */\r\n public reportError(error: ValidationError) { this.validationErrors.push(error); this._nativeDb.logTxnError(error.fatal); }\r\n\r\n /** Determine whether any fatal validation errors have occurred during dependency propagation. */\r\n public get hasFatalError(): boolean { return this._nativeDb.hasFatalTxnError(); }\r\n\r\n /** @internal */\r\n public readonly onEndValidation = new BeEvent<() => void>();\r\n\r\n /** Called after validation completes from [[IModelDb.saveChanges]].\r\n * The argument to the event holds the list of elements that were inserted, updated, and deleted.\r\n * @note If there are many changed elements in a single Txn, the notifications are sent in batches so this event *may be called multiple times* per Txn.\r\n */\r\n public readonly onElementsChanged = new BeEvent<(changes: TxnChangedEntities) => void>();\r\n\r\n /** Called after validation completes from [[IModelDb.saveChanges]].\r\n * The argument to the event holds the list of models that were inserted, updated, and deleted.\r\n * @note If there are many changed models in a single Txn, the notifications are sent in batches so this event *may be called multiple times* per Txn.\r\n */\r\n public readonly onModelsChanged = new BeEvent<(changes: TxnChangedEntities) => void>();\r\n\r\n /** Event raised after the geometry within one or more [[GeometricModel]]s is modified by applying a changeset or validation of a transaction.\r\n * A model's geometry can change as a result of:\r\n * - Insertion or deletion of a geometric element within the model; or\r\n * - Modification of an existing element's geometric properties; or\r\n * - An explicit request to flag it as changed via [[IModelDb.Models.updateModel]].\r\n */\r\n public readonly onModelGeometryChanged = new BeEvent<(changes: ReadonlyArray<ModelIdAndGeometryGuid>) => void>();\r\n\r\n public readonly onGeometryChanged = new BeEvent<(models: ModelGeometryChangesProps[]) => void>();\r\n /** Event raised before a commit operation is performed. Initiated by a call to [[IModelDb.saveChanges]], unless there are no changes to save. */\r\n public readonly onCommit = new BeEvent<() => void>();\r\n /** Event raised after a commit operation has been performed. Initiated by a call to [[IModelDb.saveChanges]], even if there were no changes to save. */\r\n public readonly onCommitted = new BeEvent<() => void>();\r\n /** Event raised after a ChangeSet has been applied to this briefcase */\r\n public readonly onChangesApplied = new BeEvent<() => void>();\r\n /** Event raised before an undo/redo operation is performed. */\r\n public readonly onBeforeUndoRedo = new BeEvent<(isUndo: boolean) => void>();\r\n /** Event raised after an undo/redo operation has been performed.\r\n * @param _action The action that was performed.\r\n */\r\n public readonly onAfterUndoRedo = new BeEvent<(isUndo: boolean) => void>();\r\n\r\n /**\r\n * Restart the current TxnManager session. This causes all Txns in the current session to no longer be undoable (as if the file was closed\r\n * and reopened.)\r\n * @note This can be quite disconcerting to the user expecting to be able to undo previously made changes. It should only be used\r\n * under extreme circumstances where damage to the file or session could happen if the currently committed are reversed. Use sparingly and with care.\r\n * Probably a good idea to alert the user it happened.\r\n */\r\n public restartSession() {\r\n this._nativeDb.restartTxnSession();\r\n }\r\n\r\n /** Determine whether current txn is propagating indirect changes or not. */\r\n public get isIndirectChanges(): boolean { return this._nativeDb.isIndirectChanges(); }\r\n\r\n /** Determine if there are currently any reversible (undoable) changes from this editing session. */\r\n public get isUndoPossible(): boolean { return this._nativeDb.isUndoPossible(); }\r\n\r\n /** Determine if there are currently any reinstatable (redoable) changes */\r\n public get isRedoPossible(): boolean { return this._nativeDb.isRedoPossible(); }\r\n\r\n /** Get the description of the operation that would be reversed by calling reverseTxns(1).\r\n * This is useful for showing the operation that would be undone, for example in a menu.\r\n */\r\n public getUndoString(): string { return this._nativeDb.getUndoString(); }\r\n\r\n /** Get a description of the operation that would be reinstated by calling reinstateTxn.\r\n * This is useful for showing the operation that would be redone, in a pull-down menu for example.\r\n */\r\n public getRedoString(): string { return this._nativeDb.getRedoString(); }\r\n\r\n /** Begin a new multi-Txn operation. This can be used to cause a series of Txns that would normally\r\n * be considered separate actions for undo to be grouped into a single undoable operation. This means that when reverseTxns(1) is called,\r\n * the entire group of changes are undone together. Multi-Txn operations can be nested and until the outermost operation is closed\r\n * all changes constitute a single operation.\r\n * @note This method must always be paired with a call to endMultiTxnAction.\r\n */\r\n public beginMultiTxnOperation(): DbResult { return this._nativeDb.beginMultiTxnOperation(); }\r\n\r\n /** End a multi-Txn operation */\r\n public endMultiTxnOperation(): DbResult { return this._nativeDb.endMultiTxnOperation(); }\r\n\r\n /** Return the depth of the multi-Txn stack. Generally for diagnostic use only. */\r\n public getMultiTxnOperationDepth(): number { return this._nativeDb.getMultiTxnOperationDepth(); }\r\n\r\n /** Reverse (undo) the most recent operation(s) to this IModelDb.\r\n * @param numOperations the number of operations to reverse. If this is greater than 1, the entire set of operations will\r\n * be reinstated together when/if ReinstateTxn is called.\r\n * @note If there are any outstanding uncommitted changes, they are reversed.\r\n * @note The term \"operation\" is used rather than Txn, since multiple Txns can be grouped together via [[beginMultiTxnOperation]]. So,\r\n * even if numOperations is 1, multiple Txns may be reversed if they were grouped together when they were made.\r\n * @note If numOperations is too large only the operations are reversible are reversed.\r\n */\r\n public reverseTxns(numOperations: number): IModelStatus {\r\n return this._iModel.reverseTxns(numOperations);\r\n }\r\n\r\n /** Reverse the most recent operation. */\r\n public reverseSingleTxn(): IModelStatus { return this.reverseTxns(1); }\r\n\r\n /** Reverse all changes back to the beginning of the session. */\r\n public reverseAll(): IModelStatus { return this._nativeDb.reverseAll(); }\r\n\r\n /** Reverse all changes back to a previously saved TxnId.\r\n * @param txnId a TxnId obtained from a previous call to GetCurrentTxnId.\r\n * @returns Success if the transactions were reversed, error status otherwise.\r\n * @see [[getCurrentTxnId]] [[cancelTo]]\r\n */\r\n public reverseTo(txnId: TxnIdString): IModelStatus { return this._nativeDb.reverseTo(txnId); }\r\n\r\n /** Reverse and then cancel (make non-reinstatable) all changes back to a previous TxnId.\r\n * @param txnId a TxnId obtained from a previous call to [[getCurrentTxnId]]\r\n * @returns Success if the transactions were reversed and cleared, error status otherwise.\r\n */\r\n public cancelTo(txnId: TxnIdString): IModelStatus { return this._nativeDb.cancelTo(txnId); }\r\n\r\n /** Reinstate the most recently reversed transaction. Since at any time multiple transactions can be reversed, it\r\n * may take multiple calls to this method to reinstate all reversed operations.\r\n * @returns Success if a reversed transaction was reinstated, error status otherwise.\r\n * @note If there are any outstanding uncommitted changes, they are canceled before the Txn is reinstated.\r\n */\r\n public reinstateTxn(): IModelStatus { return this._iModel.reinstateTxn(); }\r\n\r\n /** Get the Id of the first transaction, if any.\r\n */\r\n public queryFirstTxnId(): TxnIdString { return this._nativeDb.queryFirstTxnId(); }\r\n\r\n /** Get the successor of the specified TxnId */\r\n public queryNextTxnId(txnId: TxnIdString): TxnIdString { return this._nativeDb.queryNextTxnId(txnId); }\r\n\r\n /** Get the predecessor of the specified TxnId */\r\n public queryPreviousTxnId(txnId: TxnIdString): TxnIdString { return this._nativeDb.queryPreviousTxnId(txnId); }\r\n\r\n /** Get the Id of the current (tip) transaction. */\r\n public getCurrentTxnId(): TxnIdString { return this._nativeDb.getCurrentTxnId(); }\r\n\r\n /** Get the description that was supplied when the specified transaction was saved. */\r\n public getTxnDescription(txnId: TxnIdString): string { return this._nativeDb.getTxnDescription(txnId); }\r\n\r\n /** Test if a TxnId is valid */\r\n public isTxnIdValid(txnId: TxnIdString): boolean { return this._nativeDb.isTxnIdValid(txnId); }\r\n\r\n /** Query if there are any pending Txns in this IModelDb that are waiting to be pushed. */\r\n public get hasPendingTxns(): boolean { return this._nativeDb.hasPendingTxns(); }\r\n\r\n /** Query if there are any changes in memory that have yet to be saved to the IModelDb. */\r\n public get hasUnsavedChanges(): boolean { return this._nativeDb.hasUnsavedChanges(); }\r\n\r\n /** Query if there are un-saved or un-pushed local changes. */\r\n public get hasLocalChanges(): boolean { return this.hasUnsavedChanges || this.hasPendingTxns; }\r\n\r\n}\r\n"]}