@itwin/core-backend 5.1.0-dev.9 → 5.2.0-dev.2

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 (441) hide show
  1. package/CHANGELOG.md +117 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +1 -1
  3. package/lib/cjs/BackendHubAccess.js +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BisCoreSchema.d.ts.map +1 -1
  6. package/lib/cjs/BisCoreSchema.js +4 -2
  7. package/lib/cjs/BisCoreSchema.js.map +1 -1
  8. package/lib/cjs/BriefcaseManager.d.ts +10 -2
  9. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  10. package/lib/cjs/BriefcaseManager.js +16 -0
  11. package/lib/cjs/BriefcaseManager.js.map +1 -1
  12. package/lib/cjs/Category.d.ts +4 -4
  13. package/lib/cjs/Category.js +4 -4
  14. package/lib/cjs/Category.js.map +1 -1
  15. package/lib/cjs/ChangesetECAdaptor.d.ts +67 -8
  16. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  17. package/lib/cjs/ChangesetECAdaptor.js +248 -33
  18. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  19. package/lib/cjs/ClassRegistry.d.ts +9 -1
  20. package/lib/cjs/ClassRegistry.d.ts.map +1 -1
  21. package/lib/cjs/ClassRegistry.js +9 -1
  22. package/lib/cjs/ClassRegistry.js.map +1 -1
  23. package/lib/cjs/CloudSqlite.js +1 -1
  24. package/lib/cjs/CloudSqlite.js.map +1 -1
  25. package/lib/cjs/CodeSpecs.d.ts +1 -1
  26. package/lib/cjs/CodeSpecs.js +1 -1
  27. package/lib/cjs/CodeSpecs.js.map +1 -1
  28. package/lib/cjs/DisplayStyle.d.ts +4 -4
  29. package/lib/cjs/DisplayStyle.js +3 -3
  30. package/lib/cjs/DisplayStyle.js.map +1 -1
  31. package/lib/cjs/ECDb.d.ts +4 -4
  32. package/lib/cjs/ECDb.d.ts.map +1 -1
  33. package/lib/cjs/ECDb.js +4 -4
  34. package/lib/cjs/ECDb.js.map +1 -1
  35. package/lib/cjs/ECSqlStatement.d.ts +15 -6
  36. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  37. package/lib/cjs/ECSqlStatement.js +19 -4
  38. package/lib/cjs/ECSqlStatement.js.map +1 -1
  39. package/lib/cjs/Element.d.ts +54 -51
  40. package/lib/cjs/Element.d.ts.map +1 -1
  41. package/lib/cjs/Element.js +67 -52
  42. package/lib/cjs/Element.js.map +1 -1
  43. package/lib/cjs/ElementAspect.d.ts +8 -8
  44. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  45. package/lib/cjs/ElementAspect.js +8 -8
  46. package/lib/cjs/ElementAspect.js.map +1 -1
  47. package/lib/cjs/Entity.d.ts +10 -7
  48. package/lib/cjs/Entity.d.ts.map +1 -1
  49. package/lib/cjs/Entity.js +35 -13
  50. package/lib/cjs/Entity.js.map +1 -1
  51. package/lib/cjs/ExportGraphics.d.ts +54 -8
  52. package/lib/cjs/ExportGraphics.d.ts.map +1 -1
  53. package/lib/cjs/ExportGraphics.js +158 -59
  54. package/lib/cjs/ExportGraphics.js.map +1 -1
  55. package/lib/cjs/GeographicCRSServices.d.ts +6 -2
  56. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  57. package/lib/cjs/GeographicCRSServices.js +1 -1
  58. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  59. package/lib/cjs/IModelDb.d.ts +37 -26
  60. package/lib/cjs/IModelDb.d.ts.map +1 -1
  61. package/lib/cjs/IModelDb.js +124 -47
  62. package/lib/cjs/IModelDb.js.map +1 -1
  63. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  64. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  65. package/lib/cjs/IModelElementCloneContext.js +1 -1
  66. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  67. package/lib/cjs/IModelHost.d.ts +2 -3
  68. package/lib/cjs/IModelHost.d.ts.map +1 -1
  69. package/lib/cjs/IModelHost.js +2 -3
  70. package/lib/cjs/IModelHost.js.map +1 -1
  71. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +36 -0
  72. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -0
  73. package/lib/cjs/IModelIncrementalSchemaLocater.js +69 -0
  74. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -0
  75. package/lib/cjs/LocalHub.d.ts.map +1 -1
  76. package/lib/cjs/LocalHub.js +6 -4
  77. package/lib/cjs/LocalHub.js.map +1 -1
  78. package/lib/cjs/Material.d.ts +4 -3
  79. package/lib/cjs/Material.d.ts.map +1 -1
  80. package/lib/cjs/Material.js +5 -5
  81. package/lib/cjs/Material.js.map +1 -1
  82. package/lib/cjs/Model.d.ts +22 -22
  83. package/lib/cjs/Model.js +22 -22
  84. package/lib/cjs/Model.js.map +1 -1
  85. package/lib/cjs/Relationship.d.ts +3 -0
  86. package/lib/cjs/Relationship.d.ts.map +1 -1
  87. package/lib/cjs/Relationship.js +15 -0
  88. package/lib/cjs/Relationship.js.map +1 -1
  89. package/lib/cjs/SQLiteDb.d.ts +1 -1
  90. package/lib/cjs/SQLiteDb.js +1 -1
  91. package/lib/cjs/SQLiteDb.js.map +1 -1
  92. package/lib/cjs/Schema.d.ts +25 -0
  93. package/lib/cjs/Schema.d.ts.map +1 -1
  94. package/lib/cjs/Schema.js +25 -0
  95. package/lib/cjs/Schema.js.map +1 -1
  96. package/lib/cjs/SqliteStatement.d.ts +1 -1
  97. package/lib/cjs/SqliteStatement.d.ts.map +1 -1
  98. package/lib/cjs/SqliteStatement.js +1 -1
  99. package/lib/cjs/SqliteStatement.js.map +1 -1
  100. package/lib/cjs/Texture.d.ts +1 -1
  101. package/lib/cjs/Texture.js +1 -1
  102. package/lib/cjs/Texture.js.map +1 -1
  103. package/lib/cjs/TxnManager.d.ts +4 -4
  104. package/lib/cjs/TxnManager.js +1 -1
  105. package/lib/cjs/TxnManager.js.map +1 -1
  106. package/lib/cjs/ViewDefinition.d.ts +40 -14
  107. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  108. package/lib/cjs/ViewDefinition.js +42 -14
  109. package/lib/cjs/ViewDefinition.js.map +1 -1
  110. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +61 -0
  111. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -0
  112. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +110 -0
  113. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -0
  114. package/lib/cjs/annotations/FrameGeometry.d.ts +51 -0
  115. package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -0
  116. package/lib/cjs/annotations/FrameGeometry.js +249 -0
  117. package/lib/cjs/annotations/FrameGeometry.js.map +1 -0
  118. package/lib/cjs/annotations/LeaderGeometry.d.ts +53 -0
  119. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -0
  120. package/lib/cjs/annotations/LeaderGeometry.js +184 -0
  121. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -0
  122. package/lib/cjs/annotations/TextAnnotationElement.d.ts +204 -0
  123. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -0
  124. package/lib/cjs/annotations/TextAnnotationElement.js +411 -0
  125. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -0
  126. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +33 -0
  127. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  128. package/lib/cjs/annotations/TextAnnotationGeometry.js +137 -0
  129. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -0
  130. package/lib/cjs/annotations/TextBlockGeometry.d.ts +16 -0
  131. package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -0
  132. package/lib/cjs/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +28 -70
  133. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -0
  134. package/lib/cjs/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +69 -22
  135. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -0
  136. package/lib/cjs/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +174 -49
  137. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -0
  138. package/lib/cjs/core-backend.d.ts +7 -3
  139. package/lib/cjs/core-backend.d.ts.map +1 -1
  140. package/lib/cjs/core-backend.js +27 -6
  141. package/lib/cjs/core-backend.js.map +1 -1
  142. package/lib/cjs/internal/ElementLRUCache.d.ts +23 -0
  143. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
  144. package/lib/cjs/internal/ElementLRUCache.js +167 -3
  145. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  146. package/lib/cjs/internal/Symbols.d.ts +1 -0
  147. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  148. package/lib/cjs/internal/Symbols.js +2 -1
  149. package/lib/cjs/internal/Symbols.js.map +1 -1
  150. package/lib/cjs/internal/annotations/fields.d.ts +22 -0
  151. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -0
  152. package/lib/cjs/internal/annotations/fields.js +237 -0
  153. package/lib/cjs/internal/annotations/fields.js.map +1 -0
  154. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  155. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +1 -1
  156. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  157. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  158. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  159. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  160. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  161. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  162. package/lib/cjs/workspace/Workspace.d.ts +0 -1
  163. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  164. package/lib/cjs/workspace/Workspace.js.map +1 -1
  165. package/lib/esm/BackendHubAccess.d.ts +1 -1
  166. package/lib/esm/BackendHubAccess.js +1 -1
  167. package/lib/esm/BackendHubAccess.js.map +1 -1
  168. package/lib/esm/BisCoreSchema.d.ts.map +1 -1
  169. package/lib/esm/BisCoreSchema.js +4 -2
  170. package/lib/esm/BisCoreSchema.js.map +1 -1
  171. package/lib/esm/BriefcaseManager.d.ts +10 -2
  172. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  173. package/lib/esm/BriefcaseManager.js +17 -1
  174. package/lib/esm/BriefcaseManager.js.map +1 -1
  175. package/lib/esm/Category.d.ts +4 -4
  176. package/lib/esm/Category.js +4 -4
  177. package/lib/esm/Category.js.map +1 -1
  178. package/lib/esm/ChangesetECAdaptor.d.ts +67 -8
  179. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  180. package/lib/esm/ChangesetECAdaptor.js +248 -33
  181. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  182. package/lib/esm/ClassRegistry.d.ts +9 -1
  183. package/lib/esm/ClassRegistry.d.ts.map +1 -1
  184. package/lib/esm/ClassRegistry.js +9 -1
  185. package/lib/esm/ClassRegistry.js.map +1 -1
  186. package/lib/esm/CloudSqlite.js +1 -1
  187. package/lib/esm/CloudSqlite.js.map +1 -1
  188. package/lib/esm/CodeSpecs.d.ts +1 -1
  189. package/lib/esm/CodeSpecs.js +1 -1
  190. package/lib/esm/CodeSpecs.js.map +1 -1
  191. package/lib/esm/DisplayStyle.d.ts +4 -4
  192. package/lib/esm/DisplayStyle.js +3 -3
  193. package/lib/esm/DisplayStyle.js.map +1 -1
  194. package/lib/esm/ECDb.d.ts +4 -4
  195. package/lib/esm/ECDb.d.ts.map +1 -1
  196. package/lib/esm/ECDb.js +4 -4
  197. package/lib/esm/ECDb.js.map +1 -1
  198. package/lib/esm/ECSqlStatement.d.ts +15 -6
  199. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  200. package/lib/esm/ECSqlStatement.js +19 -4
  201. package/lib/esm/ECSqlStatement.js.map +1 -1
  202. package/lib/esm/Element.d.ts +54 -51
  203. package/lib/esm/Element.d.ts.map +1 -1
  204. package/lib/esm/Element.js +67 -52
  205. package/lib/esm/Element.js.map +1 -1
  206. package/lib/esm/ElementAspect.d.ts +8 -8
  207. package/lib/esm/ElementAspect.d.ts.map +1 -1
  208. package/lib/esm/ElementAspect.js +8 -8
  209. package/lib/esm/ElementAspect.js.map +1 -1
  210. package/lib/esm/Entity.d.ts +10 -7
  211. package/lib/esm/Entity.d.ts.map +1 -1
  212. package/lib/esm/Entity.js +36 -14
  213. package/lib/esm/Entity.js.map +1 -1
  214. package/lib/esm/ExportGraphics.d.ts +54 -8
  215. package/lib/esm/ExportGraphics.d.ts.map +1 -1
  216. package/lib/esm/ExportGraphics.js +156 -58
  217. package/lib/esm/ExportGraphics.js.map +1 -1
  218. package/lib/esm/GeographicCRSServices.d.ts +6 -2
  219. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  220. package/lib/esm/GeographicCRSServices.js +1 -1
  221. package/lib/esm/GeographicCRSServices.js.map +1 -1
  222. package/lib/esm/IModelDb.d.ts +37 -26
  223. package/lib/esm/IModelDb.d.ts.map +1 -1
  224. package/lib/esm/IModelDb.js +128 -51
  225. package/lib/esm/IModelDb.js.map +1 -1
  226. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  227. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  228. package/lib/esm/IModelElementCloneContext.js +1 -1
  229. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  230. package/lib/esm/IModelHost.d.ts +2 -3
  231. package/lib/esm/IModelHost.d.ts.map +1 -1
  232. package/lib/esm/IModelHost.js +2 -3
  233. package/lib/esm/IModelHost.js.map +1 -1
  234. package/lib/esm/IModelIncrementalSchemaLocater.d.ts +36 -0
  235. package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -0
  236. package/lib/esm/IModelIncrementalSchemaLocater.js +65 -0
  237. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -0
  238. package/lib/esm/LocalHub.d.ts.map +1 -1
  239. package/lib/esm/LocalHub.js +6 -4
  240. package/lib/esm/LocalHub.js.map +1 -1
  241. package/lib/esm/Material.d.ts +4 -3
  242. package/lib/esm/Material.d.ts.map +1 -1
  243. package/lib/esm/Material.js +5 -5
  244. package/lib/esm/Material.js.map +1 -1
  245. package/lib/esm/Model.d.ts +22 -22
  246. package/lib/esm/Model.js +22 -22
  247. package/lib/esm/Model.js.map +1 -1
  248. package/lib/esm/Relationship.d.ts +3 -0
  249. package/lib/esm/Relationship.d.ts.map +1 -1
  250. package/lib/esm/Relationship.js +15 -0
  251. package/lib/esm/Relationship.js.map +1 -1
  252. package/lib/esm/SQLiteDb.d.ts +1 -1
  253. package/lib/esm/SQLiteDb.js +1 -1
  254. package/lib/esm/SQLiteDb.js.map +1 -1
  255. package/lib/esm/Schema.d.ts +25 -0
  256. package/lib/esm/Schema.d.ts.map +1 -1
  257. package/lib/esm/Schema.js +25 -0
  258. package/lib/esm/Schema.js.map +1 -1
  259. package/lib/esm/SqliteStatement.d.ts +1 -1
  260. package/lib/esm/SqliteStatement.d.ts.map +1 -1
  261. package/lib/esm/SqliteStatement.js +1 -1
  262. package/lib/esm/SqliteStatement.js.map +1 -1
  263. package/lib/esm/Texture.d.ts +1 -1
  264. package/lib/esm/Texture.js +1 -1
  265. package/lib/esm/Texture.js.map +1 -1
  266. package/lib/esm/TxnManager.d.ts +4 -4
  267. package/lib/esm/TxnManager.js +1 -1
  268. package/lib/esm/TxnManager.js.map +1 -1
  269. package/lib/esm/ViewDefinition.d.ts +40 -14
  270. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  271. package/lib/esm/ViewDefinition.js +42 -14
  272. package/lib/esm/ViewDefinition.js.map +1 -1
  273. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +61 -0
  274. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -0
  275. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +105 -0
  276. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -0
  277. package/lib/esm/annotations/FrameGeometry.d.ts +51 -0
  278. package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -0
  279. package/lib/esm/annotations/FrameGeometry.js +244 -0
  280. package/lib/esm/annotations/FrameGeometry.js.map +1 -0
  281. package/lib/esm/annotations/LeaderGeometry.d.ts +53 -0
  282. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -0
  283. package/lib/esm/annotations/LeaderGeometry.js +179 -0
  284. package/lib/esm/annotations/LeaderGeometry.js.map +1 -0
  285. package/lib/esm/annotations/TextAnnotationElement.d.ts +204 -0
  286. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -0
  287. package/lib/esm/annotations/TextAnnotationElement.js +405 -0
  288. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -0
  289. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +33 -0
  290. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -0
  291. package/lib/esm/annotations/TextAnnotationGeometry.js +134 -0
  292. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -0
  293. package/lib/esm/annotations/TextBlockGeometry.d.ts +16 -0
  294. package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -0
  295. package/lib/esm/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +28 -70
  296. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -0
  297. package/lib/esm/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +69 -22
  298. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -0
  299. package/lib/esm/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +172 -48
  300. package/lib/esm/annotations/TextBlockLayout.js.map +1 -0
  301. package/lib/esm/core-backend.d.ts +7 -3
  302. package/lib/esm/core-backend.d.ts.map +1 -1
  303. package/lib/esm/core-backend.js +27 -3
  304. package/lib/esm/core-backend.js.map +1 -1
  305. package/lib/esm/internal/ElementLRUCache.d.ts +23 -0
  306. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
  307. package/lib/esm/internal/ElementLRUCache.js +165 -2
  308. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  309. package/lib/esm/internal/Symbols.d.ts +1 -0
  310. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  311. package/lib/esm/internal/Symbols.js +1 -0
  312. package/lib/esm/internal/Symbols.js.map +1 -1
  313. package/lib/esm/internal/annotations/fields.d.ts +22 -0
  314. package/lib/esm/internal/annotations/fields.d.ts.map +1 -0
  315. package/lib/esm/internal/annotations/fields.js +231 -0
  316. package/lib/esm/internal/annotations/fields.js.map +1 -0
  317. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
  318. package/lib/esm/rpc-impl/IModelReadRpcImpl.js +1 -1
  319. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  320. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
  321. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  322. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
  323. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
  324. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  325. package/lib/esm/test/AnnotationTestUtils.d.ts +15 -0
  326. package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -0
  327. package/lib/esm/test/AnnotationTestUtils.js +41 -0
  328. package/lib/esm/test/AnnotationTestUtils.js.map +1 -0
  329. package/lib/esm/test/ElementLRUCache.test.js +224 -1
  330. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  331. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  332. package/lib/esm/test/IModelTestUtils.js +1 -0
  333. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  334. package/lib/esm/test/TestUtils.d.ts +1 -1
  335. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  336. package/lib/esm/test/TestUtils.js +1 -1
  337. package/lib/esm/test/TestUtils.js.map +1 -1
  338. package/lib/esm/test/annotations/Fields.test.d.ts +2 -0
  339. package/lib/esm/test/annotations/Fields.test.d.ts.map +1 -0
  340. package/lib/esm/test/annotations/Fields.test.js +576 -0
  341. package/lib/esm/test/annotations/Fields.test.js.map +1 -0
  342. package/lib/esm/test/annotations/FrameGeometry.test.d.ts +2 -0
  343. package/lib/esm/test/annotations/FrameGeometry.test.d.ts.map +1 -0
  344. package/lib/esm/test/annotations/FrameGeometry.test.js +86 -0
  345. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -0
  346. package/lib/esm/test/annotations/LeaderGeometry.test.d.ts +2 -0
  347. package/lib/esm/test/annotations/LeaderGeometry.test.d.ts.map +1 -0
  348. package/lib/esm/test/annotations/LeaderGeometry.test.js +256 -0
  349. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -0
  350. package/lib/esm/test/annotations/TextAnnotation.test.js +269 -1047
  351. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  352. package/lib/esm/test/annotations/TextBlock.test.d.ts +2 -0
  353. package/lib/esm/test/annotations/TextBlock.test.d.ts.map +1 -0
  354. package/lib/esm/test/annotations/TextBlock.test.js +1199 -0
  355. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -0
  356. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.d.ts +60 -0
  357. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.d.ts.map +1 -0
  358. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js +69 -0
  359. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -0
  360. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts +1442 -0
  361. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -0
  362. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +817 -0
  363. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -0
  364. package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts +2 -0
  365. package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts.map +1 -0
  366. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +164 -0
  367. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -0
  368. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +22 -32
  369. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  370. package/lib/esm/test/ecdb/ECDb.test.js +29 -8
  371. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  372. package/lib/esm/test/ecdb/ECSqlQuery.test.js +0 -55
  373. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  374. package/lib/esm/test/ecdb/ECSqlStatement.test.js +192 -0
  375. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  376. package/lib/esm/test/hubaccess/ApplyChangeset.test.d.ts +2 -0
  377. package/lib/esm/test/hubaccess/ApplyChangeset.test.d.ts.map +1 -0
  378. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +86 -0
  379. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -0
  380. package/lib/esm/test/imodel/IModel.test.js +313 -5
  381. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  382. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.d.ts +2 -0
  383. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.d.ts.map +1 -0
  384. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +343 -0
  385. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -0
  386. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.d.ts +2 -0
  387. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.d.ts.map +1 -0
  388. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +207 -0
  389. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -0
  390. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts +11 -0
  391. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts.map +1 -0
  392. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js +36 -0
  393. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -0
  394. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts +17 -0
  395. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts.map +1 -0
  396. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js +116 -0
  397. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -0
  398. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +9 -0
  399. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -0
  400. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +20 -0
  401. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -0
  402. package/lib/esm/test/misc/GeoServices.test.js +36 -10
  403. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  404. package/lib/esm/test/schema/ClassRegistry.test.js +104 -2
  405. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  406. package/lib/esm/test/standalone/ChangesetReader.test.js +547 -136
  407. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  408. package/lib/esm/test/standalone/ExportGraphics.test.js +53 -1
  409. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  410. package/lib/esm/test/standalone/GeometryStream.test.js +49 -1
  411. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  412. package/lib/esm/test/standalone/IModelLimits.test.d.ts +2 -0
  413. package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
  414. package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
  415. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
  416. package/lib/esm/test/standalone/RenderMaterialElement.test.js +24 -1
  417. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  418. package/lib/esm/test/standalone/SnapshotDb.test.js +19 -1
  419. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  420. package/lib/esm/workspace/Workspace.d.ts +0 -1
  421. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  422. package/lib/esm/workspace/Workspace.js.map +1 -1
  423. package/package.json +22 -16
  424. package/lib/cjs/TextAnnotationElement.d.ts +0 -54
  425. package/lib/cjs/TextAnnotationElement.d.ts.map +0 -1
  426. package/lib/cjs/TextAnnotationElement.js +0 -94
  427. package/lib/cjs/TextAnnotationElement.js.map +0 -1
  428. package/lib/cjs/TextAnnotationGeometry.d.ts +0 -32
  429. package/lib/cjs/TextAnnotationGeometry.d.ts.map +0 -1
  430. package/lib/cjs/TextAnnotationGeometry.js.map +0 -1
  431. package/lib/cjs/TextAnnotationLayout.d.ts.map +0 -1
  432. package/lib/cjs/TextAnnotationLayout.js.map +0 -1
  433. package/lib/esm/TextAnnotationElement.d.ts +0 -54
  434. package/lib/esm/TextAnnotationElement.d.ts.map +0 -1
  435. package/lib/esm/TextAnnotationElement.js +0 -89
  436. package/lib/esm/TextAnnotationElement.js.map +0 -1
  437. package/lib/esm/TextAnnotationGeometry.d.ts +0 -32
  438. package/lib/esm/TextAnnotationGeometry.d.ts.map +0 -1
  439. package/lib/esm/TextAnnotationGeometry.js.map +0 -1
  440. package/lib/esm/TextAnnotationLayout.d.ts.map +0 -1
  441. package/lib/esm/TextAnnotationLayout.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IModelLimits.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelLimits.test.d.ts","sourceRoot":"","sources":["../../../../src/test/standalone/IModelLimits.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { Code, IModel, SubCategoryAppearance } from "@itwin/core-common";
6
+ import * as chai from "chai";
7
+ import { assert } from "chai";
8
+ import * as chaiAsPromised from "chai-as-promised";
9
+ import { HubWrappers, KnownTestLocations } from "..";
10
+ import { ChannelControl, IModelHost, SpatialCategory } from "../../core-backend";
11
+ import { HubMock } from "../../internal/HubMock";
12
+ import { IModelTestUtils, TestUserType } from "../IModelTestUtils";
13
+ chai.use(chaiAsPromised);
14
+ describe("imodel limits", function () {
15
+ const ctx = {
16
+ accessTokens: {
17
+ user1: "",
18
+ user2: "",
19
+ user3: "",
20
+ },
21
+ iModelId: "",
22
+ iTwinId: "",
23
+ modelId: "",
24
+ spatialCategoryId: "",
25
+ iModelName: "TestIModel",
26
+ rootSubject: "TestSubject",
27
+ openBriefcase: async (user, noLock) => {
28
+ const b = await HubWrappers.downloadAndOpenBriefcase({ accessToken: ctx.accessTokens[user], iTwinId: ctx.iTwinId, iModelId: ctx.iModelId, noLock });
29
+ b.channels.addAllowedChannel(ChannelControl.sharedChannelName);
30
+ return b;
31
+ },
32
+ openB1: async (noLock) => { return ctx.openBriefcase("user1", noLock); },
33
+ openB2: async (noLock) => { return ctx.openBriefcase("user2", noLock); },
34
+ openB3: async (noLock) => { return ctx.openBriefcase("user3", noLock); },
35
+ };
36
+ before(async () => {
37
+ await IModelHost.startup();
38
+ HubMock.startup("PullMergeMethod", KnownTestLocations.outputDir);
39
+ });
40
+ after(async () => {
41
+ HubMock.shutdown();
42
+ });
43
+ beforeEach(async () => {
44
+ ctx.iTwinId = HubMock.iTwinId;
45
+ ctx.accessTokens.user1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);
46
+ ctx.accessTokens.user2 = await HubWrappers.getAccessToken(TestUserType.Regular);
47
+ ctx.accessTokens.user3 = await HubWrappers.getAccessToken(TestUserType.Super);
48
+ ctx.iModelId = await HubMock.createNewIModel({ accessToken: ctx.accessTokens.user1, iTwinId: ctx.iTwinId, iModelName: ctx.iModelName, description: ctx.rootSubject });
49
+ assert.isNotEmpty(ctx.iModelId);
50
+ const b1 = await ctx.openB1(true);
51
+ await b1.locks.acquireLocks({ shared: IModel.dictionaryId });
52
+ [, ctx.modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(b1, IModelTestUtils.getUniqueModelCode(b1, "newPhysicalModel"), true);
53
+ const dictionary = b1.models.getModel(IModel.dictionaryId);
54
+ const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, "ThisTestSpatialCategory");
55
+ ctx.spatialCategoryId = SpatialCategory.insert(dictionary.iModel, dictionary.id, newCategoryCode.value, new SubCategoryAppearance({ color: 0xff0000 }));
56
+ b1.saveChanges();
57
+ await b1.pushChanges({ description: "" });
58
+ b1.close();
59
+ });
60
+ it("apply changes where max columns for class is used", async () => {
61
+ const b1 = await ctx.openB1(true);
62
+ const b2 = await ctx.openB2(true);
63
+ // Import schema into b1 but do not push it.
64
+ const createSchema = (additionProps) => {
65
+ const schema = [
66
+ `<?xml version="1.0" encoding="UTF-8"?>`,
67
+ `<ECSchema schemaName="TestSchema1" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">`,
68
+ ` <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>`,
69
+ ` <ECEntityClass typeName="Pipe1">`,
70
+ ` <BaseClass>bis:GeometricElement3d</BaseClass>`,
71
+ ];
72
+ for (let i = 0; i < additionProps; i++) {
73
+ schema.push(` <ECProperty propertyName="p${i}" typeName="int" />`);
74
+ }
75
+ schema.push(...[
76
+ ` </ECEntityClass>`,
77
+ `</ECSchema>`
78
+ ]);
79
+ return schema.join("\n");
80
+ };
81
+ const schemaThatMaxOutColumnsLimit = 2030;
82
+ await b1.importSchemaStrings([createSchema(schemaThatMaxOutColumnsLimit)]);
83
+ b1.saveChanges();
84
+ await b1.pushChanges({ description: "import schema" });
85
+ const elementProps = {
86
+ classFullName: "TestSchema1:Pipe1",
87
+ model: ctx.modelId,
88
+ category: ctx.spatialCategoryId,
89
+ code: Code.createEmpty(),
90
+ };
91
+ const el = b1.elements.createElement(elementProps);
92
+ b1.elements.insertElement(el.toJSON());
93
+ b1.saveChanges();
94
+ await b1.pushChanges({ description: "add element" });
95
+ // Error applying changeset with id [22f762181d236dfe25bb32e38ed3b7509e975deb]: failed to apply changes
96
+ // Expression depth is 2001 where current limit is 2000
97
+ await b2.pullChanges();
98
+ b1.close();
99
+ b2.close();
100
+ HubMock.shutdown();
101
+ });
102
+ });
103
+ //# sourceMappingURL=IModelLimits.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelLimits.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/IModelLimits.test.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\nimport {\n Code,\n GeometricElement3dProps,\n IModel, SubCategoryAppearance\n} from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport { assert } from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { HubWrappers, KnownTestLocations } from \"..\";\nimport {\n ChannelControl,\n DictionaryModel,\n IModelHost,\n SpatialCategory\n} from \"../../core-backend\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\nimport { Suite } from \"mocha\";\nchai.use(chaiAsPromised);\n\ndescribe(\"imodel limits\", function (this: Suite) {\n const ctx = {\n accessTokens: {\n user1: \"\",\n user2: \"\",\n user3: \"\",\n },\n iModelId: \"\",\n iTwinId: \"\",\n modelId: \"\",\n spatialCategoryId: \"\",\n iModelName: \"TestIModel\",\n rootSubject: \"TestSubject\",\n openBriefcase: async (user: \"user1\" | \"user2\" | \"user3\", noLock?: true) => {\n const b = await HubWrappers.downloadAndOpenBriefcase({ accessToken: ctx.accessTokens[user], iTwinId: ctx.iTwinId, iModelId: ctx.iModelId, noLock });\n b.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n return b;\n },\n openB1: async (noLock?: true) => { return ctx.openBriefcase(\"user1\", noLock); },\n openB2: async (noLock?: true) => { return ctx.openBriefcase(\"user2\", noLock); },\n openB3: async (noLock?: true) => { return ctx.openBriefcase(\"user3\", noLock); },\n }\n\n before(async () => {\n await IModelHost.startup();\n HubMock.startup(\"PullMergeMethod\", KnownTestLocations.outputDir);\n });\n\n after(async () => {\n HubMock.shutdown()\n });\n\n beforeEach(async () => {\n ctx.iTwinId = HubMock.iTwinId;\n ctx.accessTokens.user1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n ctx.accessTokens.user2 = await HubWrappers.getAccessToken(TestUserType.Regular);\n ctx.accessTokens.user3 = await HubWrappers.getAccessToken(TestUserType.Super);\n ctx.iModelId = await HubMock.createNewIModel({ accessToken: ctx.accessTokens.user1, iTwinId: ctx.iTwinId, iModelName: ctx.iModelName, description: ctx.rootSubject });\n assert.isNotEmpty(ctx.iModelId);\n const b1 = await ctx.openB1(true);\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n [, ctx.modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\n b1,\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\n true);\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n ctx.spatialCategoryId = SpatialCategory.insert(\n dictionary.iModel,\n dictionary.id,\n newCategoryCode.value,\n new SubCategoryAppearance({ color: 0xff0000 }),\n );\n b1.saveChanges();\n await b1.pushChanges({ description: \"\" });\n b1.close();\n });\n\n it(\"apply changes where max columns for class is used\", async () => {\n const b1 = await ctx.openB1(true);\n const b2 = await ctx.openB2(true);\n\n // Import schema into b1 but do not push it.\n const createSchema = (additionProps: number) => {\n const schema = [\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>`,\n `<ECSchema schemaName=\"TestSchema1\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">`,\n ` <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>`,\n ` <ECEntityClass typeName=\"Pipe1\">`,\n ` <BaseClass>bis:GeometricElement3d</BaseClass>`,\n ];\n\n for (let i = 0; i < additionProps; i++) {\n schema.push(` <ECProperty propertyName=\"p${i}\" typeName=\"int\" />`);\n }\n\n schema.push(...[\n ` </ECEntityClass>`,\n `</ECSchema>`\n ]);\n return schema.join(\"\\n\");\n }\n\n const schemaThatMaxOutColumnsLimit = 2030;\n\n await b1.importSchemaStrings([createSchema(schemaThatMaxOutColumnsLimit)]);\n b1.saveChanges();\n await b1.pushChanges({ description: \"import schema\" });\n\n const elementProps: GeometricElement3dProps = {\n classFullName: \"TestSchema1:Pipe1\",\n model: ctx.modelId,\n category: ctx.spatialCategoryId,\n code: Code.createEmpty(),\n };\n const el = b1.elements.createElement(elementProps);\n b1.elements.insertElement(el.toJSON());\n b1.saveChanges();\n await b1.pushChanges({ description: \"add element\" });\n\n // Error applying changeset with id [22f762181d236dfe25bb32e38ed3b7509e975deb]: failed to apply changes\n // Expression depth is 2001 where current limit is 2000\n await b2.pullChanges();\n\n b1.close();\n b2.close();\n\n HubMock.shutdown();\n });\n});\n"]}
@@ -24,7 +24,7 @@ function removeUndefined(assetProps) {
24
24
  return assetProps;
25
25
  }
26
26
  function defaultBooleans(assetProps) {
27
- const boolKeys = ["HasBaseColor", "HasDiffuse", "HasFinish", "HasReflect", "HasReflectColor", "HasSpecular", "HasSpecularColor", "HasTransmit"];
27
+ const boolKeys = ["HasBaseColor", "HasDiffuse", "HasFinish", "HasReflect", "HasReflectColor", "HasSpecular", "HasSpecularColor"];
28
28
  for (const boolKey of boolKeys)
29
29
  if (undefined === assetProps[boolKey])
30
30
  assetProps[boolKey] = false;
@@ -164,6 +164,29 @@ describe("RenderMaterialElement", () => {
164
164
  HasReflect: true, reflect: params.reflect,
165
165
  HasReflectColor: true, reflect_color: params.reflectColor,
166
166
  });
167
+ params.transmit = undefined;
168
+ /* eslint-disable @typescript-eslint/naming-convention */
169
+ test(params, {
170
+ HasBaseColor: true, color: params.color,
171
+ HasSpecularColor: true, specular_color: params.specularColor,
172
+ HasFinish: true, finish: params.finish,
173
+ HasDiffuse: true, diffuse: params.diffuse,
174
+ HasSpecular: true, specular: params.specular,
175
+ HasReflect: true, reflect: params.reflect,
176
+ HasReflectColor: true, reflect_color: params.reflectColor,
177
+ });
178
+ params.transmit = 0.0;
179
+ /* eslint-disable @typescript-eslint/naming-convention */
180
+ test(params, {
181
+ HasBaseColor: true, color: params.color,
182
+ HasSpecularColor: true, specular_color: params.specularColor,
183
+ HasFinish: true, finish: params.finish,
184
+ HasTransmit: true, transmit: params.transmit,
185
+ HasDiffuse: true, diffuse: params.diffuse,
186
+ HasSpecular: true, specular: params.specular,
187
+ HasReflect: true, reflect: params.reflect,
188
+ HasReflectColor: true, reflect_color: params.reflectColor,
189
+ });
167
190
  });
168
191
  it("pattern map with default values", () => {
169
192
  const textureId = insertTexture();
@@ -1 +1 @@
1
- {"version":3,"file":"RenderMaterialElement.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/RenderMaterialElement.test.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\nimport { assert, expect } from \"chai\";\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { ImageSourceFormat, IModel, NormalMapFlags, NormalMapProps, RenderMaterialAssetMapsProps, RenderMaterialAssetProps, RenderMaterialProps, TextureMapProps } from \"@itwin/core-common\";\nimport { ChannelControl, IModelElementCloneContext, RenderMaterialElement, RenderMaterialElementParams, SnapshotDb, Texture } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\nfunction removeUndefined(assetProps: RenderMaterialAssetProps): RenderMaterialAssetProps {\n const input = assetProps as any;\n for (const key of Object.keys(input))\n if (input[key] === undefined)\n delete input[key];\n\n const maps = assetProps.Map as any;\n if (maps) {\n for (const mapsKey of Object.keys(maps)) {\n const map = maps[mapsKey];\n for (const mapKey of Object.keys(map))\n if (map[mapKey] === undefined)\n delete map[mapKey];\n }\n }\n\n return assetProps;\n}\n\nfunction defaultBooleans(assetProps: RenderMaterialAssetProps): RenderMaterialAssetProps {\n const boolKeys = [\"HasBaseColor\", \"HasDiffuse\", \"HasFinish\", \"HasReflect\", \"HasReflectColor\", \"HasSpecular\", \"HasSpecularColor\", \"HasTransmit\"] as const;\n for (const boolKey of boolKeys)\n if (undefined === assetProps[boolKey])\n assetProps[boolKey] = false;\n\n return assetProps;\n}\n\ndescribe(\"RenderMaterialElement\", () => {\n let imodel: SnapshotDb;\n let materialNumber = 0;\n let textureNumber = 0;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ExportGraphics\", \"ExportGraphicsTest.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n });\n\n after(() => imodel.close());\n\n function test(params: Omit<RenderMaterialElementParams, \"paletteName\">, expected?: RenderMaterialAssetProps): RenderMaterialElement {\n const name = `material${++materialNumber}`;\n const paletteName = \"palette\";\n const id = RenderMaterialElement.insert(imodel, IModel.dictionaryId, name, { ...params, paletteName });\n expect(Id64.isValidId64(id)).to.be.true;\n\n const mat = imodel.elements.getElement<RenderMaterialElement>(id);\n const json = mat.toJSON();\n expect(json.jsonProperties?.materialAssets?.renderMaterial).not.to.be.undefined;\n const actual = removeUndefined(json.jsonProperties!.materialAssets!.renderMaterial!);\n\n if (expected !== undefined) {\n expected = defaultBooleans(expected);\n expect(actual).to.deep.equal(expected);\n }\n\n return mat;\n }\n\n function insertTexture(): Id64String {\n // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in\n // bottom right pixel. The rest of the square is red.\n const pngData = new Uint8Array([\n 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217,\n 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252,\n 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65,\n 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0,\n 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,\n ]);\n\n const name = `texture${++textureNumber}`;\n const textureId = Texture.insertTexture(imodel, IModel.dictionaryId, name, ImageSourceFormat.Png, pngData);\n expect(Id64.isValidId64(textureId)).to.be.true;\n return textureId;\n }\n\n describe(\"read\", () => {\n it(\"should be able to convert TextureId to hexadecimal string outside javascript's double precision range of 2^53\", async () => {\n // LargeNumericRenderMaterialTextureId is a database with a single RenderMaterial whose jsonProperties look something like:\n // {\"materialAssets\":{\"renderMaterial\":{\"Map\":{\"Diffuse\":{\"TextureId\":9223372036854775807},\"Bump\":{\"TextureId\":18446744073709551615},\"Finish\":{\"TextureId\":13835058055282163712}}}}}\n // 9223372036854775807 is equivalent to 2^63 - 1 which is equivalent to the hexadecimal string 0x7fffffffffffffff.\n // 18446744073709551615 is equivalent to 2^64 - 1 which is equivalent to the hexadecimal string 0xffffffffffffffff.\n // 13835058055282163712 is equivalent to 2^63 + (2^63 / 2) which is equivalent to the hexadecimal string 0xc000000000000000.\n const seedFileName = IModelTestUtils.resolveAssetFile(\"LargeNumericRenderMaterialTextureId.bim\");\n\n const db = SnapshotDb.openFile(seedFileName);\n let id: Id64String;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withStatement(`SELECT ECInstanceId from Bis.RenderMaterial`, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n id = stmt.getRow().id;\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_DONE);\n });\n const renderMatElement = db.elements.getElement<RenderMaterialElement>(id!).toJSON();\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Diffuse?.TextureId).to.equal(\"0x7fffffffffffffff\");\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Bump?.TextureId).to.equal(\"0xffffffffffffffff\");\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Finish?.TextureId).to.equal(\"0xc000000000000000\");\n db.close();\n });\n });\n\n describe(\"insert\", () => {\n it(\"with default values\", () => {\n test({}, {});\n });\n\n it(\"should convert TextureIds to hexadecimal string when loading element\", () => {\n /* eslint-disable @typescript-eslint/naming-convention */\n const maps: RenderMaterialAssetMapsProps = {\n Pattern: { TextureId: 1 },\n Normal: { TextureId: 0x0000bc0000001234 }, // TextureId has a non-zero briefcase Id\n Bump: { TextureId: 0x000000123456789a }, // TextureId has non-zero digits in the upper 32 bits\n Diffuse: { TextureId: 0x0000bc123456789a }, // TextureId has a non-zero briefcase Id and non-zero digits in the upper 32 bits.\n Finish: { TextureId: 5 },\n GlowColor: { TextureId: 6 },\n Reflect: { TextureId: 7 },\n Specular: { TextureId: 8 },\n TranslucencyColor: { OtherProp2: \"test\"}, // Should be unchanged, still present.\n TransparentColor: { TextureId: 10, OtherProp: 1 }, // OtherProp should be unchanged, still present.\n Displacement: { TextureId: \"0x1\"},\n OtherProperty: { OtherProperty: \"test\"}, // Should be unchanged.\n } as any;\n /* eslint-enable @typescript-eslint/naming-convention */\n const material = test({});\n const jsonProps = material.jsonProperties as RenderMaterialProps[\"jsonProperties\"];\n assert(jsonProps?.materialAssets?.renderMaterial && jsonProps.materialAssets.renderMaterial.Map === undefined);\n jsonProps.materialAssets.renderMaterial.Map = maps;\n material.update();\n\n const pathName = imodel.pathName;\n imodel.saveChanges();\n imodel.close(); // Need to close so we can load the element back in with strings instead of numbers.\n\n imodel = SnapshotDb.openForApplyChangesets(pathName);\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const mat = imodel.elements.getElement<RenderMaterialElement>(material.id);\n\n const props = mat.toJSON();\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map).to.not.be.undefined;\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Pattern?.TextureId).to.equal(\"0x1\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Normal?.TextureId).to.equal(\"0xbc0000001234\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Bump?.TextureId).to.equal(\"0x123456789a\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Diffuse?.TextureId).to.equal(\"0xbc123456789a\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Finish?.TextureId).to.equal(\"0x5\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.GlowColor?.TextureId).to.equal(\"0x6\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Reflect?.TextureId).to.equal(\"0x7\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Specular?.TextureId).to.equal(\"0x8\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TranslucencyColor?.TextureId).to.be.undefined;\n expect((props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TranslucencyColor as any).OtherProp2).to.equal(\"test\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TransparentColor?.TextureId).to.equal(\"0xa\");\n expect((props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TransparentColor as any).OtherProp).to.equal(1);\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Displacement?.TextureId).to.equal(\"0x1\");\n expect(((props.jsonProperties?.materialAssets?.renderMaterial?.Map as any).OtherProperty).OtherProperty).to.equal(\"test\");\n });\n\n it(\"with custom values\", () => {\n const params: Omit<RenderMaterialElementParams, \"paletteName\"> = {\n color: [1, 0, 0],\n specularColor: [0, 1, 0],\n finish: 21,\n transmit: 0.5,\n diffuse: 0.2,\n specular: 0.8,\n reflect: 0.5,\n reflectColor: [0, 0, 1],\n };\n\n /* eslint-disable @typescript-eslint/naming-convention */\n test(params, {\n HasBaseColor: true, color: params.color,\n HasSpecularColor: true, specular_color: params.specularColor,\n HasFinish: true, finish: params.finish,\n HasTransmit: true, transmit: params.transmit,\n HasDiffuse: true, diffuse: params.diffuse,\n HasSpecular: true, specular: params.specular,\n HasReflect: true, reflect: params.reflect,\n HasReflectColor: true, reflect_color: params.reflectColor,\n });\n });\n\n it(\"pattern map with default values\", () => {\n const textureId = insertTexture();\n test({\n patternMap: {\n TextureId: textureId,\n },\n }, {\n Map: {\n Pattern: {\n TextureId: textureId,\n },\n },\n });\n });\n\n it(\"pattern map with custom values\", () => {\n const patternMap: TextureMapProps = {\n TextureId: insertTexture(),\n pattern_angle: 1,\n pattern_u_flip: true,\n pattern_flip: true,\n pattern_scale: [-1, 2],\n pattern_offset: [-2, 1],\n pattern_scalemode: 3,\n pattern_mapping: 4,\n pattern_weight: 0.5,\n };\n\n test({ patternMap }, { Map: { Pattern: patternMap } });\n });\n\n it(\"pattern map with constant lod parameters\", () => {\n const patternMap: TextureMapProps = {\n TextureId: insertTexture(),\n pattern_angle: 1,\n pattern_u_flip: true,\n pattern_flip: true,\n pattern_scale: [-1, 2],\n pattern_offset: [-2, 1],\n pattern_scalemode: 3,\n pattern_mapping: 4,\n pattern_weight: 0.5,\n pattern_useconstantlod: true,\n pattern_constantlod_repetitions: 0.333,\n pattern_constantlod_offset: [1000, 2000],\n pattern_constantlod_mindistanceclamp: 4,\n pattern_constantlod_maxdistanceclamp: 256,\n };\n\n test({ patternMap }, { Map: { Pattern: patternMap } });\n });\n\n it(\"normal and pattern maps with default values\", () => {\n const normalId = insertTexture();\n const patternId = insertTexture();\n expect(normalId).not.to.equal(patternId);\n\n test({\n patternMap: { TextureId: patternId },\n normalMap: { TextureId: normalId },\n }, {\n Map: {\n Pattern: { TextureId: patternId },\n Normal: {\n TextureId: normalId,\n },\n },\n });\n });\n\n it(\"merges mapping params from normal and pattern maps\", () => {\n const normalId = insertTexture();\n const patternId = insertTexture();\n expect(normalId).not.to.equal(patternId);\n\n const patternMap: TextureMapProps = {\n TextureId: patternId,\n pattern_scale: [-1, 2],\n pattern_weight: 0.5,\n };\n\n const normalMap: NormalMapProps = {\n TextureId: normalId,\n pattern_angle: 0.8,\n pattern_flip: true,\n pattern_weight: 1.5,\n };\n\n const sharedProps: Omit<TextureMapProps, \"TextureId\"> = {\n pattern_scale: patternMap.pattern_scale,\n pattern_weight: patternMap.pattern_weight,\n pattern_angle: normalMap.pattern_angle,\n pattern_flip: normalMap.pattern_flip,\n };\n\n test({ patternMap, normalMap }, {\n Map: {\n Pattern: {\n ...sharedProps,\n TextureId: patternId,\n },\n Normal: {\n ...sharedProps,\n TextureId: normalId,\n },\n },\n });\n });\n\n it(\"normal map with default values\", () => {\n const id = insertTexture();\n test({ normalMap: { TextureId: id } }, { Map: { Normal: { TextureId: id } } });\n });\n\n it(\"normal map with inverted green channel\", () => {\n const id = insertTexture();\n test({\n normalMap: {\n TextureId: id,\n NormalFlags: 1,\n },\n }, {\n Map: {\n Normal: {\n NormalFlags: 1,\n TextureId: id,\n },\n },\n });\n });\n\n it(\"normal map with scale\", () => {\n const id = insertTexture();\n const scale = 2.5;\n test({\n normalMap: {\n TextureId: id,\n scale,\n },\n }, {\n pbr_normal: 2.5,\n Map: {\n Normal: {\n TextureId: id,\n },\n },\n });\n });\n\n it(\"normal map with flags\", () => {\n const id = insertTexture();\n test({\n normalMap: {\n TextureId: id,\n NormalFlags: 0xff00 as NormalMapFlags,\n },\n }, {\n Map: {\n Normal: {\n TextureId: id,\n NormalFlags: 0xff00 as NormalMapFlags,\n },\n },\n });\n });\n\n it(\"normal map with constant lod parameters\", () => {\n const normalMap: NormalMapProps = {\n TextureId: insertTexture(),\n NormalFlags: 2,\n pattern_constantlod_repetitions: 0.333,\n pattern_constantlod_offset: [1000, 2000],\n pattern_constantlod_mindistanceclamp: 4,\n pattern_constantlod_maxdistanceclamp: 256,\n };\n test({ normalMap }, { Map: { Normal: normalMap } });\n });\n });\n\n describe(\"clone\", () => {\n it(\"clone maps\", () => {\n const textureId = insertTexture();\n const unknownTextureId = \"0xffffff\";\n\n expect(Id64.isValidId64(unknownTextureId)).to.be.true;\n expect(imodel.elements.tryGetElementProps(unknownTextureId)).to.be.undefined;\n\n const maps: RenderMaterialAssetMapsProps = {\n Pattern: { TextureId: textureId },\n Normal: { TextureId: textureId },\n Bump: { TextureId: textureId },\n Diffuse: { TextureId: textureId },\n Finish: { TextureId: textureId },\n GlowColor: { TextureId: textureId },\n Reflect: { TextureId: textureId },\n Specular: { TextureId: textureId },\n TranslucencyColor: { TextureId: textureId },\n TransparentColor: { TextureId: textureId },\n Displacement: { TextureId: textureId },\n [\"Unknown\" as any]: { TextureId: textureId },\n [\"InvalidTexture\" as any]: { TextureId: Id64.invalid },\n [\"UnknownTexture\" as any]: { TextureId: unknownTextureId },\n [\"NoTextureId\" as any]: { OtherProp: 1 },\n };\n\n const material = test({});\n const jsonProps = material.jsonProperties as RenderMaterialProps[\"jsonProperties\"];\n assert(jsonProps?.materialAssets?.renderMaterial && jsonProps.materialAssets.renderMaterial.Map === undefined);\n jsonProps.materialAssets.renderMaterial.Map = maps;\n material.update();\n\n const context = {\n findTargetElementId: (sourceId: Id64String) => {\n expect(typeof sourceId, `bad id: ${sourceId}`).to.equal(\"string\");\n expect(Id64.isId64(sourceId), `bad id: ${sourceId}`).to.be.true;\n return \"CLONED\";\n },\n } as any as IModelElementCloneContext;\n\n const sourceProps = material.toJSON();\n const targetProps = structuredClone(sourceProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.deep.equal({\n Pattern: { TextureId: \"CLONED\" },\n Normal: { TextureId: \"CLONED\" },\n Bump: { TextureId: \"CLONED\" },\n Diffuse: { TextureId: \"CLONED\" },\n Finish: { TextureId: \"CLONED\" },\n GlowColor: { TextureId: \"CLONED\" },\n Reflect: { TextureId: \"CLONED\" },\n Specular: { TextureId: \"CLONED\" },\n TranslucencyColor: { TextureId: \"CLONED\" },\n TransparentColor: { TextureId: \"CLONED\" },\n Displacement: { TextureId: \"CLONED\" },\n Unknown: { TextureId: \"CLONED\" },\n InvalidTexture: { TextureId: Id64.invalid },\n UnknownTexture: { TextureId: \"CLONED\" },\n NoTextureId: { OtherProp: 1 },\n });\n\n jsonProps.materialAssets.renderMaterial.Map = {Pattern: undefined};\n // eslint-disable-next-line @typescript-eslint/dot-notation\n RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n // keep the sourceMap the same in targetProps\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.have.property(\"Pattern\").that.is.undefined;\n jsonProps.materialAssets.renderMaterial.Map = {Pattern: null as any};\n // eslint-disable-next-line @typescript-eslint/dot-notation\n RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n // keep the sourceMap the same in targetProps\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.have.property(\"Pattern\").that.is.null;\n });\n });\n});\n"]}
1
+ {"version":3,"file":"RenderMaterialElement.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/RenderMaterialElement.test.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\nimport { assert, expect } from \"chai\";\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { ImageSourceFormat, IModel, NormalMapFlags, NormalMapProps, RenderMaterialAssetMapsProps, RenderMaterialAssetProps, RenderMaterialProps, TextureMapProps } from \"@itwin/core-common\";\nimport { ChannelControl, IModelElementCloneContext, RenderMaterialElement, RenderMaterialElementParams, SnapshotDb, Texture } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\nfunction removeUndefined(assetProps: RenderMaterialAssetProps): RenderMaterialAssetProps {\n const input = assetProps as any;\n for (const key of Object.keys(input))\n if (input[key] === undefined)\n delete input[key];\n\n const maps = assetProps.Map as any;\n if (maps) {\n for (const mapsKey of Object.keys(maps)) {\n const map = maps[mapsKey];\n for (const mapKey of Object.keys(map))\n if (map[mapKey] === undefined)\n delete map[mapKey];\n }\n }\n\n return assetProps;\n}\n\nfunction defaultBooleans(assetProps: RenderMaterialAssetProps): RenderMaterialAssetProps {\n const boolKeys = [\"HasBaseColor\", \"HasDiffuse\", \"HasFinish\", \"HasReflect\", \"HasReflectColor\", \"HasSpecular\", \"HasSpecularColor\"] as const;\n for (const boolKey of boolKeys)\n if (undefined === assetProps[boolKey])\n assetProps[boolKey] = false;\n\n return assetProps;\n}\n\ndescribe(\"RenderMaterialElement\", () => {\n let imodel: SnapshotDb;\n let materialNumber = 0;\n let textureNumber = 0;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ExportGraphics\", \"ExportGraphicsTest.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n });\n\n after(() => imodel.close());\n\n function test(params: Omit<RenderMaterialElementParams, \"paletteName\">, expected?: RenderMaterialAssetProps): RenderMaterialElement {\n const name = `material${++materialNumber}`;\n const paletteName = \"palette\";\n const id = RenderMaterialElement.insert(imodel, IModel.dictionaryId, name, { ...params, paletteName });\n expect(Id64.isValidId64(id)).to.be.true;\n\n const mat = imodel.elements.getElement<RenderMaterialElement>(id);\n const json = mat.toJSON();\n expect(json.jsonProperties?.materialAssets?.renderMaterial).not.to.be.undefined;\n const actual = removeUndefined(json.jsonProperties!.materialAssets!.renderMaterial!);\n\n if (expected !== undefined) {\n expected = defaultBooleans(expected);\n expect(actual).to.deep.equal(expected);\n }\n\n return mat;\n }\n\n function insertTexture(): Id64String {\n // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in\n // bottom right pixel. The rest of the square is red.\n const pngData = new Uint8Array([\n 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217,\n 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252,\n 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65,\n 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0,\n 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,\n ]);\n\n const name = `texture${++textureNumber}`;\n const textureId = Texture.insertTexture(imodel, IModel.dictionaryId, name, ImageSourceFormat.Png, pngData);\n expect(Id64.isValidId64(textureId)).to.be.true;\n return textureId;\n }\n\n describe(\"read\", () => {\n it(\"should be able to convert TextureId to hexadecimal string outside javascript's double precision range of 2^53\", async () => {\n // LargeNumericRenderMaterialTextureId is a database with a single RenderMaterial whose jsonProperties look something like:\n // {\"materialAssets\":{\"renderMaterial\":{\"Map\":{\"Diffuse\":{\"TextureId\":9223372036854775807},\"Bump\":{\"TextureId\":18446744073709551615},\"Finish\":{\"TextureId\":13835058055282163712}}}}}\n // 9223372036854775807 is equivalent to 2^63 - 1 which is equivalent to the hexadecimal string 0x7fffffffffffffff.\n // 18446744073709551615 is equivalent to 2^64 - 1 which is equivalent to the hexadecimal string 0xffffffffffffffff.\n // 13835058055282163712 is equivalent to 2^63 + (2^63 / 2) which is equivalent to the hexadecimal string 0xc000000000000000.\n const seedFileName = IModelTestUtils.resolveAssetFile(\"LargeNumericRenderMaterialTextureId.bim\");\n\n const db = SnapshotDb.openFile(seedFileName);\n let id: Id64String;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withStatement(`SELECT ECInstanceId from Bis.RenderMaterial`, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n id = stmt.getRow().id;\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_DONE);\n });\n const renderMatElement = db.elements.getElement<RenderMaterialElement>(id!).toJSON();\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Diffuse?.TextureId).to.equal(\"0x7fffffffffffffff\");\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Bump?.TextureId).to.equal(\"0xffffffffffffffff\");\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Finish?.TextureId).to.equal(\"0xc000000000000000\");\n db.close();\n });\n });\n\n describe(\"insert\", () => {\n it(\"with default values\", () => {\n test({}, {});\n });\n\n it(\"should convert TextureIds to hexadecimal string when loading element\", () => {\n /* eslint-disable @typescript-eslint/naming-convention */\n const maps: RenderMaterialAssetMapsProps = {\n Pattern: { TextureId: 1 },\n Normal: { TextureId: 0x0000bc0000001234 }, // TextureId has a non-zero briefcase Id\n Bump: { TextureId: 0x000000123456789a }, // TextureId has non-zero digits in the upper 32 bits\n Diffuse: { TextureId: 0x0000bc123456789a }, // TextureId has a non-zero briefcase Id and non-zero digits in the upper 32 bits.\n Finish: { TextureId: 5 },\n GlowColor: { TextureId: 6 },\n Reflect: { TextureId: 7 },\n Specular: { TextureId: 8 },\n TranslucencyColor: { OtherProp2: \"test\"}, // Should be unchanged, still present.\n TransparentColor: { TextureId: 10, OtherProp: 1 }, // OtherProp should be unchanged, still present.\n Displacement: { TextureId: \"0x1\"},\n OtherProperty: { OtherProperty: \"test\"}, // Should be unchanged.\n } as any;\n /* eslint-enable @typescript-eslint/naming-convention */\n const material = test({});\n const jsonProps = material.jsonProperties as RenderMaterialProps[\"jsonProperties\"];\n assert(jsonProps?.materialAssets?.renderMaterial && jsonProps.materialAssets.renderMaterial.Map === undefined);\n jsonProps.materialAssets.renderMaterial.Map = maps;\n material.update();\n\n const pathName = imodel.pathName;\n imodel.saveChanges();\n imodel.close(); // Need to close so we can load the element back in with strings instead of numbers.\n\n imodel = SnapshotDb.openForApplyChangesets(pathName);\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const mat = imodel.elements.getElement<RenderMaterialElement>(material.id);\n\n const props = mat.toJSON();\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map).to.not.be.undefined;\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Pattern?.TextureId).to.equal(\"0x1\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Normal?.TextureId).to.equal(\"0xbc0000001234\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Bump?.TextureId).to.equal(\"0x123456789a\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Diffuse?.TextureId).to.equal(\"0xbc123456789a\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Finish?.TextureId).to.equal(\"0x5\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.GlowColor?.TextureId).to.equal(\"0x6\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Reflect?.TextureId).to.equal(\"0x7\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Specular?.TextureId).to.equal(\"0x8\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TranslucencyColor?.TextureId).to.be.undefined;\n expect((props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TranslucencyColor as any).OtherProp2).to.equal(\"test\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TransparentColor?.TextureId).to.equal(\"0xa\");\n expect((props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TransparentColor as any).OtherProp).to.equal(1);\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Displacement?.TextureId).to.equal(\"0x1\");\n expect(((props.jsonProperties?.materialAssets?.renderMaterial?.Map as any).OtherProperty).OtherProperty).to.equal(\"test\");\n });\n\n it(\"with custom values\", () => {\n const params: Omit<RenderMaterialElementParams, \"paletteName\"> = {\n color: [1, 0, 0],\n specularColor: [0, 1, 0],\n finish: 21,\n transmit: 0.5,\n diffuse: 0.2,\n specular: 0.8,\n reflect: 0.5,\n reflectColor: [0, 0, 1],\n };\n\n /* eslint-disable @typescript-eslint/naming-convention */\n test(params, {\n HasBaseColor: true, color: params.color,\n HasSpecularColor: true, specular_color: params.specularColor,\n HasFinish: true, finish: params.finish,\n HasTransmit: true, transmit: params.transmit,\n HasDiffuse: true, diffuse: params.diffuse,\n HasSpecular: true, specular: params.specular,\n HasReflect: true, reflect: params.reflect,\n HasReflectColor: true, reflect_color: params.reflectColor,\n });\n\n params.transmit = undefined;\n /* eslint-disable @typescript-eslint/naming-convention */\n test(params, {\n HasBaseColor: true, color: params.color,\n HasSpecularColor: true, specular_color: params.specularColor,\n HasFinish: true, finish: params.finish,\n HasDiffuse: true, diffuse: params.diffuse,\n HasSpecular: true, specular: params.specular,\n HasReflect: true, reflect: params.reflect,\n HasReflectColor: true, reflect_color: params.reflectColor,\n });\n\n params.transmit = 0.0;\n /* eslint-disable @typescript-eslint/naming-convention */\n test(params, {\n HasBaseColor: true, color: params.color,\n HasSpecularColor: true, specular_color: params.specularColor,\n HasFinish: true, finish: params.finish,\n HasTransmit: true, transmit: params.transmit,\n HasDiffuse: true, diffuse: params.diffuse,\n HasSpecular: true, specular: params.specular,\n HasReflect: true, reflect: params.reflect,\n HasReflectColor: true, reflect_color: params.reflectColor,\n });\n });\n\n it(\"pattern map with default values\", () => {\n const textureId = insertTexture();\n test({\n patternMap: {\n TextureId: textureId,\n },\n }, {\n Map: {\n Pattern: {\n TextureId: textureId,\n },\n },\n });\n });\n\n it(\"pattern map with custom values\", () => {\n const patternMap: TextureMapProps = {\n TextureId: insertTexture(),\n pattern_angle: 1,\n pattern_u_flip: true,\n pattern_flip: true,\n pattern_scale: [-1, 2],\n pattern_offset: [-2, 1],\n pattern_scalemode: 3,\n pattern_mapping: 4,\n pattern_weight: 0.5,\n };\n\n test({ patternMap }, { Map: { Pattern: patternMap } });\n });\n\n it(\"pattern map with constant lod parameters\", () => {\n const patternMap: TextureMapProps = {\n TextureId: insertTexture(),\n pattern_angle: 1,\n pattern_u_flip: true,\n pattern_flip: true,\n pattern_scale: [-1, 2],\n pattern_offset: [-2, 1],\n pattern_scalemode: 3,\n pattern_mapping: 4,\n pattern_weight: 0.5,\n pattern_useconstantlod: true,\n pattern_constantlod_repetitions: 0.333,\n pattern_constantlod_offset: [1000, 2000],\n pattern_constantlod_mindistanceclamp: 4,\n pattern_constantlod_maxdistanceclamp: 256,\n };\n\n test({ patternMap }, { Map: { Pattern: patternMap } });\n });\n\n it(\"normal and pattern maps with default values\", () => {\n const normalId = insertTexture();\n const patternId = insertTexture();\n expect(normalId).not.to.equal(patternId);\n\n test({\n patternMap: { TextureId: patternId },\n normalMap: { TextureId: normalId },\n }, {\n Map: {\n Pattern: { TextureId: patternId },\n Normal: {\n TextureId: normalId,\n },\n },\n });\n });\n\n it(\"merges mapping params from normal and pattern maps\", () => {\n const normalId = insertTexture();\n const patternId = insertTexture();\n expect(normalId).not.to.equal(patternId);\n\n const patternMap: TextureMapProps = {\n TextureId: patternId,\n pattern_scale: [-1, 2],\n pattern_weight: 0.5,\n };\n\n const normalMap: NormalMapProps = {\n TextureId: normalId,\n pattern_angle: 0.8,\n pattern_flip: true,\n pattern_weight: 1.5,\n };\n\n const sharedProps: Omit<TextureMapProps, \"TextureId\"> = {\n pattern_scale: patternMap.pattern_scale,\n pattern_weight: patternMap.pattern_weight,\n pattern_angle: normalMap.pattern_angle,\n pattern_flip: normalMap.pattern_flip,\n };\n\n test({ patternMap, normalMap }, {\n Map: {\n Pattern: {\n ...sharedProps,\n TextureId: patternId,\n },\n Normal: {\n ...sharedProps,\n TextureId: normalId,\n },\n },\n });\n });\n\n it(\"normal map with default values\", () => {\n const id = insertTexture();\n test({ normalMap: { TextureId: id } }, { Map: { Normal: { TextureId: id } } });\n });\n\n it(\"normal map with inverted green channel\", () => {\n const id = insertTexture();\n test({\n normalMap: {\n TextureId: id,\n NormalFlags: 1,\n },\n }, {\n Map: {\n Normal: {\n NormalFlags: 1,\n TextureId: id,\n },\n },\n });\n });\n\n it(\"normal map with scale\", () => {\n const id = insertTexture();\n const scale = 2.5;\n test({\n normalMap: {\n TextureId: id,\n scale,\n },\n }, {\n pbr_normal: 2.5,\n Map: {\n Normal: {\n TextureId: id,\n },\n },\n });\n });\n\n it(\"normal map with flags\", () => {\n const id = insertTexture();\n test({\n normalMap: {\n TextureId: id,\n NormalFlags: 0xff00 as NormalMapFlags,\n },\n }, {\n Map: {\n Normal: {\n TextureId: id,\n NormalFlags: 0xff00 as NormalMapFlags,\n },\n },\n });\n });\n\n it(\"normal map with constant lod parameters\", () => {\n const normalMap: NormalMapProps = {\n TextureId: insertTexture(),\n NormalFlags: 2,\n pattern_constantlod_repetitions: 0.333,\n pattern_constantlod_offset: [1000, 2000],\n pattern_constantlod_mindistanceclamp: 4,\n pattern_constantlod_maxdistanceclamp: 256,\n };\n test({ normalMap }, { Map: { Normal: normalMap } });\n });\n });\n\n describe(\"clone\", () => {\n it(\"clone maps\", () => {\n const textureId = insertTexture();\n const unknownTextureId = \"0xffffff\";\n\n expect(Id64.isValidId64(unknownTextureId)).to.be.true;\n expect(imodel.elements.tryGetElementProps(unknownTextureId)).to.be.undefined;\n\n const maps: RenderMaterialAssetMapsProps = {\n Pattern: { TextureId: textureId },\n Normal: { TextureId: textureId },\n Bump: { TextureId: textureId },\n Diffuse: { TextureId: textureId },\n Finish: { TextureId: textureId },\n GlowColor: { TextureId: textureId },\n Reflect: { TextureId: textureId },\n Specular: { TextureId: textureId },\n TranslucencyColor: { TextureId: textureId },\n TransparentColor: { TextureId: textureId },\n Displacement: { TextureId: textureId },\n [\"Unknown\" as any]: { TextureId: textureId },\n [\"InvalidTexture\" as any]: { TextureId: Id64.invalid },\n [\"UnknownTexture\" as any]: { TextureId: unknownTextureId },\n [\"NoTextureId\" as any]: { OtherProp: 1 },\n };\n\n const material = test({});\n const jsonProps = material.jsonProperties as RenderMaterialProps[\"jsonProperties\"];\n assert(jsonProps?.materialAssets?.renderMaterial && jsonProps.materialAssets.renderMaterial.Map === undefined);\n jsonProps.materialAssets.renderMaterial.Map = maps;\n material.update();\n\n const context = {\n findTargetElementId: (sourceId: Id64String) => {\n expect(typeof sourceId, `bad id: ${sourceId}`).to.equal(\"string\");\n expect(Id64.isId64(sourceId), `bad id: ${sourceId}`).to.be.true;\n return \"CLONED\";\n },\n } as any as IModelElementCloneContext;\n\n const sourceProps = material.toJSON();\n const targetProps = structuredClone(sourceProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.deep.equal({\n Pattern: { TextureId: \"CLONED\" },\n Normal: { TextureId: \"CLONED\" },\n Bump: { TextureId: \"CLONED\" },\n Diffuse: { TextureId: \"CLONED\" },\n Finish: { TextureId: \"CLONED\" },\n GlowColor: { TextureId: \"CLONED\" },\n Reflect: { TextureId: \"CLONED\" },\n Specular: { TextureId: \"CLONED\" },\n TranslucencyColor: { TextureId: \"CLONED\" },\n TransparentColor: { TextureId: \"CLONED\" },\n Displacement: { TextureId: \"CLONED\" },\n Unknown: { TextureId: \"CLONED\" },\n InvalidTexture: { TextureId: Id64.invalid },\n UnknownTexture: { TextureId: \"CLONED\" },\n NoTextureId: { OtherProp: 1 },\n });\n\n jsonProps.materialAssets.renderMaterial.Map = {Pattern: undefined};\n // eslint-disable-next-line @typescript-eslint/dot-notation\n RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n // keep the sourceMap the same in targetProps\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.have.property(\"Pattern\").that.is.undefined;\n jsonProps.materialAssets.renderMaterial.Map = {Pattern: null as any};\n // eslint-disable-next-line @typescript-eslint/dot-notation\n RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n // keep the sourceMap the same in targetProps\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.have.property(\"Pattern\").that.is.null;\n });\n });\n});\n"]}
@@ -5,12 +5,16 @@
5
5
  import { expect } from "chai";
6
6
  import * as sinon from "sinon";
7
7
  import { CheckpointManager, V2CheckpointManager } from "../../CheckpointManager";
8
- import { IModelDb, SnapshotDb } from "../../IModelDb";
8
+ import { IModelDb, SnapshotDb, StandaloneDb } from "../../IModelDb";
9
9
  import { Logger } from "@itwin/core-bentley";
10
10
  import { IModelHost } from "../../IModelHost";
11
11
  import { HubMock } from "../../internal/HubMock";
12
12
  import { _hubAccess } from "../../internal/Symbols";
13
13
  import { IModelTestUtils } from "../IModelTestUtils";
14
+ import { SpatialCategory } from "../../Category";
15
+ import { KnownTestLocations } from "../KnownTestLocations";
16
+ import * as path from "path";
17
+ import { IModelJsFs } from "../../IModelJsFs";
14
18
  describe("SnapshotDb.refreshContainerForRpc", () => {
15
19
  afterEach(() => sinon.restore());
16
20
  const changeset = { id: "fakeChangeSetId", index: 10 };
@@ -42,6 +46,20 @@ describe("SnapshotDb.refreshContainerForRpc", () => {
42
46
  getFilePath: () => "fakeFilePath",
43
47
  clearECDbCache: () => { },
44
48
  };
49
+ it("perform checkpoint", async () => {
50
+ const sourceFileName = path.join(KnownTestLocations.outputDir, "checkpoint1.bim");
51
+ if (IModelJsFs.existsSync(sourceFileName))
52
+ IModelJsFs.removeSync(sourceFileName);
53
+ const iModel = StandaloneDb.createEmpty(sourceFileName, {
54
+ rootSubject: { name: sourceFileName },
55
+ });
56
+ iModel.clearCaches();
57
+ iModel.performCheckpoint();
58
+ SpatialCategory.insert(iModel, IModelDb.dictionaryId, "spatial category", {});
59
+ // Use to throw error SQLITE_LOCKED
60
+ iModel.performCheckpoint();
61
+ iModel.close();
62
+ });
45
63
  it("should restart default txn after inactivity", async () => {
46
64
  const clock = sinon.useFakeTimers();
47
65
  clock.setSystemTime(Date.parse("2021-01-01T00:00:00Z"));
@@ -1 +1 @@
1
- {"version":3,"file":"SnapshotDb.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SnapshotDb.test.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\nimport { expect } from \"chai\";\nimport * as sinon from \"sinon\";\nimport { ChangesetIdWithIndex } from \"@itwin/core-common\";\nimport { CheckpointManager, V2CheckpointManager } from \"../../CheckpointManager\";\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport { IModelHost } from \"../../IModelHost\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { _hubAccess, _nativeDb } from \"../../internal/Symbols\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"SnapshotDb.refreshContainerForRpc\", () => {\n afterEach(() => sinon.restore());\n\n const changeset: ChangesetIdWithIndex = { id: \"fakeChangeSetId\", index: 10 };\n const iTwinId = \"fakeIModelId\";\n const iModelId = \"fakeIModelId\";\n const makeToken = (date: string) => {\n const dateUri = encodeURIComponent(date);\n return `?sv=2018-03-28&st=${dateUri}&se=${dateUri}&sr=c&sp=rl&sig=bad`;\n };\n\n const mockCheckpointV2 = {\n accountName: \"testAccount\",\n containerId: \"imodelblocks-123\",\n sasToken: makeToken(\"2021-01-01T01:00:00Z\"),\n dbName: \"testDb\",\n storageType: \"azure?sas=1\",\n };\n\n const cloudContainer = { accessToken: mockCheckpointV2.sasToken };\n const fakeSnapshotDb: any = {\n cloudContainer,\n isReadonly: () => true,\n isOpen: () => true,\n getIModelId: () => iModelId,\n getITwinId: () => iTwinId,\n getCurrentChangeset: () => changeset,\n setIModelDb: () => { },\n closeIModel: () => { },\n restartDefaultTxn: () => { },\n closeFile: () => { },\n getFilePath: () => \"fakeFilePath\",\n clearECDbCache: () => { },\n };\n\n it(\"should restart default txn after inactivity\", async () => {\n const clock = sinon.useFakeTimers();\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\n const defaultTxnSpy = sinon.spy(SnapshotDb.prototype, \"restartDefaultTxn\");\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\n return { dbName: \"fakeDb\", container: cloudContainer } as any;\n });\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\n\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\n\n const userAccessToken = \"token\";\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken: userAccessToken, iTwinId, iModelId, changeset, reattachSafetySeconds: 60 });\n expect(openDgnDbStub.calledOnce).to.be.true;\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\n\n const tenMinutes = 10 * 60 * 1000;\n\n // Test 20 minute timer activated when opening v2 checkpoint works.\n await clock.tickAsync(tenMinutes - 100);\n expect(defaultTxnSpy.callCount).equal(0);\n await clock.tickAsync(101);\n expect(defaultTxnSpy.callCount).equal(1);\n\n // Make sure timeout doesn't trigger more than once unless refreshContainer is called.\n await clock.tickAsync(tenMinutes + 100);\n expect(defaultTxnSpy.callCount).equal(1);\n await checkpoint.refreshContainerForRpc(\"\"); // activates timeout again by calling refresh on the timer.\n expect(defaultTxnSpy.callCount).equal(1);\n await clock.tickAsync(tenMinutes + 100);\n expect(defaultTxnSpy.callCount).equal(2);\n\n // Keep calling refreshContainer and make sure that restartDefaultTxn doesn't get called.\n await checkpoint.refreshContainerForRpc(\"\");\n await clock.tickAsync(tenMinutes - 100);\n await checkpoint.refreshContainerForRpc(\"\");\n await clock.tickAsync(tenMinutes - 100);\n expect(defaultTxnSpy.callCount).equal(2);\n\n // advance time past 20 minutes without refreshing container and make sure defaultTxn still restarts\n await clock.tickAsync(tenMinutes + 100);\n expect(defaultTxnSpy.callCount).equal(3);\n });\n\n it(\"should refresh checkpoint sasToken from RPC\", async () => {\n const clock = sinon.useFakeTimers();\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\n\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\n return { dbName: \"fakeDb\", container: cloudContainer } as any;\n });\n const queryStub = sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\n\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\n\n const userAccessToken = \"token\";\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken: userAccessToken, iTwinId, iModelId, changeset, reattachSafetySeconds: 60 });\n expect(checkpoint.cloudContainer?.accessToken).equal(mockCheckpointV2.sasToken);\n expect(openDgnDbStub.calledOnce).to.be.true;\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\n\n const errorLogStub = sinon.stub(Logger, \"logError\").callsFake(() => { });\n const infoLogStub = sinon.stub(Logger, \"logInfo\").callsFake(() => { });\n\n clock.setSystemTime(Date.parse(\"2021-01-01T00:58:10Z\")); // within safety period\n void expect(checkpoint.refreshContainerForRpc(\"\")).to.be.fulfilled;\n expect(queryStub.callCount).equal(0, \"should not need reattach yet\");\n\n clock.setSystemTime(Date.parse(\"2021-01-01T00:59:10Z\")); // after safety period\n\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T02:00:00Z\");\n const attachPromise = checkpoint.refreshContainerForRpc(\"\");\n const promise2 = checkpoint.refreshContainerForRpc(\"\"); // gets copy of first promise\n const promise3 = checkpoint.refreshContainerForRpc(\"\"); // \"\n expect(queryStub.callCount).equal(1); // shouldn't need to attach since first call already started the process\n expect(infoLogStub.callCount).equal(1);\n expect(infoLogStub.args[0][1]).include(\"attempting to refresh\");\n expect(errorLogStub.callCount).equal(0);\n\n void expect(attachPromise).to.not.be.fulfilled;\n void expect(promise2).to.not.be.fulfilled;\n void expect(promise3).to.not.be.fulfilled;\n await attachPromise;\n void expect(attachPromise).to.be.fulfilled;\n void expect(promise2).to.be.fulfilled;\n void expect(promise3).to.be.fulfilled;\n expect(infoLogStub.callCount).equal(2);\n expect(infoLogStub.args[1][1]).include(\"refreshed checkpoint sasToken\");\n\n clock.setSystemTime(Date.parse(\"2021-01-01T03:00:00Z\"));\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T03:00:10Z\"); // an expiry within safety interval should cause error log\n await checkpoint.refreshContainerForRpc(\"\");\n expect(errorLogStub.callCount).equal(1);\n expect(errorLogStub.args[0][1]).include(\"timestamp that expires before safety interval\");\n\n queryStub.resetHistory();\n errorLogStub.resetHistory();\n infoLogStub.resetHistory();\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T04:00:10Z\"); // expiry after safety interval\n clock.setSystemTime(Date.parse(\"2021-01-01T03:00:02Z\"));\n // next call to reattach daemon should work fine and correct problem\n await checkpoint.refreshContainerForRpc(\"\");\n expect(queryStub.callCount).equal(1);\n expect(infoLogStub.callCount).equal(2);\n expect(errorLogStub.callCount).equal(0);\n });\n\n it(\"should not refreshContainer if SnapshotDb is not a checkpoint\", async () => {\n const clock = sinon.useFakeTimers();\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\n sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n\n const snapshot = IModelTestUtils.openCheckpoint(\"fakeFilePath\", { iTwinId: \"fakeITwinId\", iModelId: \"fake1\", changeset });\n const nowStub = sinon.stub(Date, \"now\");\n await snapshot.refreshContainerForRpc(\"\");\n snapshot.close();\n expect(nowStub.called).to.be.false;\n nowStub.restore();\n });\n});\n"]}
1
+ {"version":3,"file":"SnapshotDb.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SnapshotDb.test.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\nimport { expect } from \"chai\";\nimport * as sinon from \"sinon\";\nimport { ChangesetIdWithIndex } from \"@itwin/core-common\";\nimport { CheckpointManager, V2CheckpointManager } from \"../../CheckpointManager\";\nimport { IModelDb, SnapshotDb, StandaloneDb } from \"../../IModelDb\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport { IModelHost } from \"../../IModelHost\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { _hubAccess } from \"../../internal/Symbols\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { SpatialCategory } from \"../../Category\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport * as path from \"path\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\n\ndescribe(\"SnapshotDb.refreshContainerForRpc\", () => {\n afterEach(() => sinon.restore());\n\n const changeset: ChangesetIdWithIndex = { id: \"fakeChangeSetId\", index: 10 };\n const iTwinId = \"fakeIModelId\";\n const iModelId = \"fakeIModelId\";\n const makeToken = (date: string) => {\n const dateUri = encodeURIComponent(date);\n return `?sv=2018-03-28&st=${dateUri}&se=${dateUri}&sr=c&sp=rl&sig=bad`;\n };\n\n const mockCheckpointV2 = {\n accountName: \"testAccount\",\n containerId: \"imodelblocks-123\",\n sasToken: makeToken(\"2021-01-01T01:00:00Z\"),\n dbName: \"testDb\",\n storageType: \"azure?sas=1\",\n };\n\n const cloudContainer = { accessToken: mockCheckpointV2.sasToken };\n const fakeSnapshotDb: any = {\n cloudContainer,\n isReadonly: () => true,\n isOpen: () => true,\n getIModelId: () => iModelId,\n getITwinId: () => iTwinId,\n getCurrentChangeset: () => changeset,\n setIModelDb: () => { },\n closeIModel: () => { },\n restartDefaultTxn: () => { },\n closeFile: () => { },\n getFilePath: () => \"fakeFilePath\",\n clearECDbCache: () => { },\n };\n it(\"perform checkpoint\", async () => {\n const sourceFileName = path.join(KnownTestLocations.outputDir, \"checkpoint1.bim\");\n if (IModelJsFs.existsSync(sourceFileName))\n IModelJsFs.removeSync(sourceFileName);\n\n const iModel = StandaloneDb.createEmpty(sourceFileName, {\n rootSubject: { name: sourceFileName },\n });\n\n iModel.clearCaches();\n iModel.performCheckpoint();\n\n SpatialCategory.insert(\n iModel,\n IModelDb.dictionaryId,\n \"spatial category\",\n {}\n );\n\n // Use to throw error SQLITE_LOCKED\n iModel.performCheckpoint();\n iModel.close();\n });\n it(\"should restart default txn after inactivity\", async () => {\n const clock = sinon.useFakeTimers();\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\n const defaultTxnSpy = sinon.spy(SnapshotDb.prototype, \"restartDefaultTxn\");\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\n return { dbName: \"fakeDb\", container: cloudContainer } as any;\n });\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\n\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\n\n const userAccessToken = \"token\";\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken: userAccessToken, iTwinId, iModelId, changeset, reattachSafetySeconds: 60 });\n expect(openDgnDbStub.calledOnce).to.be.true;\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\n\n const tenMinutes = 10 * 60 * 1000;\n\n // Test 20 minute timer activated when opening v2 checkpoint works.\n await clock.tickAsync(tenMinutes - 100);\n expect(defaultTxnSpy.callCount).equal(0);\n await clock.tickAsync(101);\n expect(defaultTxnSpy.callCount).equal(1);\n\n // Make sure timeout doesn't trigger more than once unless refreshContainer is called.\n await clock.tickAsync(tenMinutes + 100);\n expect(defaultTxnSpy.callCount).equal(1);\n await checkpoint.refreshContainerForRpc(\"\"); // activates timeout again by calling refresh on the timer.\n expect(defaultTxnSpy.callCount).equal(1);\n await clock.tickAsync(tenMinutes + 100);\n expect(defaultTxnSpy.callCount).equal(2);\n\n // Keep calling refreshContainer and make sure that restartDefaultTxn doesn't get called.\n await checkpoint.refreshContainerForRpc(\"\");\n await clock.tickAsync(tenMinutes - 100);\n await checkpoint.refreshContainerForRpc(\"\");\n await clock.tickAsync(tenMinutes - 100);\n expect(defaultTxnSpy.callCount).equal(2);\n\n // advance time past 20 minutes without refreshing container and make sure defaultTxn still restarts\n await clock.tickAsync(tenMinutes + 100);\n expect(defaultTxnSpy.callCount).equal(3);\n });\n\n it(\"should refresh checkpoint sasToken from RPC\", async () => {\n const clock = sinon.useFakeTimers();\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\n\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\n return { dbName: \"fakeDb\", container: cloudContainer } as any;\n });\n const queryStub = sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\n\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\n\n const userAccessToken = \"token\";\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken: userAccessToken, iTwinId, iModelId, changeset, reattachSafetySeconds: 60 });\n expect(checkpoint.cloudContainer?.accessToken).equal(mockCheckpointV2.sasToken);\n expect(openDgnDbStub.calledOnce).to.be.true;\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\n\n const errorLogStub = sinon.stub(Logger, \"logError\").callsFake(() => { });\n const infoLogStub = sinon.stub(Logger, \"logInfo\").callsFake(() => { });\n\n clock.setSystemTime(Date.parse(\"2021-01-01T00:58:10Z\")); // within safety period\n void expect(checkpoint.refreshContainerForRpc(\"\")).to.be.fulfilled;\n expect(queryStub.callCount).equal(0, \"should not need reattach yet\");\n\n clock.setSystemTime(Date.parse(\"2021-01-01T00:59:10Z\")); // after safety period\n\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T02:00:00Z\");\n const attachPromise = checkpoint.refreshContainerForRpc(\"\");\n const promise2 = checkpoint.refreshContainerForRpc(\"\"); // gets copy of first promise\n const promise3 = checkpoint.refreshContainerForRpc(\"\"); // \"\n expect(queryStub.callCount).equal(1); // shouldn't need to attach since first call already started the process\n expect(infoLogStub.callCount).equal(1);\n expect(infoLogStub.args[0][1]).include(\"attempting to refresh\");\n expect(errorLogStub.callCount).equal(0);\n\n void expect(attachPromise).to.not.be.fulfilled;\n void expect(promise2).to.not.be.fulfilled;\n void expect(promise3).to.not.be.fulfilled;\n await attachPromise;\n void expect(attachPromise).to.be.fulfilled;\n void expect(promise2).to.be.fulfilled;\n void expect(promise3).to.be.fulfilled;\n expect(infoLogStub.callCount).equal(2);\n expect(infoLogStub.args[1][1]).include(\"refreshed checkpoint sasToken\");\n\n clock.setSystemTime(Date.parse(\"2021-01-01T03:00:00Z\"));\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T03:00:10Z\"); // an expiry within safety interval should cause error log\n await checkpoint.refreshContainerForRpc(\"\");\n expect(errorLogStub.callCount).equal(1);\n expect(errorLogStub.args[0][1]).include(\"timestamp that expires before safety interval\");\n\n queryStub.resetHistory();\n errorLogStub.resetHistory();\n infoLogStub.resetHistory();\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T04:00:10Z\"); // expiry after safety interval\n clock.setSystemTime(Date.parse(\"2021-01-01T03:00:02Z\"));\n // next call to reattach daemon should work fine and correct problem\n await checkpoint.refreshContainerForRpc(\"\");\n expect(queryStub.callCount).equal(1);\n expect(infoLogStub.callCount).equal(2);\n expect(errorLogStub.callCount).equal(0);\n });\n\n it(\"should not refreshContainer if SnapshotDb is not a checkpoint\", async () => {\n const clock = sinon.useFakeTimers();\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\n sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n\n const snapshot = IModelTestUtils.openCheckpoint(\"fakeFilePath\", { iTwinId: \"fakeITwinId\", iModelId: \"fake1\", changeset });\n const nowStub = sinon.stub(Date, \"now\");\n await snapshot.refreshContainerForRpc(\"\");\n snapshot.close();\n expect(nowStub.called).to.be.false;\n nowStub.restore();\n });\n});\n"]}
@@ -157,7 +157,6 @@ export interface WorkspaceDbSettingsProps extends WorkspaceDbCloudProps {
157
157
  export type WorkspaceResourceName = string;
158
158
  /** A SQLite database in a [[Workspace]] containing named resources that the application is configured to use.
159
159
  * Resources are referred to by their [[WorkspaceResourceName]]s and can represent any number of things, including:
160
- * - Fonts and [TextStyle]($common)s used when placing [TextAnnotation]($common)s.
161
160
  * - [GeographicCRS]($common)es used to define the coordinate reference system of an iTwin.
162
161
  * - [[SettingsDictionary]]'s that contribute to the [[Workspace.settings]].
163
162
  * - Files that can be extracted temporarily to the local file system to be accessed by programs directly from disk.
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/workspace/Workspace.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAU,QAAQ,EAAoB,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,QAAQ,CAAC,WAAW,CAAC,oBAAoB,EAAE,aAAa,CAAC;IACxG;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,SAAS,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,cAAc,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,yBAAyB;IACjE;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,sJAAsJ;IACtJ,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,iCAAiC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,qCAAqC;IACrC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1E,kFAAkF;IAClF,QAAQ,EAAE,iCAAiC,CAAC;CAC7C;AAED;;;;;IAKI;AACJ,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wHAAwH;IACxH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,8HAA8H;IAC9H,SAAS,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC9D,qEAAqE;IACrE,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD;;OAEG;IACH,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACvC;AAED;;;IAGI;AACJ,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,2FAA2F;IAC3F,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACtC,4JAA4J;IAC5J,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAErC;;;OAGG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb,wHAAwH;IACxH,KAAK,IAAI,IAAI,CAAC;IAEd,wDAAwD;IACxD,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAAC;IAE9D,wDAAwD;IACxD,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,UAAU,GAAG,SAAS,CAAC;IAEhE;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE/D;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,OAAO,EAAE,qBAAqB,EAAE,cAAc,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;IAEnG;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;IAEtE;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,6BAA6B,GAAG,IAAI,CAAC;IAE1D,gBAAgB;IAChB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG;QAAE,aAAa,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,cAAc,CAAC,cAAc,CAAA;KAAE,GAAG,SAAS,CAAC;CACtI;AAED;;IAEI;AACJ,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,kIAAkI;IAClI,aAAa,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACxE,8CAA8C;IAC9C,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,gBAAgB;IAChB,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAEpC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B,mEAAmE;IACnE,aAAa,IAAI,WAAW,CAAC,UAAU,CAAC;IAExC;;;;OAIG;IACH,aAAa,CAAC,WAAW,EAAE,oBAAoB,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAEjF;;;;;;MAME;IACF,iBAAiB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/E;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,yBAAyB,GAAG,kBAAkB,CAAC;IAEnE;;;;OAIG;IACH,sBAAsB;IACpB,8IAA8I;IAC9I,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,EAAE;IAC5D,+HAA+H;IAC/H,QAAQ,CAAC,EAAE,oBAAoB,EAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,qCAAqC;IACrC,cAAc,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEnE;;;;;;;;OAQG;IACH,yBAAyB;IACvB,+BAA+B;IAC/B,WAAW,EAAE,WAAW;IACxB,0KAA0K;IAC1K,MAAM,CAAC,EAAE,SAAS,CAAC,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAE5D;;;;;;OAMG;IACH,eAAe,CACb,IAAI,EAAE,SAAS,CAAC,mBAAmB,GAAG;QACpC,+HAA+H;QAC/H,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;QAClC,qHAAqH;QACrH,MAAM,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC;KACjC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACrC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,yGAAyG;IACzG,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC;IACrD,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAE5C,gBAAgB;IAChB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAEzC;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,CAAC;IAEhE,8FAA8F;IAC9F,cAAc,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,WAAW,CAAC;IAEtD;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;CAChD;AAMD;;GAEG;AACH,yBAAiB,qBAAqB,CAAC;IACrC;;;;OAIG;IACI,MAAM,kBAAkB,QAAwC,CAAC;CACzE;AAED;;;GAGG;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,WAAW,CAAA;CAAE,CAAC,KAAK,IAAI,CAAC;AAE/G;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,GAAG,EAAE,WAAW,EAAE,CAAC;IACnB,qCAAqC;IACrC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1E,iFAAiF;IACjF,QAAQ,EAAE,+BAA+B,CAAC;CAC3C;AAaD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,GAAG,EAAE,WAAW,EAAE,CAAC;IACnB,wCAAwC;IACxC,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,YAAY;AACZ,yBAAiB,SAAS,CAAC;IACzB;;;OAGG;IACI,IAAI,qBAAqB,MAAO,qBAAqB,SAK3D,CAAC;IAEF,+IAA+I;IAC/I,UAAiB,wBAAwB;QACvC,qCAAqC;QACrC,IAAI,EAAE,kBAAkB,CAAC;QACzB,4DAA4D;QAC5D,IAAI,EAAE,WAAW,CAAC;KACnB;IAED;;;OAGG;IACI,IAAI,4BAA4B,WAAY,wBAAwB,SAE1E,CAAC;IAEF;;OAEG;IACH,KAAY,mBAAmB,GAAG;QAAE,QAAQ,CAAC,GAAG,EAAE,qBAAqB,EAAE,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;IAExK;;OAEG;IACH,KAAY,YAAY,GAAG;IACzB,uDAAuD;IACvD,MAAM,EAAE,qBAAqB;IAC7B;;OAEG;IACH,IAAI,EAAE,kBAAkB,KACrB,OAAO,CAAC;IAEb;;;;;OAKG;IACH,SAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,GAAG,SAAS,CAEpF;IAED;;;;;OAKG;IACH,SAAgB,eAAe,CAAC,IAAI,EAAE,wBAAwB,GAAG,UAAU,GAAG,SAAS,CAEtF;IAED;;;OAGG;IACH,SAAgB,cAAc,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,CAgBtE;CACF"}
1
+ {"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/workspace/Workspace.ts"],"names":[],"mappings":"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"}