@itwin/core-backend 5.9.0-dev.8 → 5.10.0-dev.1

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 (244) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +38 -0
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js +6 -3
  7. package/lib/cjs/BriefcaseManager.js.map +1 -1
  8. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  9. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  10. package/lib/cjs/ChangesetECAdaptor.js +7 -1
  11. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  12. package/lib/cjs/ChangesetReader.d.ts +186 -0
  13. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  14. package/lib/cjs/ChangesetReader.js +372 -0
  15. package/lib/cjs/ChangesetReader.js.map +1 -0
  16. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  17. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  18. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  19. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  20. package/lib/cjs/CloudSqlite.d.ts +1 -1
  21. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  22. package/lib/cjs/CloudSqlite.js +68 -13
  23. package/lib/cjs/CloudSqlite.js.map +1 -1
  24. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  25. package/lib/cjs/DevTools.js.map +1 -1
  26. package/lib/cjs/DisplayStyle.js.map +1 -1
  27. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  28. package/lib/cjs/ECSqlStatement.js.map +1 -1
  29. package/lib/cjs/EditTxn.d.ts +55 -1
  30. package/lib/cjs/EditTxn.d.ts.map +1 -1
  31. package/lib/cjs/EditTxn.js +43 -1
  32. package/lib/cjs/EditTxn.js.map +1 -1
  33. package/lib/cjs/Element.d.ts +69 -0
  34. package/lib/cjs/Element.d.ts.map +1 -1
  35. package/lib/cjs/Element.js +36 -0
  36. package/lib/cjs/Element.js.map +1 -1
  37. package/lib/cjs/ElementGraphics.js.map +1 -1
  38. package/lib/cjs/ExternalSource.js.map +1 -1
  39. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  40. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  41. package/lib/cjs/GeographicCRSServices.js +13 -4
  42. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  43. package/lib/cjs/IModelDb.d.ts +9 -1
  44. package/lib/cjs/IModelDb.d.ts.map +1 -1
  45. package/lib/cjs/IModelDb.js +25 -6
  46. package/lib/cjs/IModelDb.js.map +1 -1
  47. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  48. package/lib/cjs/IpcHost.d.ts.map +1 -1
  49. package/lib/cjs/IpcHost.js +33 -13
  50. package/lib/cjs/IpcHost.js.map +1 -1
  51. package/lib/cjs/LockControl.d.ts +85 -1
  52. package/lib/cjs/LockControl.d.ts.map +1 -1
  53. package/lib/cjs/LockControl.js.map +1 -1
  54. package/lib/cjs/Model.d.ts +34 -0
  55. package/lib/cjs/Model.d.ts.map +1 -1
  56. package/lib/cjs/Model.js +24 -0
  57. package/lib/cjs/Model.js.map +1 -1
  58. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  59. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  60. package/lib/cjs/PartialChangeUnifier.js +234 -0
  61. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  62. package/lib/cjs/SheetIndex.js.map +1 -1
  63. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  64. package/lib/cjs/SqliteChangesetReader.js +1 -1
  65. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  66. package/lib/cjs/TxnManager.d.ts +114 -4
  67. package/lib/cjs/TxnManager.d.ts.map +1 -1
  68. package/lib/cjs/TxnManager.js +196 -8
  69. package/lib/cjs/TxnManager.js.map +1 -1
  70. package/lib/cjs/ViewDefinition.d.ts +19 -7
  71. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  72. package/lib/cjs/ViewDefinition.js +77 -25
  73. package/lib/cjs/ViewDefinition.js.map +1 -1
  74. package/lib/cjs/ViewStore.d.ts.map +1 -1
  75. package/lib/cjs/ViewStore.js +63 -21
  76. package/lib/cjs/ViewStore.js.map +1 -1
  77. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  78. package/lib/cjs/core-backend.d.ts +3 -0
  79. package/lib/cjs/core-backend.d.ts.map +1 -1
  80. package/lib/cjs/core-backend.js +3 -0
  81. package/lib/cjs/core-backend.js.map +1 -1
  82. package/lib/cjs/internal/HubMock.d.ts +2 -0
  83. package/lib/cjs/internal/HubMock.d.ts.map +1 -1
  84. package/lib/cjs/internal/HubMock.js +7 -0
  85. package/lib/cjs/internal/HubMock.js.map +1 -1
  86. package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
  87. package/lib/cjs/internal/IntegrityCheck.js +22 -22
  88. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  89. package/lib/cjs/internal/NoLocks.d.ts.map +1 -1
  90. package/lib/cjs/internal/NoLocks.js +6 -0
  91. package/lib/cjs/internal/NoLocks.js.map +1 -1
  92. package/lib/cjs/internal/ServerBasedLocks.d.ts +12 -0
  93. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  94. package/lib/cjs/internal/ServerBasedLocks.js +285 -4
  95. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  96. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  97. package/lib/cjs/workspace/Settings.d.ts +6 -4
  98. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  99. package/lib/cjs/workspace/Settings.js.map +1 -1
  100. package/lib/esm/BackendHubAccess.d.ts +38 -0
  101. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  102. package/lib/esm/BackendHubAccess.js.map +1 -1
  103. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  104. package/lib/esm/BriefcaseManager.js +6 -3
  105. package/lib/esm/BriefcaseManager.js.map +1 -1
  106. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  107. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  108. package/lib/esm/ChangesetECAdaptor.js +7 -1
  109. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  110. package/lib/esm/ChangesetReader.d.ts +186 -0
  111. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  112. package/lib/esm/ChangesetReader.js +368 -0
  113. package/lib/esm/ChangesetReader.js.map +1 -0
  114. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  115. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  116. package/lib/esm/ChangesetReaderTypes.js +20 -0
  117. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  118. package/lib/esm/CloudSqlite.d.ts +1 -1
  119. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  120. package/lib/esm/CloudSqlite.js +69 -14
  121. package/lib/esm/CloudSqlite.js.map +1 -1
  122. package/lib/esm/ConcurrentQuery.js.map +1 -1
  123. package/lib/esm/DevTools.js.map +1 -1
  124. package/lib/esm/DisplayStyle.js.map +1 -1
  125. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  126. package/lib/esm/ECSqlStatement.js.map +1 -1
  127. package/lib/esm/EditTxn.d.ts +55 -1
  128. package/lib/esm/EditTxn.d.ts.map +1 -1
  129. package/lib/esm/EditTxn.js +43 -1
  130. package/lib/esm/EditTxn.js.map +1 -1
  131. package/lib/esm/Element.d.ts +69 -0
  132. package/lib/esm/Element.d.ts.map +1 -1
  133. package/lib/esm/Element.js +36 -0
  134. package/lib/esm/Element.js.map +1 -1
  135. package/lib/esm/ElementGraphics.js.map +1 -1
  136. package/lib/esm/ExternalSource.js.map +1 -1
  137. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  138. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  139. package/lib/esm/GeographicCRSServices.js +12 -4
  140. package/lib/esm/GeographicCRSServices.js.map +1 -1
  141. package/lib/esm/IModelDb.d.ts +9 -1
  142. package/lib/esm/IModelDb.d.ts.map +1 -1
  143. package/lib/esm/IModelDb.js +26 -7
  144. package/lib/esm/IModelDb.js.map +1 -1
  145. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  146. package/lib/esm/IpcHost.d.ts.map +1 -1
  147. package/lib/esm/IpcHost.js +33 -13
  148. package/lib/esm/IpcHost.js.map +1 -1
  149. package/lib/esm/LockControl.d.ts +85 -1
  150. package/lib/esm/LockControl.d.ts.map +1 -1
  151. package/lib/esm/LockControl.js.map +1 -1
  152. package/lib/esm/Model.d.ts +34 -0
  153. package/lib/esm/Model.d.ts.map +1 -1
  154. package/lib/esm/Model.js +24 -0
  155. package/lib/esm/Model.js.map +1 -1
  156. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  157. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  158. package/lib/esm/PartialChangeUnifier.js +230 -0
  159. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  160. package/lib/esm/SheetIndex.js.map +1 -1
  161. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  162. package/lib/esm/SqliteChangesetReader.js +1 -1
  163. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  164. package/lib/esm/TxnManager.d.ts +114 -4
  165. package/lib/esm/TxnManager.d.ts.map +1 -1
  166. package/lib/esm/TxnManager.js +196 -8
  167. package/lib/esm/TxnManager.js.map +1 -1
  168. package/lib/esm/ViewDefinition.d.ts +19 -7
  169. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  170. package/lib/esm/ViewDefinition.js +78 -26
  171. package/lib/esm/ViewDefinition.js.map +1 -1
  172. package/lib/esm/ViewStore.d.ts.map +1 -1
  173. package/lib/esm/ViewStore.js +64 -22
  174. package/lib/esm/ViewStore.js.map +1 -1
  175. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  176. package/lib/esm/core-backend.d.ts +3 -0
  177. package/lib/esm/core-backend.d.ts.map +1 -1
  178. package/lib/esm/core-backend.js +3 -0
  179. package/lib/esm/core-backend.js.map +1 -1
  180. package/lib/esm/internal/HubMock.d.ts +2 -0
  181. package/lib/esm/internal/HubMock.d.ts.map +1 -1
  182. package/lib/esm/internal/HubMock.js +7 -0
  183. package/lib/esm/internal/HubMock.js.map +1 -1
  184. package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
  185. package/lib/esm/internal/IntegrityCheck.js +22 -22
  186. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  187. package/lib/esm/internal/NoLocks.d.ts.map +1 -1
  188. package/lib/esm/internal/NoLocks.js +6 -0
  189. package/lib/esm/internal/NoLocks.js.map +1 -1
  190. package/lib/esm/internal/ServerBasedLocks.d.ts +12 -0
  191. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
  192. package/lib/esm/internal/ServerBasedLocks.js +286 -5
  193. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  194. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  195. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  196. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  197. package/lib/esm/test/IModelTestUtils.d.ts +1 -0
  198. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  199. package/lib/esm/test/IModelTestUtils.js +5 -0
  200. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  201. package/lib/esm/test/IpcHost.test.js +112 -0
  202. package/lib/esm/test/IpcHost.test.js.map +1 -1
  203. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  204. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  205. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  206. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  207. package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
  208. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  209. package/lib/esm/test/element/ElementRoundTrip.test.js +144 -3
  210. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  211. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  212. package/lib/esm/test/hubaccess/Rebase.test.js +1 -1
  213. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  214. package/lib/esm/test/imodel/IModel.test.js +1 -1
  215. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  216. package/lib/esm/test/imodel/SchemaXmlImport.test.js +64 -0
  217. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  218. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  219. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  220. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  221. package/lib/esm/test/standalone/ChangesetReader.test.js +4184 -1654
  222. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  223. package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
  224. package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
  225. package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
  226. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
  227. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  228. package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
  229. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  230. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  231. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  232. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  233. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  234. package/lib/esm/test/standalone/ServerBasedLocks.test.js +907 -3
  235. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  236. package/lib/esm/test/standalone/TxnManager.test.js +90 -0
  237. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  238. package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
  239. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  240. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  241. package/lib/esm/workspace/Settings.d.ts +6 -4
  242. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  243. package/lib/esm/workspace/Settings.js.map +1 -1
  244. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"ViewDefinition.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ViewDefinition.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport { join } from \"path\";\r\nimport { CompressedId64Set, Guid, GuidString, Id64, Id64String, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n Camera, Code, CodeProps, ColorByName, ColorDef, DisplayStyle3dProps, ElementProps, IModel, IModelError, PlanProjectionSettings, RelatedElement, SpatialViewDefinitionProps,\r\n SubCategoryAppearance,\r\n} from \"@itwin/core-common\";\r\nimport { Matrix3d, Range2d, Range3d, StandardViewIndex, Transform, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport {\r\n CategorySelector, DefinitionModel, DictionaryModel, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, EditTxn, IModelDb, ModelSelector, PhysicalModel, PhysicalPartition, SpatialCategory, SpatialViewDefinition, StandaloneDb, SubCategory, Subject, SubjectOwnsPartitionElements, ViewStore,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\n\r\nclass ViewDefinitionEditTxn extends EditTxn {\r\n public constructor(iModel: IModelDb) {\r\n super(iModel, \"view-definition\");\r\n }\r\n\r\n public override start(): void {\r\n super.start();\r\n }\r\n\r\n public override end(mode: \"save\" | \"abandon\" = \"save\", args?: string): void {\r\n super.end(mode, args);\r\n }\r\n\r\n public override saveChanges(args?: string): void {\r\n super.saveChanges(args);\r\n }\r\n\r\n public override insertElement(elProps: ElementProps): Id64String {\r\n return super.insertElement(elProps);\r\n }\r\n\r\n public override updateElement(elProps: Partial<ElementProps>): void {\r\n super.updateElement(elProps);\r\n }\r\n\r\n public insertPhysicalModel(_code: CodeProps, modeledElementId: Id64String, privateModel = false): Id64String {\r\n const model = this.iModel.models.createModel({\r\n modeledElement: new RelatedElement({ id: modeledElementId }),\r\n classFullName: PhysicalModel.classFullName,\r\n isPrivate: privateModel,\r\n });\r\n\r\n return super.insertModel(model.toJSON());\r\n }\r\n\r\n public insertPhysicalPartitionAndModel(newModelCode: CodeProps, privateModel = false, parentId?: Id64String): Id64String[] {\r\n const model = parentId ? this.iModel.elements.getElement(parentId).model : IModel.repositoryModelId;\r\n const parent = new SubjectOwnsPartitionElements(parentId ?? IModel.rootSubjectId);\r\n const partition = this.iModel.elements.createElement({\r\n classFullName: PhysicalPartition.classFullName,\r\n parent,\r\n model,\r\n code: newModelCode,\r\n });\r\n const partitionId = this.insertElement(partition.toJSON());\r\n const modelId = this.insertPhysicalModel(newModelCode, partitionId, privateModel);\r\n return [partitionId, modelId];\r\n }\r\n\r\n public insertSpatialCategory(definitionModelId: Id64String, name: string, appearance?: SubCategoryAppearance): Id64String {\r\n const category = SpatialCategory.create(this.iModel, definitionModelId, name);\r\n category.id = this.insertElement(category.toJSON());\r\n if (appearance) {\r\n const subCategory = this.iModel.elements.getElement<SubCategory>(IModelDb.getDefaultSubCategoryId(category.id));\r\n subCategory.appearance = appearance;\r\n this.updateElement(subCategory.toJSON());\r\n }\r\n\r\n return category.id;\r\n }\r\n}\r\n\r\nfunction createNewModelAndCategory(rwIModel: IModelDb, editTxn: ViewDefinitionEditTxn) {\r\n const modelId = editTxn.insertPhysicalPartitionAndModel(IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"))[1];\r\n const modelId2 = editTxn.insertPhysicalPartitionAndModel(IModelTestUtils.getUniqueModelCode(rwIModel, \"PhysicalModel2\"), true)[1];\r\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"TestSpatialCategory\");\r\n const spatialCategoryId = editTxn.insertSpatialCategory(IModel.dictionaryId, newCategoryCode.value, new SubCategoryAppearance({ color: 0xff0000 }));\r\n\r\n newCategoryCode.value = \"spatial category 2\";\r\n editTxn.insertSpatialCategory(IModel.dictionaryId, newCategoryCode.value);\r\n\r\n editTxn.insertElement(IModelTestUtils.createPhysicalObject(rwIModel, modelId2, spatialCategoryId).toJSON());\r\n\r\n return { modelId, modelId2, spatialCategoryId };\r\n}\r\n\r\n// cspell:disable\r\n\r\nlet vs1: ViewStore.ViewDb;\r\n\r\ndescribe(\"ViewDefinition\", () => {\r\n // to simulate elements with guids without having to add elements to the iModel\r\n class FakeGuids {\r\n private _ids = new Map<Id64String, GuidString>();\r\n private _guids = new Map<GuidString, Id64String>();\r\n private add(id: Id64String, guid: GuidString) {\r\n this._ids.set(id, guid);\r\n this._guids.set(guid, id);\r\n return guid;\r\n }\r\n public getFederationGuidFromId(id: Id64String): GuidString | undefined {\r\n return this._ids.get(id) ?? this.add(id, Guid.createValue());\r\n }\r\n public getIdFromFederationGuid(guid?: GuidString): Id64String | undefined {\r\n return guid ? this._guids.get(guid) : undefined;\r\n }\r\n }\r\n\r\n let iModel: StandaloneDb;\r\n before(() => {\r\n iModel = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ViewDefinition\", \"ViewDefinition.bim\"), {\r\n rootSubject: { name: \"ViewDefinition tests\", description: \"ViewDefinition tests\" },\r\n client: \"ViewDefinition\",\r\n globalOrigin: { x: 0, y: 0 },\r\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\r\n guid: Guid.createValue(),\r\n });\r\n\r\n const dbName = join(KnownTestLocations.outputDir, \"viewDefTest.db\");\r\n ViewStore.ViewDb.createNewDb(dbName);\r\n vs1 = new ViewStore.ViewDb({ iModel, guidMap: new FakeGuids() });\r\n vs1.openDb(dbName, OpenMode.ReadWrite);\r\n });\r\n\r\n after(() => {\r\n iModel.close();\r\n vs1.closeDb(true);\r\n });\r\n\r\n it(\"SpatialViewDefinition\", async () => {\r\n const editTxn = new ViewDefinitionEditTxn(iModel);\r\n editTxn.start();\r\n try {\r\n const { modelId, modelId2, spatialCategoryId } = createNewModelAndCategory(iModel, editTxn);\r\n const displayStyleId = editTxn.insertElement(DisplayStyle3d.create(iModel, IModel.dictionaryId, \"default\", { backgroundColor: ColorDef.fromString(\"rgb(255,0,0)\") }).toJSON());\r\n const modelSelectorId = editTxn.insertElement(ModelSelector.create(iModel, IModel.dictionaryId, \"default\", [modelId, modelId2]).toJSON());\r\n const categorySelectorId = editTxn.insertElement(CategorySelector.create(iModel, IModel.dictionaryId, \"default\", [spatialCategoryId]).toJSON());\r\n editTxn.saveChanges(\"Basic setup\");\r\n\r\n const standardView = StandardViewIndex.Iso;\r\n const rotation = Matrix3d.createStandardWorldToView(standardView);\r\n const angles = YawPitchRollAngles.createFromMatrix3d(rotation);\r\n const rotationTransform = Transform.createOriginAndMatrix(undefined, rotation);\r\n const range = new Range3d(1, 1, 1, 8, 8, 8);\r\n const rotatedRange = rotationTransform.multiplyRange(range);\r\n const basicProps = {\r\n code: Code.createEmpty(),\r\n model: IModel.dictionaryId,\r\n classFullName: \"BisCore:SpatialViewDefinition\",\r\n cameraOn: false,\r\n origin: rotation.multiplyTransposeXYZ(rotatedRange.low.x, rotatedRange.low.y, rotatedRange.low.z),\r\n extents: rotatedRange.diagonal(),\r\n angles,\r\n camera: new Camera(),\r\n };\r\n\r\n const ms1 = iModel.elements.getElement<ModelSelector>(modelSelectorId);\r\n const ms1Row = await vs1.addModelSelector({ name: ms1.code.value, selector: { ids: ms1.models } });\r\n expect(ms1Row).equal(\"@1\");\r\n let ms1out = vs1.getModelSelectorSync({ id: ms1Row });\r\n expect(ms1out.classFullName).equal(\"BisCore:ModelSelector\");\r\n expect(ms1out.models.length).equal(2);\r\n expect(ms1out.models[0]).equal(modelId);\r\n expect(ms1out.models[1]).equal(modelId2);\r\n ms1out.models.push(\"0x123\");\r\n await vs1.updateModelSelector({ id: ms1Row, selector: { ids: ms1out.models } });\r\n ms1out = vs1.getModelSelectorSync({ id: ms1Row });\r\n expect(ms1out.models.length).equal(3);\r\n expect(ms1out.models[2]).equal(\"0x123\");\r\n\r\n const cs1 = iModel.elements.getElement<CategorySelector>(categorySelectorId);\r\n const cs1Row = await vs1.addCategorySelector({ selector: { ids: cs1.categories } });\r\n expect(cs1Row).equal(\"@1\");\r\n let cs1out = vs1.getCategorySelectorSync({ id: cs1Row });\r\n expect(cs1out.classFullName).equal(\"BisCore:CategorySelector\");\r\n expect(cs1out.categories.length).equal(1);\r\n expect(cs1out.categories[0]).equal(spatialCategoryId);\r\n cs1out.categories.push(\"0x1234\");\r\n await vs1.updateCategorySelector({ id: cs1Row, selector: { ids: cs1out.categories } });\r\n cs1out = vs1.getCategorySelectorSync({ id: cs1Row });\r\n expect(cs1out.categories.length).equal(2);\r\n expect(cs1out.categories[1]).equal(\"0x1234\");\r\n\r\n const longElementList = CompressedId64Set.sortAndCompress([\"0x2a\", \"0x2b\", \"0x2d\", \"0x2e\", \"0x43\", \"0x1a\", \"0x1d\", \"0x12\", \"0x22\",\r\n \"0x8\", \"0x21\", \"0x1b\", \"0x1c\", \"0x1e\", \"0x1f\", \"0x2c\", \"0x2f\", \"0x3a\", \"0x3b\", \"0x3d\", \"0x3e\", \"0x43\",\r\n \"0x4a\", \"0x4b\", \"0x4d\", \"0x4e\", \"0x5a\", \"0x5b\", \"0x5d\", \"0x5e\", \"0x6a\", \"0x6b\", \"0x6d\", \"0x6e\", \"0x7a\",\r\n \"0x7b\", \"0x7d\", \"0x7e\", \"0x8a\", \"0x8b\", \"0x8d\", \"0x8e\", \"0x9a\", \"0x9b\", \"0x9d\", \"0x9e\", \"0xaa\", \"0xab\", \"0xad\",\r\n \"0xae\", \"0xba\", \"0xbb\", \"0xbd\", \"0xbe\", \"0xf5ca\", \"0xcb\", \"0xcd\", \"0xce\", \"0xda\", \"0xdb\", \"0xdd\", \"0xde\", \"0xea\",\r\n \"0xeb\", \"0xed\", \"0xee\", \"0xfa\", \"0xfb\", \"0xfd\", \"0xfe\", \"0x10a\", \"0x10b\", \"0x10d\", \"0x10e\", \"0x11a\", \"0x11b\", \"0x11d\",\r\n \"0x11e\", \"0x12a\", \"0x12b\", \"0x12d\", \"0x12e\", \"0x13a\", \"0x13b\", \"0x13d\", \"0x13e\", \"0x14a\", \"0x14b\", \"0x14d\", \"0x14e\",\r\n \"0x15a\", \"0x15b\", \"0x15d\", \"0x15e\", \"0x16a\", \"0x16b\", \"0x16d\"]);\r\n\r\n await expect(vs1.addCategorySelector({ selector: { query: { from: \"BisCore:SubCategory\" } } })).to.be.rejectedWith(\"must select from BisCore:Category\");\r\n const cs2 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\" } } }));\r\n expect(cs2).equal(\"@2\");\r\n const cs3 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\", adds: longElementList } } }));\r\n const cs4 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\", removes: [\"0x233\", \"0x21\"], adds: longElementList } } }));\r\n const onlyUsedProps = {\r\n name: \"only used spatial categories\",\r\n selector: {\r\n query: {\r\n from: \"BisCore.Category\",\r\n where: \"ECInstanceId IN (SELECT DISTINCT Category.Id FROM BisCore.GeometricElement3d)\",\r\n },\r\n },\r\n };\r\n await vs1.addCategorySelector(onlyUsedProps);\r\n let selected = vs1.getCategorySelectorSync({ id: cs2 });\r\n expect(selected.categories.length).equal(2);\r\n selected = vs1.getCategorySelectorSync({ id: cs3 });\r\n expect(selected.categories.length).equal(98);\r\n selected = vs1.getCategorySelectorSync({ id: cs4 });\r\n expect(selected.categories.length).equal(97);\r\n selected = vs1.getCategorySelectorSync({ name: onlyUsedProps.name });\r\n expect(selected.categories.length).equal(1);\r\n expect(selected.categories[0]).equal(spatialCategoryId);\r\n\r\n const ms3 = (await vs1.addModelSelector({ name: \"model selector 2\", selector: { query: { from: \"Bis.GeometricModel3d\" } } }));\r\n let selectedModels = vs1.getModelSelectorSync({ id: ms3 });\r\n expect(selectedModels.models.length).equal(2);\r\n const ms4Props = {\r\n name: \"spatial, non-private models\",\r\n selector: {\r\n query: {\r\n from: \"BisCore.GeometricModel3d\",\r\n where: \"IsPrivate=false AND IsTemplate=false AND (IsNotSpatiallyLocated IS NULL OR IsNotSpatiallyLocated=false)\",\r\n },\r\n },\r\n };\r\n\r\n await vs1.addModelSelector(ms4Props);\r\n selectedModels = vs1.getModelSelectorSync({ name: ms4Props.name });\r\n expect(selectedModels.models.length).equal(1);\r\n expect(selectedModels.models[0]).equal(modelId);\r\n\r\n const ds1 = iModel.elements.getElement<DisplayStyle3d>(displayStyleId);\r\n ds1.settings.setPlanProjectionSettings(\"0x1\", PlanProjectionSettings.fromJSON({ elevation: 1 }));\r\n ds1.settings.setPlanProjectionSettings(\"0x2\", PlanProjectionSettings.fromJSON({ elevation: 2 }));\r\n\r\n const styles = (ds1.toJSON() as DisplayStyle3dProps).jsonProperties!.styles!;\r\n styles.subCategoryOvr =\r\n [{\r\n subCategory: spatialCategoryId,\r\n color: ColorByName.fuchsia,\r\n invisible: true,\r\n style: \"0xaaa\",\r\n weight: 10,\r\n transp: 0.5,\r\n },\r\n ];\r\n\r\n styles.excludedElements = CompressedId64Set.sortAndCompress([\"0x8\", \"0x12\", \"0x22\"]);\r\n styles.scheduleScript = [{\r\n modelId: \"0x21\",\r\n realityModelUrl: \"altavista.com\",\r\n elementTimelines: [{\r\n batchId: 64,\r\n elementIds: CompressedId64Set.sortAndCompress([\"0x1a\", \"0x1d\"]),\r\n }, {\r\n batchId: 65,\r\n elementIds: longElementList,\r\n }],\r\n }];\r\n\r\n const ds1Row = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });\r\n expect(ds1Row).equal(\"@1\");\r\n const ds1out = vs1.getDisplayStyleSync({ id: ds1Row });\r\n expect(ds1out.classFullName).equal(\"BisCore:DisplayStyle3d\");\r\n expect(ds1out.jsonProperties?.styles).deep.equal(JSON.parse(JSON.stringify(styles)));\r\n ds1out.jsonProperties!.styles!.scheduleScript![0].elementTimelines[0].elementIds = CompressedId64Set.sortAndCompress([\"0x11a\", \"0x11d\", \"0x11e\", \"0x12a\"]);\r\n await vs1.updateDisplayStyle({ id: ds1Row, className: ds1.classFullName, settings: ds1out.jsonProperties!.styles! });\r\n const ds1out2 = vs1.getDisplayStyleSync({ id: ds1Row });\r\n expect(ds1out2.jsonProperties?.styles).deep.equal(ds1out.jsonProperties!.styles!);\r\n\r\n const tl1Row = await vs1.addTimeline({ name: \"TestRenderTimeline\", timeline: styles.scheduleScript, owner: \"owner2\" });\r\n expect(tl1Row).equal(\"@1\");\r\n const tl1out = vs1.getTimelineSync({ id: tl1Row });\r\n expect(tl1out.classFullName).equal(\"BisCore:RenderTimeline\");\r\n expect(tl1out.id).equal(tl1Row);\r\n expect(tl1out.code.value).equal(\"TestRenderTimeline\");\r\n expect(tl1out.script).equal(JSON.stringify(styles.scheduleScript));\r\n\r\n const viewDefProps: SpatialViewDefinitionProps = {\r\n ...basicProps,\r\n modelSelectorId: ms1Row,\r\n categorySelectorId: cs1Row,\r\n displayStyleId: ds1Row,\r\n };\r\n\r\n viewDefProps.code = { value: \"TestViewDefinition\", spec: \"0x1\", scope: \"0x1\" };\r\n const v1 = await vs1.addView({ viewDefinition: viewDefProps, tags: [\"big\", \"in progress\", \"done\"] });\r\n expect(v1).equal(\"@1\");\r\n let viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\r\n expect(viewDefOut.code.value).equal(\"TestViewDefinition\");\r\n expect(viewDefOut.classFullName).equal(\"BisCore:SpatialViewDefinition\");\r\n expect(viewDefOut.modelSelectorId).equal(ms1Row);\r\n expect(viewDefOut.categorySelectorId).equal(cs1Row);\r\n expect(viewDefOut.displayStyleId).equal(ds1Row);\r\n expect(viewDefOut.cameraOn).equal(false);\r\n expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify(basicProps.origin));\r\n expect(JSON.stringify(viewDefOut.extents)).equal(JSON.stringify(basicProps.extents));\r\n expect(JSON.stringify(viewDefOut.angles)).equal(JSON.stringify(basicProps.angles));\r\n expect(JSON.stringify(viewDefOut.camera)).equal(JSON.stringify(basicProps.camera));\r\n viewDefOut.cameraOn = true;\r\n viewDefOut.origin = [1, 2, 3];\r\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });\r\n viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\r\n expect(viewDefOut.cameraOn).equal(true);\r\n expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify([1, 2, 3]));\r\n viewDefOut.displayStyleId = \"@2\";\r\n await expect(vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut })).to.be.rejectedWith(\"invalid Id for displayStyles\");\r\n // add a new display style and uodate the view to use it\r\n viewDefOut.displayStyleId = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });\r\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });\r\n viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\r\n expect(viewDefOut.displayStyleId).equal(\"@2\");\r\n const vinfo = await vs1.getViewInfo({ viewId: v1 });\r\n expect(vinfo?.displayStyleId).equal(viewDefOut.displayStyleId);\r\n viewDefOut.displayStyleId = \"@1\";\r\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut }); // change it back for sharing test below\r\n\r\n viewDefProps.code.value = \"TestViewDefinition2\";\r\n const v2 = await vs1.addView({ viewDefinition: viewDefProps, tags: [\"big\", \"done\"] });\r\n await vs1.addTagsToView({ viewId: v2, tags: [\"problems\", \"finished\", \"big\"] });\r\n\r\n let tags = vs1.getTagsForView(v2);\r\n expect(tags?.length).equal(4);\r\n expect(tags).includes(\"big\");\r\n expect(tags).includes(\"done\");\r\n await vs1.removeTagFromView({ viewId: v2, tag: \"done\" });\r\n tags = vs1.getTagsForView(v2);\r\n expect(tags).not.includes(\"done\");\r\n expect(tags?.length).equal(3);\r\n\r\n // v1 and v2 share modelselector, categoryselector, and displaystyle so when v2 is deleted they should not be deleted\r\n await vs1.deleteView({ viewId: v2 });\r\n expect(() => vs1.getViewDefinitionSync({ viewId: v2 })).throws(\"View not found\");\r\n expect(vs1.getDisplayStyleRow(1)).not.undefined;\r\n expect(vs1.getModelSelectorRow(1)).not.undefined;\r\n expect(vs1.getCategorySelectorRow(1)).not.undefined;\r\n\r\n // the categoryselector, and displaystyle are no longer shared, so they should be deleted when v1 is deleted\r\n await vs1.deleteView({ viewId: v1 });\r\n expect(() => vs1.getViewDefinitionSync({ viewId: v1 })).throws(\"View not found\");\r\n expect(vs1.getDisplayStyleRow(1)).undefined;\r\n expect(vs1.getCategorySelectorRow(1)).undefined;\r\n expect(vs1.getModelSelectorRow(1)).not.undefined; // modelselector has a name so it should not be deleted\r\n\r\n // attempt to create a ViewDefinition element with invalid properties\r\n assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, categorySelectorId } as ElementProps), IModelError, \"displayStyleId is invalid\");\r\n assert.throws(() => iModel.elements.createElement({ ...basicProps, categorySelectorId, displayStyleId } as ElementProps), IModelError, \"modelSelectorId is invalid\");\r\n assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, displayStyleId } as ElementProps), IModelError, \"categorySelectorId is invalid\");\r\n\r\n // attempt to insert a ViewDefinition with invalid properties\r\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId, categorySelectorId, displayStyleId: modelId } as ElementProps), \"invalid displayStyle\");\r\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId: modelId, displayStyleId, categorySelectorId } as ElementProps), \"invalid modelSelector\");\r\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId, categorySelectorId: modelId, displayStyleId } as ElementProps), \"invalid categorySelector\");\r\n\r\n // Better way to create and insert\r\n const props: SpatialViewDefinitionProps = { ...basicProps, modelSelectorId, categorySelectorId, displayStyleId };\r\n const viewDefinition = iModel.elements.createElement<SpatialViewDefinition>(props);\r\n const viewDefinitionId = editTxn.insertElement(viewDefinition.toJSON());\r\n assert.isNotEmpty(viewDefinitionId);\r\n assert.isTrue(Id64.isValid(viewDefinitionId));\r\n\r\n // Best way to create and insert\r\n editTxn.insertElement(SpatialViewDefinition.createWithCamera(iModel, IModel.dictionaryId, \"default\", modelSelectorId, categorySelectorId, displayStyleId, iModel.projectExtents).toJSON());\r\n editTxn.end(\"save\", \"insert view definitions\");\r\n } finally {\r\n if (editTxn.isActive)\r\n editTxn.end(\"abandon\");\r\n }\r\n });\r\n\r\n describe(\"DrawingViewDefinition\", () => {\r\n it(\"fails on insert without a valid baseModelId\", () => {\r\n const editTxn = new ViewDefinitionEditTxn(iModel);\r\n editTxn.start();\r\n try {\r\n const subjectId = Subject.insert(\r\n editTxn,\r\n IModel.rootSubjectId,\r\n \"Subject\",\r\n \"Subject Description\"\r\n );\r\n const definitionModelId = DefinitionModel.insert(\r\n editTxn,\r\n subjectId,\r\n \"Definition\"\r\n );\r\n const drawingCategoryId = DrawingCategory.insert(\r\n editTxn,\r\n definitionModelId,\r\n \"DrawingCategory\",\r\n new SubCategoryAppearance()\r\n );\r\n const drawingCategorySelectorId = CategorySelector.insert(\r\n editTxn,\r\n definitionModelId,\r\n \"DrawingCategories\",\r\n [drawingCategoryId]\r\n );\r\n const displayStyle2dId = DisplayStyle2d.insert(\r\n editTxn,\r\n definitionModelId,\r\n \"DisplayStyle2d\"\r\n );\r\n\r\n assert.throws(() => {\r\n DrawingViewDefinition.insert(\r\n editTxn,\r\n definitionModelId,\r\n \"Drawing View\",\r\n \"0\",\r\n drawingCategorySelectorId,\r\n displayStyle2dId,\r\n new Range2d(0, 0, 100, 100)\r\n );\r\n }, IModelError, \"baseModelId is invalid\");\r\n editTxn.end();\r\n } finally {\r\n if (editTxn.isActive)\r\n editTxn.end(\"abandon\");\r\n }\r\n });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ViewDefinition.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ViewDefinition.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport { join } from \"path\";\r\nimport { CompressedId64Set, Guid, GuidString, Id64, Id64String, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n Camera, Code, CodeProps, ColorByName, ColorDef, ElementProps, IModel, IModelError, PlanProjectionSettings, RelatedElement, SpatialViewDefinitionProps,\r\n SubCategoryAppearance,\r\n} from \"@itwin/core-common\";\r\nimport { Matrix3d, Range2d, Range3d, StandardViewIndex, Transform, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport {\r\n CategorySelector, DefinitionModel, DictionaryModel, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, EditTxn, IModelDb, ModelSelector, PhysicalModel, PhysicalPartition, SpatialCategory, SpatialViewDefinition, StandaloneDb, SubCategory, Subject, SubjectOwnsPartitionElements, ViewStore,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\n\r\nclass ViewDefinitionEditTxn extends EditTxn {\r\n public constructor(iModel: IModelDb) {\r\n super(iModel, \"view-definition\");\r\n }\r\n\r\n public override start(): void {\r\n super.start();\r\n }\r\n\r\n public override end(mode: \"save\" | \"abandon\" = \"save\", args?: string): void {\r\n super.end(mode, args);\r\n }\r\n\r\n public override saveChanges(args?: string): void {\r\n super.saveChanges(args);\r\n }\r\n\r\n public override insertElement(elProps: ElementProps): Id64String {\r\n return super.insertElement(elProps);\r\n }\r\n\r\n public override updateElement(elProps: Partial<ElementProps>): void {\r\n super.updateElement(elProps);\r\n }\r\n\r\n public insertPhysicalModel(_code: CodeProps, modeledElementId: Id64String, privateModel = false): Id64String {\r\n const model = this.iModel.models.createModel({\r\n modeledElement: new RelatedElement({ id: modeledElementId }),\r\n classFullName: PhysicalModel.classFullName,\r\n isPrivate: privateModel,\r\n });\r\n\r\n return super.insertModel(model.toJSON());\r\n }\r\n\r\n public insertPhysicalPartitionAndModel(newModelCode: CodeProps, privateModel = false, parentId?: Id64String): Id64String[] {\r\n const model = parentId ? this.iModel.elements.getElement(parentId).model : IModel.repositoryModelId;\r\n const parent = new SubjectOwnsPartitionElements(parentId ?? IModel.rootSubjectId);\r\n const partition = this.iModel.elements.createElement({\r\n classFullName: PhysicalPartition.classFullName,\r\n parent,\r\n model,\r\n code: newModelCode,\r\n });\r\n const partitionId = this.insertElement(partition.toJSON());\r\n const modelId = this.insertPhysicalModel(newModelCode, partitionId, privateModel);\r\n return [partitionId, modelId];\r\n }\r\n\r\n public insertSpatialCategory(definitionModelId: Id64String, name: string, appearance?: SubCategoryAppearance): Id64String {\r\n const category = SpatialCategory.create(this.iModel, definitionModelId, name);\r\n category.id = this.insertElement(category.toJSON());\r\n if (appearance) {\r\n const subCategory = this.iModel.elements.getElement<SubCategory>(IModelDb.getDefaultSubCategoryId(category.id));\r\n subCategory.appearance = appearance;\r\n this.updateElement(subCategory.toJSON());\r\n }\r\n\r\n return category.id;\r\n }\r\n}\r\n\r\nfunction createNewModelAndCategory(rwIModel: IModelDb, editTxn: ViewDefinitionEditTxn) {\r\n const modelId = editTxn.insertPhysicalPartitionAndModel(IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"))[1];\r\n const modelId2 = editTxn.insertPhysicalPartitionAndModel(IModelTestUtils.getUniqueModelCode(rwIModel, \"PhysicalModel2\"), true)[1];\r\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"TestSpatialCategory\");\r\n const spatialCategoryId = editTxn.insertSpatialCategory(IModel.dictionaryId, newCategoryCode.value, new SubCategoryAppearance({ color: 0xff0000 }));\r\n\r\n newCategoryCode.value = \"spatial category 2\";\r\n editTxn.insertSpatialCategory(IModel.dictionaryId, newCategoryCode.value);\r\n\r\n editTxn.insertElement(IModelTestUtils.createPhysicalObject(rwIModel, modelId2, spatialCategoryId).toJSON());\r\n\r\n return { modelId, modelId2, spatialCategoryId };\r\n}\r\n\r\n// cspell:disable\r\n\r\nlet vs1: ViewStore.ViewDb;\r\n\r\ndescribe(\"ViewDefinition\", () => {\r\n // to simulate elements with guids without having to add elements to the iModel\r\n class FakeGuids {\r\n private _ids = new Map<Id64String, GuidString>();\r\n private _guids = new Map<GuidString, Id64String>();\r\n private add(id: Id64String, guid: GuidString) {\r\n this._ids.set(id, guid);\r\n this._guids.set(guid, id);\r\n return guid;\r\n }\r\n public getFederationGuidFromId(id: Id64String): GuidString | undefined {\r\n return this._ids.get(id) ?? this.add(id, Guid.createValue());\r\n }\r\n public getIdFromFederationGuid(guid?: GuidString): Id64String | undefined {\r\n return guid ? this._guids.get(guid) : undefined;\r\n }\r\n }\r\n\r\n let iModel: StandaloneDb;\r\n before(() => {\r\n iModel = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ViewDefinition\", \"ViewDefinition.bim\"), {\r\n rootSubject: { name: \"ViewDefinition tests\", description: \"ViewDefinition tests\" },\r\n client: \"ViewDefinition\",\r\n globalOrigin: { x: 0, y: 0 },\r\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\r\n guid: Guid.createValue(),\r\n });\r\n\r\n const dbName = join(KnownTestLocations.outputDir, \"viewDefTest.db\");\r\n ViewStore.ViewDb.createNewDb(dbName);\r\n vs1 = new ViewStore.ViewDb({ iModel, guidMap: new FakeGuids() });\r\n vs1.openDb(dbName, OpenMode.ReadWrite);\r\n });\r\n\r\n after(() => {\r\n iModel.close();\r\n vs1.closeDb(true);\r\n });\r\n\r\n it(\"SpatialViewDefinition\", async () => {\r\n const editTxn = new ViewDefinitionEditTxn(iModel);\r\n editTxn.start();\r\n try {\r\n const { modelId, modelId2, spatialCategoryId } = createNewModelAndCategory(iModel, editTxn);\r\n const displayStyleId = editTxn.insertElement(DisplayStyle3d.create(iModel, IModel.dictionaryId, \"default\", { backgroundColor: ColorDef.fromString(\"rgb(255,0,0)\") }).toJSON());\r\n const modelSelectorId = editTxn.insertElement(ModelSelector.create(iModel, IModel.dictionaryId, \"default\", [modelId, modelId2]).toJSON());\r\n const categorySelectorId = editTxn.insertElement(CategorySelector.create(iModel, IModel.dictionaryId, \"default\", [spatialCategoryId]).toJSON());\r\n editTxn.saveChanges(\"Basic setup\");\r\n\r\n const standardView = StandardViewIndex.Iso;\r\n const rotation = Matrix3d.createStandardWorldToView(standardView);\r\n const angles = YawPitchRollAngles.createFromMatrix3d(rotation);\r\n const rotationTransform = Transform.createOriginAndMatrix(undefined, rotation);\r\n const range = new Range3d(1, 1, 1, 8, 8, 8);\r\n const rotatedRange = rotationTransform.multiplyRange(range);\r\n const basicProps = {\r\n code: Code.createEmpty(),\r\n model: IModel.dictionaryId,\r\n classFullName: \"BisCore:SpatialViewDefinition\",\r\n cameraOn: false,\r\n origin: rotation.multiplyTransposeXYZ(rotatedRange.low.x, rotatedRange.low.y, rotatedRange.low.z),\r\n extents: rotatedRange.diagonal(),\r\n angles,\r\n camera: new Camera(),\r\n };\r\n\r\n const ms1 = iModel.elements.getElement<ModelSelector>(modelSelectorId);\r\n const ms1Row = await vs1.addModelSelector({ name: ms1.code.value, selector: { ids: ms1.models } });\r\n expect(ms1Row).equal(\"@1\");\r\n let ms1out = vs1.getModelSelectorSync({ id: ms1Row });\r\n expect(ms1out.classFullName).equal(\"BisCore:ModelSelector\");\r\n expect(ms1out.models.length).equal(2);\r\n expect(ms1out.models[0]).equal(modelId);\r\n expect(ms1out.models[1]).equal(modelId2);\r\n ms1out.models.push(\"0x123\");\r\n await vs1.updateModelSelector({ id: ms1Row, selector: { ids: ms1out.models } });\r\n ms1out = vs1.getModelSelectorSync({ id: ms1Row });\r\n expect(ms1out.models.length).equal(3);\r\n expect(ms1out.models[2]).equal(\"0x123\");\r\n\r\n const cs1 = iModel.elements.getElement<CategorySelector>(categorySelectorId);\r\n const cs1Row = await vs1.addCategorySelector({ selector: { ids: cs1.categories } });\r\n expect(cs1Row).equal(\"@1\");\r\n let cs1out = vs1.getCategorySelectorSync({ id: cs1Row });\r\n expect(cs1out.classFullName).equal(\"BisCore:CategorySelector\");\r\n expect(cs1out.categories.length).equal(1);\r\n expect(cs1out.categories[0]).equal(spatialCategoryId);\r\n cs1out.categories.push(\"0x1234\");\r\n await vs1.updateCategorySelector({ id: cs1Row, selector: { ids: cs1out.categories } });\r\n cs1out = vs1.getCategorySelectorSync({ id: cs1Row });\r\n expect(cs1out.categories.length).equal(2);\r\n expect(cs1out.categories[1]).equal(\"0x1234\");\r\n\r\n const longElementList = CompressedId64Set.sortAndCompress([\"0x2a\", \"0x2b\", \"0x2d\", \"0x2e\", \"0x43\", \"0x1a\", \"0x1d\", \"0x12\", \"0x22\",\r\n \"0x8\", \"0x21\", \"0x1b\", \"0x1c\", \"0x1e\", \"0x1f\", \"0x2c\", \"0x2f\", \"0x3a\", \"0x3b\", \"0x3d\", \"0x3e\", \"0x43\",\r\n \"0x4a\", \"0x4b\", \"0x4d\", \"0x4e\", \"0x5a\", \"0x5b\", \"0x5d\", \"0x5e\", \"0x6a\", \"0x6b\", \"0x6d\", \"0x6e\", \"0x7a\",\r\n \"0x7b\", \"0x7d\", \"0x7e\", \"0x8a\", \"0x8b\", \"0x8d\", \"0x8e\", \"0x9a\", \"0x9b\", \"0x9d\", \"0x9e\", \"0xaa\", \"0xab\", \"0xad\",\r\n \"0xae\", \"0xba\", \"0xbb\", \"0xbd\", \"0xbe\", \"0xf5ca\", \"0xcb\", \"0xcd\", \"0xce\", \"0xda\", \"0xdb\", \"0xdd\", \"0xde\", \"0xea\",\r\n \"0xeb\", \"0xed\", \"0xee\", \"0xfa\", \"0xfb\", \"0xfd\", \"0xfe\", \"0x10a\", \"0x10b\", \"0x10d\", \"0x10e\", \"0x11a\", \"0x11b\", \"0x11d\",\r\n \"0x11e\", \"0x12a\", \"0x12b\", \"0x12d\", \"0x12e\", \"0x13a\", \"0x13b\", \"0x13d\", \"0x13e\", \"0x14a\", \"0x14b\", \"0x14d\", \"0x14e\",\r\n \"0x15a\", \"0x15b\", \"0x15d\", \"0x15e\", \"0x16a\", \"0x16b\", \"0x16d\"]);\r\n\r\n await expect(vs1.addCategorySelector({ selector: { query: { from: \"BisCore:SubCategory\" } } })).to.be.rejectedWith(\"must select from BisCore:Category\");\r\n const cs2 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\" } } }));\r\n expect(cs2).equal(\"@2\");\r\n const cs3 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\", adds: longElementList } } }));\r\n const cs4 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\", removes: [\"0x233\", \"0x21\"], adds: longElementList } } }));\r\n const onlyUsedProps = {\r\n name: \"only used spatial categories\",\r\n selector: {\r\n query: {\r\n from: \"BisCore.Category\",\r\n where: \"ECInstanceId IN (SELECT DISTINCT Category.Id FROM BisCore.GeometricElement3d)\",\r\n },\r\n },\r\n };\r\n await vs1.addCategorySelector(onlyUsedProps);\r\n let selected = vs1.getCategorySelectorSync({ id: cs2 });\r\n expect(selected.categories.length).equal(2);\r\n selected = vs1.getCategorySelectorSync({ id: cs3 });\r\n expect(selected.categories.length).equal(98);\r\n selected = vs1.getCategorySelectorSync({ id: cs4 });\r\n expect(selected.categories.length).equal(97);\r\n selected = vs1.getCategorySelectorSync({ name: onlyUsedProps.name });\r\n expect(selected.categories.length).equal(1);\r\n expect(selected.categories[0]).equal(spatialCategoryId);\r\n\r\n const ms3 = (await vs1.addModelSelector({ name: \"model selector 2\", selector: { query: { from: \"Bis.GeometricModel3d\" } } }));\r\n let selectedModels = vs1.getModelSelectorSync({ id: ms3 });\r\n expect(selectedModels.models.length).equal(2);\r\n const ms4Props = {\r\n name: \"spatial, non-private models\",\r\n selector: {\r\n query: {\r\n from: \"BisCore.GeometricModel3d\",\r\n where: \"IsPrivate=false AND IsTemplate=false AND (IsNotSpatiallyLocated IS NULL OR IsNotSpatiallyLocated=false)\",\r\n },\r\n },\r\n };\r\n\r\n await vs1.addModelSelector(ms4Props);\r\n selectedModels = vs1.getModelSelectorSync({ name: ms4Props.name });\r\n expect(selectedModels.models.length).equal(1);\r\n expect(selectedModels.models[0]).equal(modelId);\r\n\r\n const ds1 = iModel.elements.getElement<DisplayStyle3d>(displayStyleId);\r\n ds1.settings.setPlanProjectionSettings(\"0x1\", PlanProjectionSettings.fromJSON({ elevation: 1 }));\r\n ds1.settings.setPlanProjectionSettings(\"0x2\", PlanProjectionSettings.fromJSON({ elevation: 2 }));\r\n\r\n const styles = (ds1.toJSON()).jsonProperties!.styles!;\r\n styles.subCategoryOvr =\r\n [{\r\n subCategory: spatialCategoryId,\r\n color: ColorByName.fuchsia,\r\n invisible: true,\r\n style: \"0xaaa\",\r\n weight: 10,\r\n transp: 0.5,\r\n },\r\n ];\r\n\r\n styles.excludedElements = CompressedId64Set.sortAndCompress([\"0x8\", \"0x12\", \"0x22\"]);\r\n styles.scheduleScript = [{\r\n modelId: \"0x21\",\r\n realityModelUrl: \"altavista.com\",\r\n elementTimelines: [{\r\n batchId: 64,\r\n elementIds: CompressedId64Set.sortAndCompress([\"0x1a\", \"0x1d\"]),\r\n }, {\r\n batchId: 65,\r\n elementIds: longElementList,\r\n }],\r\n }];\r\n\r\n const ds1Row = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });\r\n expect(ds1Row).equal(\"@1\");\r\n const ds1out = vs1.getDisplayStyleSync({ id: ds1Row });\r\n expect(ds1out.classFullName).equal(\"BisCore:DisplayStyle3d\");\r\n expect(ds1out.jsonProperties?.styles).deep.equal(JSON.parse(JSON.stringify(styles)));\r\n ds1out.jsonProperties!.styles!.scheduleScript![0].elementTimelines[0].elementIds = CompressedId64Set.sortAndCompress([\"0x11a\", \"0x11d\", \"0x11e\", \"0x12a\"]);\r\n await vs1.updateDisplayStyle({ id: ds1Row, className: ds1.classFullName, settings: ds1out.jsonProperties!.styles! });\r\n const ds1out2 = vs1.getDisplayStyleSync({ id: ds1Row });\r\n expect(ds1out2.jsonProperties?.styles).deep.equal(ds1out.jsonProperties!.styles!);\r\n\r\n const tl1Row = await vs1.addTimeline({ name: \"TestRenderTimeline\", timeline: styles.scheduleScript, owner: \"owner2\" });\r\n expect(tl1Row).equal(\"@1\");\r\n const tl1out = vs1.getTimelineSync({ id: tl1Row });\r\n expect(tl1out.classFullName).equal(\"BisCore:RenderTimeline\");\r\n expect(tl1out.id).equal(tl1Row);\r\n expect(tl1out.code.value).equal(\"TestRenderTimeline\");\r\n expect(tl1out.script).equal(JSON.stringify(styles.scheduleScript));\r\n\r\n const viewDefProps: SpatialViewDefinitionProps = {\r\n ...basicProps,\r\n modelSelector: { id: ms1Row, relClassName: \"BisCore:SpatialViewDefinitionUsesModelSelector\" },\r\n categorySelector: { id: cs1Row, relClassName: \"BisCore:ViewDefinitionUsesCategorySelector\" },\r\n displayStyle: { id: ds1Row, relClassName: \"BisCore:ViewDefinitionUsesDisplayStyle\" },\r\n\r\n // Backward-Compatibility until these get deprecated\r\n modelSelectorId: ms1Row,\r\n categorySelectorId: cs1Row,\r\n displayStyleId: ds1Row,\r\n };\r\n\r\n viewDefProps.code = { value: \"TestViewDefinition\", spec: \"0x1\", scope: \"0x1\" };\r\n const v1 = await vs1.addView({ viewDefinition: viewDefProps, tags: [\"big\", \"in progress\", \"done\"] });\r\n expect(v1).equal(\"@1\");\r\n let viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\r\n expect(viewDefOut.code.value).equal(\"TestViewDefinition\");\r\n expect(viewDefOut.classFullName).equal(\"BisCore:SpatialViewDefinition\");\r\n expect(viewDefOut.modelSelector).deep.equal({ id: ms1Row, relClassName: \"BisCore:SpatialViewDefinitionUsesModelSelector\" });\r\n expect(viewDefOut.categorySelector).deep.equal({ id: cs1Row, relClassName: \"BisCore:ViewDefinitionUsesCategorySelector\" });\r\n expect(viewDefOut.displayStyle).deep.equal({ id: ds1Row, relClassName: \"BisCore:ViewDefinitionUsesDisplayStyle\" });\r\n\r\n // Verify deprecated *Id props are still populated for backward compatibility\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(viewDefOut.modelSelectorId).equal(ms1Row);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(viewDefOut.categorySelectorId).equal(cs1Row);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(viewDefOut.displayStyleId).equal(ds1Row);\r\n\r\n expect(viewDefOut.cameraOn).equal(false);\r\n expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify(basicProps.origin));\r\n expect(JSON.stringify(viewDefOut.extents)).equal(JSON.stringify(basicProps.extents));\r\n expect(JSON.stringify(viewDefOut.angles)).equal(JSON.stringify(basicProps.angles));\r\n expect(JSON.stringify(viewDefOut.camera)).equal(JSON.stringify(basicProps.camera));\r\n viewDefOut.cameraOn = true;\r\n viewDefOut.origin = [1, 2, 3];\r\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });\r\n viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\r\n expect(viewDefOut.cameraOn).equal(true);\r\n expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify([1, 2, 3]));\r\n viewDefOut.displayStyle = { id: \"@2\" };\r\n await expect(vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut })).to.be.rejectedWith(\"invalid Id for displayStyles\");\r\n\r\n // add a new display style and update the view to use it\r\n viewDefOut.displayStyle = { id: await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles }), relClassName: \"BisCore:ViewDefinitionUsesDisplayStyle\" };\r\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });\r\n viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\r\n expect(viewDefOut.displayStyle?.id).equal(\"@2\");\r\n const vinfo = await vs1.getViewInfo({ viewId: v1 });\r\n expect(vinfo?.displayStyleId).equal(viewDefOut.displayStyle?.id);\r\n viewDefOut.displayStyle = { id: \"@1\", relClassName: \"BisCore:ViewDefinitionUsesDisplayStyle\" };\r\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut }); // change it back for sharing test below\r\n\r\n viewDefProps.code.value = \"TestViewDefinition2\";\r\n const v2 = await vs1.addView({ viewDefinition: viewDefProps, tags: [\"big\", \"done\"] });\r\n await vs1.addTagsToView({ viewId: v2, tags: [\"problems\", \"finished\", \"big\"] });\r\n\r\n let tags = vs1.getTagsForView(v2);\r\n expect(tags?.length).equal(4);\r\n expect(tags).includes(\"big\");\r\n expect(tags).includes(\"done\");\r\n await vs1.removeTagFromView({ viewId: v2, tag: \"done\" });\r\n tags = vs1.getTagsForView(v2);\r\n expect(tags).not.includes(\"done\");\r\n expect(tags?.length).equal(3);\r\n\r\n // v1 and v2 share modelselector, categoryselector, and displaystyle so when v2 is deleted they should not be deleted\r\n await vs1.deleteView({ viewId: v2 });\r\n expect(() => vs1.getViewDefinitionSync({ viewId: v2 })).throws(\"View not found\");\r\n expect(vs1.getDisplayStyleRow(1)).not.undefined;\r\n expect(vs1.getModelSelectorRow(1)).not.undefined;\r\n expect(vs1.getCategorySelectorRow(1)).not.undefined;\r\n\r\n // the categoryselector, and displaystyle are no longer shared, so they should be deleted when v1 is deleted\r\n await vs1.deleteView({ viewId: v1 });\r\n expect(() => vs1.getViewDefinitionSync({ viewId: v1 })).throws(\"View not found\");\r\n expect(vs1.getDisplayStyleRow(1)).undefined;\r\n expect(vs1.getCategorySelectorRow(1)).undefined;\r\n expect(vs1.getModelSelectorRow(1)).not.undefined; // modelselector has a name so it should not be deleted\r\n\r\n // attempt to create a ViewDefinition element with invalid properties\r\n assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, categorySelectorId } as ElementProps), IModelError, \"displayStyleId is invalid\");\r\n assert.throws(() => iModel.elements.createElement({ ...basicProps, categorySelectorId, displayStyleId } as ElementProps), IModelError, \"modelSelectorId is invalid\");\r\n assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, displayStyleId } as ElementProps), IModelError, \"categorySelectorId is invalid\");\r\n\r\n // attempt to insert a ViewDefinition with invalid properties\r\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId, categorySelectorId, displayStyleId: modelId } as ElementProps), \"invalid displayStyle\");\r\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId: modelId, displayStyleId, categorySelectorId } as ElementProps), \"invalid modelSelector\");\r\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId, categorySelectorId: modelId, displayStyleId } as ElementProps), \"invalid categorySelector\");\r\n\r\n // Better way to create and insert\r\n const props: SpatialViewDefinitionProps = { ...basicProps, modelSelectorId, categorySelectorId, displayStyleId };\r\n const viewDefinition = iModel.elements.createElement<SpatialViewDefinition>(props);\r\n const viewDefinitionId = editTxn.insertElement(viewDefinition.toJSON());\r\n assert.isNotEmpty(viewDefinitionId);\r\n assert.isTrue(Id64.isValid(viewDefinitionId));\r\n\r\n // Best way to create and insert\r\n editTxn.insertElement(SpatialViewDefinition.createWithCamera(iModel, IModel.dictionaryId, \"default\", modelSelectorId, categorySelectorId, displayStyleId, iModel.projectExtents).toJSON());\r\n editTxn.end(\"save\", \"insert view definitions\");\r\n } finally {\r\n if (editTxn.isActive)\r\n editTxn.end(\"abandon\");\r\n }\r\n });\r\n\r\n describe(\"DrawingViewDefinition\", () => {\r\n it(\"fails on insert without a valid baseModelId\", () => {\r\n const editTxn = new ViewDefinitionEditTxn(iModel);\r\n editTxn.start();\r\n try {\r\n const subjectId = Subject.insert(\r\n editTxn,\r\n IModel.rootSubjectId,\r\n \"Subject\",\r\n \"Subject Description\"\r\n );\r\n const definitionModelId = DefinitionModel.insert(\r\n editTxn,\r\n subjectId,\r\n \"Definition\"\r\n );\r\n const drawingCategoryId = DrawingCategory.insert(\r\n editTxn,\r\n definitionModelId,\r\n \"DrawingCategory\",\r\n new SubCategoryAppearance()\r\n );\r\n const drawingCategorySelectorId = CategorySelector.insert(\r\n editTxn,\r\n definitionModelId,\r\n \"DrawingCategories\",\r\n [drawingCategoryId]\r\n );\r\n const displayStyle2dId = DisplayStyle2d.insert(\r\n editTxn,\r\n definitionModelId,\r\n \"DisplayStyle2d\"\r\n );\r\n\r\n assert.throws(() => {\r\n DrawingViewDefinition.insert(\r\n editTxn,\r\n definitionModelId,\r\n \"Drawing View\",\r\n \"0\",\r\n drawingCategorySelectorId,\r\n displayStyle2dId,\r\n new Range2d(0, 0, 100, 100)\r\n );\r\n }, IModelError, \"baseModelId is invalid\");\r\n editTxn.end();\r\n } finally {\r\n if (editTxn.isActive)\r\n editTxn.end(\"abandon\");\r\n }\r\n });\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/Workspace.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport * as fs from \"fs-extra\";\r\nimport { extname } from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { SettingsPriority } from \"../../workspace/Settings\";\r\nimport { settingsWorkspaceDbName } from \"../../workspace/SettingsDb\";\r\nimport { Workspace, WorkspaceContainer, WorkspaceContainerProps, WorkspaceDbLoadError, WorkspaceDbManifest, WorkspaceDbProps } from \"../../workspace/Workspace\";\r\nimport { EditableWorkspaceDb, WorkspaceEditor } from \"../../workspace/WorkspaceEditor\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { validateWorkspaceContainerId } from \"../../internal/workspace/WorkspaceImpl\";\r\nimport { _nativeDb } from \"../../internal/Symbols\";\r\nimport { CloudSqlite } from \"../../CloudSqlite\";\r\nimport { BlobContainer } from \"../../BlobContainerService\";\r\n\r\ndescribe(\"WorkspaceFile\", () => {\r\n\r\n let editor: WorkspaceEditor;\r\n let workspace: Workspace;\r\n\r\n before(() => {\r\n editor = WorkspaceEditor.construct();\r\n workspace = editor.workspace;\r\n });\r\n after(() => {\r\n editor.close();\r\n });\r\n\r\n async function makeEditableDb(props: WorkspaceDbProps & WorkspaceContainerProps, manifest: WorkspaceDbManifest): Promise<EditableWorkspaceDb> {\r\n const container = editor.getContainer({ ...props, accessToken: \"\" });\r\n const wsFile = await container.createDb({ ...props, manifest });\r\n wsFile.open();\r\n return wsFile;\r\n }\r\n\r\n function compareFiles(file1: string, file2: string) {\r\n expect(fs.lstatSync(file1).size).equal(fs.lstatSync(file2).size);\r\n expect(fs.readFileSync(file1)).to.deep.equal(fs.readFileSync(file2));\r\n }\r\n\r\n it(\"WorkspaceContainer names\", () => {\r\n const expectBadName = (names: string[]) => {\r\n names.forEach((containerId) => {\r\n expect(() => validateWorkspaceContainerId(containerId), containerId).to.throw(\"containerId\");\r\n });\r\n };\r\n\r\n expectBadName([\r\n \"\",\r\n \" \",\r\n \"12\", // too short\r\n \"a\\\\b\",\r\n `a\"b`,\r\n \"a:b\",\r\n \"a.b\",\r\n \"a?b\",\r\n \"a*b\",\r\n \"a|b\",\r\n \"123--4\",\r\n \"Abc\",\r\n \"return\\r\",\r\n \"newline\\n\",\r\n \"a\".repeat(64), // too long\r\n \"-leading-dash\",\r\n \"trailing-dash-\"]);\r\n\r\n validateWorkspaceContainerId(Guid.createValue()); // guids should be valid\r\n });\r\n\r\n it(\"WorkspaceDbNames\", () => {\r\n const expectBadName = (names: string[]) => {\r\n names.forEach((dbName) => {\r\n expect(() => CloudSqlite.validateDbName(dbName)).to.throw(\"dbName\");\r\n });\r\n };\r\n\r\n expectBadName([\r\n \"\",\r\n \" \",\r\n \"1/2\",\r\n \"a\\\\b\",\r\n `a\"b`,\r\n \"base:1.2.3\",\r\n \"a:b\",\r\n \"a.b\",\r\n \"a?b\",\r\n \"a*b\",\r\n \"a|b\",\r\n \"con\",\r\n \"prn\",\r\n \"return\\r\",\r\n \"newline\\n\",\r\n \"a\".repeat(256), // too long\r\n \" leading space\",\r\n \"trailing space \",\r\n \"per.iod\",\r\n \"hash#tag\",\r\n \"back`tick\",\r\n \"single'quote\",\r\n ]);\r\n\r\n CloudSqlite.validateDbName(Guid.createValue()); // guids should be valid\r\n });\r\n\r\n it(\"WorkspaceDb version fallback\", () => {\r\n expect(CloudSqlite.validateDbVersion(\"\" as CloudSqlite.DbVersion)).equals(\"0.0.0\");\r\n expect(CloudSqlite.makeSemverName(\"db1\", \"\" as CloudSqlite.DbVersion)).equals(\"db1:0.0.0\");\r\n expect(() => CloudSqlite.validateDbVersion(\" \" as CloudSqlite.DbVersion)).to.throw(\"invalid version specification\");\r\n });\r\n\r\n it(\"create new WorkspaceDb\", async () => {\r\n const manifest: WorkspaceDbManifest = { workspaceName: \"resources for acme users\", contactName: \"contact me\" };\r\n const wsFile = await makeEditableDb({ containerId: \"acme-engineering-inc-2\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, manifest);\r\n const inFile = IModelTestUtils.resolveAssetFile(\"test.setting.json5\");\r\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\r\n let blobVal = new Uint8Array(testRange.toFloat64Array().buffer);\r\n let strVal = \"this is test1\";\r\n const strRscName = \"string-resource/1\";\r\n const blobRscName = \"blob.resource:1\";\r\n const fileRscName = \"settings files/my settings/a.json5\";\r\n\r\n let testManifest = wsFile.manifest;\r\n expect(testManifest.workspaceName).equals(manifest.workspaceName);\r\n expect(testManifest.contactName).equals(manifest.contactName);\r\n\r\n wsFile.updateManifest({ ...testManifest, contactName: \"new contact\" });\r\n testManifest = wsFile.manifest;\r\n expect(testManifest.workspaceName).equals(manifest.workspaceName);\r\n expect(testManifest.contactName).equals(\"new contact\");\r\n\r\n expect(() => wsFile.addFile(fileRscName, \"bad file name\")).to.throw(\"no such file\");\r\n expect(() => wsFile.updateFile(fileRscName, inFile)).to.throw(\"error replacing\");\r\n expect(() => wsFile.removeFile(fileRscName)).to.throw(\"does not exist\");\r\n\r\n wsFile.addBlob(blobRscName, blobVal);\r\n wsFile.addString(strRscName, strVal);\r\n expect(wsFile.getString(strRscName)).equals(strVal);\r\n expect(wsFile.getBlob(blobRscName)).to.deep.equal(blobVal);\r\n strVal = \"updated string\";\r\n blobVal = Uint8Array.from([0, 1, 2, 3]);\r\n wsFile.updateString(strRscName, strVal);\r\n wsFile.updateBlob(blobRscName, blobVal);\r\n expect(wsFile.getString(strRscName)).equals(strVal);\r\n expect(wsFile.getBlob(blobRscName)).to.deep.equal(blobVal);\r\n\r\n wsFile.removeBlob(blobRscName);\r\n wsFile.removeString(strRscName);\r\n expect(wsFile.getString(strRscName)).to.be.undefined;\r\n expect(wsFile.getBlob(blobRscName)).to.be.undefined;\r\n\r\n wsFile.addFile(fileRscName, inFile);\r\n const writeFile = sinon.spy(wsFile.sqliteDb[_nativeDb], \"extractEmbeddedFile\");\r\n expect(writeFile.callCount).eq(0);\r\n const outFile = wsFile.getFile(fileRscName)!;\r\n expect(writeFile.callCount).eq(1);\r\n expect(extname(outFile)).equals(\".json5\");\r\n compareFiles(inFile, outFile);\r\n\r\n let outFile2 = wsFile.getFile(fileRscName)!;\r\n expect(writeFile.callCount).eq(1);\r\n expect(outFile).eq(outFile2);\r\n\r\n const inFile2 = IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\");\r\n wsFile.updateFile(fileRscName, inFile2);\r\n outFile2 = wsFile.getFile(fileRscName)!;\r\n expect(writeFile.callCount).eq(2);\r\n expect(outFile).eq(outFile2);\r\n compareFiles(inFile2, outFile);\r\n });\r\n\r\n it(\"load workspace settings\", async () => {\r\n const settingsFile = IModelTestUtils.resolveAssetFile(\"test.setting.json5\");\r\n const defaultDb = await makeEditableDb({ containerId: \"default\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, { workspaceName: \"default resources\", contactName: \"contact 123\" });\r\n defaultDb.addString(\"default-settings\", fs.readFileSync(settingsFile, \"utf-8\"));\r\n defaultDb.close();\r\n\r\n const settings = workspace.settings;\r\n await workspace.loadSettingsDictionary(\r\n { dbName: \"db1\", containerId: \"default\", baseUri: \"\", storageType: \"azure\", resourceName: \"default-settings\", priority: SettingsPriority.defaults });\r\n expect(settings.getSetting(\"editor/renderWhitespace\")).equals(\"selection\");\r\n\r\n const workspaceName = \"all fonts workspace\";\r\n const schemaFile = IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\");\r\n const fontsDb = await makeEditableDb({ containerId: \"fonts\", dbName: \"fonts\", baseUri: \"\", storageType: \"azure\" }, { workspaceName, contactName: \"font guy\" });\r\n\r\n fontsDb.addFile(\"Helvetica.ttf\", schemaFile, \"ttf\");\r\n fontsDb.close();\r\n });\r\n\r\n it(\"settingsWorkspaceDbName discovers all string resources as dictionaries\", async () => {\r\n const containerProps = { containerId: \"load-all-test\", baseUri: \"\", storageType: \"azure\" as const };\r\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all workspace\" });\r\n db.addString(\"dict-a\", JSON.stringify({ \"editor/renderWhitespace\": \"all\" }));\r\n db.addString(\"dict-b\", JSON.stringify({ \"editor/fontSize\": 14 }));\r\n db.close();\r\n\r\n\r\n const settings = workspace.settings;\r\n await workspace.loadSettingsDictionary({\r\n ...containerProps,\r\n priority: SettingsPriority.iTwin,\r\n dbName: settingsWorkspaceDbName,\r\n });\r\n expect(settings.getSetting(\"editor/renderWhitespace\")).equals(\"all\");\r\n expect(settings.getSetting(\"editor/fontSize\")).equals(14);\r\n });\r\n\r\n it(\"settingsWorkspaceDbName loads resourceName last when set\", async () => {\r\n const containerProps = { containerId: \"load-all-ignore-rsc\", baseUri: \"\", storageType: \"azure\" as const };\r\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all-priority\" });\r\n db.addString(\"first\", JSON.stringify({ \"editor/tabSize\": 2, \"editor/shared\": \"first\" }));\r\n db.addString(\"second\", JSON.stringify({ \"editor/wordWrap\": \"on\", \"editor/shared\": \"second\" }));\r\n db.close();\r\n\r\n const settings = workspace.settings;\r\n await workspace.loadSettingsDictionary({\r\n ...containerProps,\r\n priority: SettingsPriority.defaults,\r\n dbName: settingsWorkspaceDbName,\r\n resourceName: \"second\",\r\n });\r\n // All dictionaries are loaded, with resourceName loaded last.\r\n expect(settings.getSetting(\"editor/tabSize\")).equals(2);\r\n expect(settings.getSetting(\"editor/wordWrap\")).equals(\"on\");\r\n expect(settings.getSetting(\"editor/shared\")).equals(\"second\");\r\n });\r\n\r\n it(\"settingsWorkspaceDbName continues loading sibling dictionaries after a resource fails\", async () => {\r\n const containerProps = { containerId: \"load-all-continue-on-error\", baseUri: \"\", storageType: \"azure\" as const };\r\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all-continue-on-error\" });\r\n db.addString(\"dict-valid\", JSON.stringify({ \"editor/continueAfterError\": true }));\r\n db.addString(\"dict-invalid\", \"not valid json\");\r\n db.close();\r\n\r\n const problems: WorkspaceDbLoadError[] = [];\r\n await workspace.loadSettingsDictionary({\r\n ...containerProps,\r\n priority: SettingsPriority.defaults,\r\n dbName: settingsWorkspaceDbName,\r\n // Force this valid resource to be evaluated last.\r\n resourceName: \"dict-valid\",\r\n }, problems);\r\n\r\n expect(workspace.settings.getSetting(\"editor/continueAfterError\")).to.equal(true);\r\n expect(problems.length).to.equal(1);\r\n });\r\n\r\n\r\n\r\n describe(\"workspace db version cache key\", () => {\r\n afterEach(() => sinon.restore());\r\n\r\n function getContainer(containerId: string, props?: Partial<WorkspaceContainerProps>) {\r\n return editor.getContainer({ containerId, baseUri: \"\", storageType: \"azure\", accessToken: \"\", ...props });\r\n }\r\n\r\n function createFakeCloudContainer(containerId: string): CloudSqlite.CloudContainer {\r\n return {\r\n connect: () => { },\r\n disconnect: () => { },\r\n checkForChanges: () => { },\r\n queryDatabase: () => undefined,\r\n queryDatabases: () => [],\r\n acquireWriteLock: () => { },\r\n releaseWriteLock: () => { },\r\n abandonChanges: () => { },\r\n containerId,\r\n baseUri: \"https://example.invalid\",\r\n storageType: \"azure\",\r\n isPublic: false,\r\n } as unknown as CloudSqlite.CloudContainer;\r\n }\r\n\r\n function stubCloudLookup(containerId: string, resolveVersion: (props: WorkspaceDbProps) => string) {\r\n sinon.stub(CloudSqlite, \"createCloudContainer\").returns(createFakeCloudContainer(containerId));\r\n sinon.stub(CloudSqlite, \"querySemverMatch\").callsFake((props) => CloudSqlite.makeSemverName(props.dbName, resolveVersion(props)));\r\n sinon.stub(CloudSqlite, \"isSemverEditable\").returns(true);\r\n }\r\n\r\n it(\"local getWorkspaceDb ignores version selectors for cache identity\", async () => {\r\n const container = getContainer(\"workspace-cache-local\");\r\n await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-cache-local\" } });\r\n\r\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\" });\r\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\", includePrerelease: true });\r\n expect(db1).to.equal(db2);\r\n });\r\n\r\n it(\"local createDb with omitted dbName matches an explicit default-name lookup\", async () => {\r\n const container = getContainer(\"workspace-cache-local-default-name\");\r\n const db1 = await container.createDb({ manifest: { workspaceName: \"workspace-cache-local-default-name\" } });\r\n\r\n const db2 = container.getEditableDb({ dbName: \"workspace-db\" });\r\n expect(db1).to.equal(db2);\r\n });\r\n\r\n it(\"cloud getWorkspaceDb reuses the same instance for semver-equivalent selectors\", () => {\r\n const containerId = \"workspace-cache-cloud-equivalent\";\r\n stubCloudLookup(containerId, (props) => props.version === \"1\" ? \"1.0.0\" : (props.version ?? \"1.0.0\"));\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1\" });\r\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\" });\r\n expect(db1).to.equal(db2);\r\n });\r\n\r\n it(\"cloud getWorkspaceDb returns different instances for different resolved versions\", () => {\r\n const containerId = \"workspace-cache-cloud-different\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"1.0.0\");\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\" });\r\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"2.0.0\" });\r\n expect(db1).to.not.equal(db2);\r\n });\r\n\r\n it(\"cloud getWorkspaceDb respects includePrerelease only when it resolves differently\", () => {\r\n const containerId = \"workspace-cache-cloud-prerelease\";\r\n stubCloudLookup(containerId, (props) => props.includePrerelease ? \"1.1.0-beta.1\" : \"1.0.0\");\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const stable = container.getWorkspaceDb({ dbName: \"test-db\", version: \"*\" });\r\n const prerelease = container.getWorkspaceDb({ dbName: \"test-db\", version: \"*\", includePrerelease: true });\r\n expect(stable).to.not.equal(prerelease);\r\n });\r\n\r\n it(\"createDb with explicit version returns the cached editable db for that resolved version\", async () => {\r\n const containerId = \"workspace-create-version\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\r\n sinon.stub(CloudSqlite, \"uploadDb\").resolves();\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const db = await container.createDb({ dbName: \"test-db\", version: \"1.0.0\", manifest: { workspaceName: \"workspace-create-version\" } });\r\n\r\n const dbAgain = container.getEditableDb({ dbName: \"test-db\", version: \"1.0.0\" });\r\n expect(db).to.equal(dbAgain);\r\n });\r\n\r\n it(\"createDb without an explicit version returns the cached editable db for version 0.0.0\", async () => {\r\n const containerId = \"workspace-create-default-version\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\r\n sinon.stub(CloudSqlite, \"uploadDb\").resolves();\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const db = await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-create-default-version\" } });\r\n\r\n const dbAgain = container.getEditableDb({ dbName: \"test-db\", version: \"0.0.0\" });\r\n expect(db).to.equal(dbAgain);\r\n });\r\n\r\n it(\"cloud createDb uploads using the requested version\", async () => {\r\n const containerId = \"workspace-cloud-explicit-version\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\r\n const uploadDb = sinon.stub(CloudSqlite, \"uploadDb\").resolves();\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n await container.createDb({ dbName: \"test-db\", version: \"1.2.3\", manifest: { workspaceName: \"workspace-cloud-explicit-version\" } });\r\n\r\n expect(uploadDb.calledOnce).to.be.true;\r\n expect(uploadDb.firstCall.args[1].dbName).to.equal(\"test-db:1.2.3\");\r\n });\r\n\r\n it(\"cloud createDb defaults omitted version to 0.0.0\", async () => {\r\n const containerId = \"workspace-cloud-default-version\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\r\n const uploadDb = sinon.stub(CloudSqlite, \"uploadDb\").resolves();\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-cloud-default-version\" } });\r\n\r\n expect(uploadDb.calledOnce).to.be.true;\r\n expect(uploadDb.firstCall.args[1].dbName).to.equal(\"test-db:0.0.0\");\r\n });\r\n });\r\n\r\n\r\n describe(\"getContainerAsync token resolution\", () => {\r\n afterEach(() => sinon.restore());\r\n\r\n it(\"preserves an explicitly-provided accessToken\", async () => {\r\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").rejects(new Error(\"should not be called\"));\r\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\r\n return { fromProps: args } as WorkspaceContainer;\r\n });\r\n const props: WorkspaceContainerProps = {\r\n containerId: \"explicit-token-test\",\r\n baseUri: \"https://some-cloud-uri\",\r\n storageType: \"azure\",\r\n accessToken: \"my-explicit-token\",\r\n };\r\n\r\n const container = await workspace.getContainerAsync(props);\r\n\r\n expect(requestTokenStub.called).to.be.false;\r\n expect(getContainerStub.calledOnce).to.be.true;\r\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"my-explicit-token\");\r\n expect(container.fromProps.accessToken).to.equal(\"my-explicit-token\");\r\n });\r\n\r\n it(\"uses empty token for local containers with empty baseUri\", async () => {\r\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").rejects(new Error(\"should not be called\"));\r\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\r\n return { fromProps: args } as WorkspaceContainer;\r\n });\r\n const props: WorkspaceContainerProps = {\r\n containerId: \"local-token-test\",\r\n baseUri: \"\",\r\n storageType: \"azure\",\r\n };\r\n\r\n const container = await workspace.getContainerAsync(props);\r\n expect(requestTokenStub.called).to.be.false;\r\n expect(getContainerStub.calledOnce).to.be.true;\r\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"\");\r\n expect(container.fromProps.accessToken).to.equal(\"\");\r\n });\r\n\r\n it(\"calls requestToken when no accessToken is provided for a cloud container\", async () => {\r\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").resolves(\"resolved-token\");\r\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\r\n return { fromProps: args } as WorkspaceContainer;\r\n });\r\n const props: WorkspaceContainerProps = {\r\n containerId: \"cloud-no-token-test\",\r\n baseUri: \"https://some-cloud-uri\",\r\n storageType: \"azure\",\r\n };\r\n\r\n const container = await workspace.getContainerAsync(props);\r\n expect(requestTokenStub.calledOnce).to.be.true;\r\n expect(getContainerStub.calledOnce).to.be.true;\r\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"resolved-token\");\r\n expect(container.fromProps.accessToken).to.equal(\"resolved-token\");\r\n });\r\n });\r\n\r\n describe(\"findContainers\", () => {\r\n const testContainerId = \"mock-workspace-container-id\";\r\n const testITwinId = \"mock-itwin-id\";\r\n const testIModelId = \"mock-imodel-id\";\r\n let savedService: BlobContainer.ContainerService | undefined;\r\n\r\n function createMockService(containers: BlobContainer.MetadataResponse[]): BlobContainer.ContainerService {\r\n return {\r\n create: async () => ({ containerId: testContainerId, baseUri: \"https://mock.blob.core/\", provider: \"azure\" as const }),\r\n delete: async () => { },\r\n queryScope: async () => ({ iTwinId: testITwinId }),\r\n queryMetadata: async () => ({ containerType: \"workspace\", label: \"mock\" }),\r\n queryContainersMetadata: async (_userToken, args) => {\r\n return containers.filter((c) =>\r\n (args.containerType === undefined || c.containerType === args.containerType) &&\r\n (args.iTwinId === testITwinId || args.iTwinId === undefined),\r\n );\r\n },\r\n updateJson: async () => { },\r\n requestToken: async (_props) => ({\r\n token: \"\",\r\n scope: { iTwinId: testITwinId },\r\n provider: \"azure\" as const,\r\n expiration: new Date(Date.now() + 3600000),\r\n metadata: { containerType: \"workspace\", label: \"mock\" },\r\n baseUri: \"\",\r\n }),\r\n };\r\n }\r\n\r\n before(() => {\r\n savedService = BlobContainer.service;\r\n });\r\n\r\n afterEach(() => {\r\n BlobContainer.service = savedService;\r\n });\r\n\r\n it(\"finds containers by iTwinId\", async () => {\r\n BlobContainer.service = createMockService([\r\n { containerId: testContainerId, containerType: \"workspace\", label: \"Test Workspace\" },\r\n ]);\r\n\r\n const containers = await editor.findContainers({ iTwinId: testITwinId });\r\n expect(containers).to.have.length(1);\r\n expect(containers[0].fromProps.containerId).to.equal(testContainerId);\r\n });\r\n\r\n it(\"finds a container by iTwinId and iModelId\", async () => {\r\n BlobContainer.service = createMockService([\r\n { containerId: \"imodel-scoped-container\", containerType: \"workspace\", label: \"iModel Workspace\" },\r\n ]);\r\n\r\n const containers = await editor.findContainers({ iTwinId: testITwinId, iModelId: testIModelId });\r\n expect(containers).to.have.length(1);\r\n expect(containers[0].fromProps.containerId).to.equal(\"imodel-scoped-container\");\r\n });\r\n\r\n it(\"returns empty array when no workspace containers are found\", async () => {\r\n BlobContainer.service = createMockService([]);\r\n\r\n const containers = await editor.findContainers({ iTwinId: \"nonexistent-itwin\" });\r\n expect(containers).to.have.length(0);\r\n });\r\n\r\n it(\"throws when BlobContainer.service is not available\", async () => {\r\n BlobContainer.service = undefined;\r\n\r\n await expect(editor.findContainers({ iTwinId: testITwinId }))\r\n .to.be.rejectedWith(/BlobContainer.service is not available/);\r\n });\r\n });\r\n\r\n});\r\n"]}
1
+ {"version":3,"file":"Workspace.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/Workspace.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport * as fs from \"fs-extra\";\r\nimport { extname } from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { SettingsPriority } from \"../../workspace/Settings\";\r\nimport { settingsWorkspaceDbName } from \"../../workspace/SettingsDb\";\r\nimport { Workspace, WorkspaceContainer, WorkspaceContainerProps, WorkspaceDbLoadError, WorkspaceDbManifest, WorkspaceDbProps } from \"../../workspace/Workspace\";\r\nimport { EditableWorkspaceDb, WorkspaceEditor } from \"../../workspace/WorkspaceEditor\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { validateWorkspaceContainerId } from \"../../internal/workspace/WorkspaceImpl\";\r\nimport { _nativeDb } from \"../../internal/Symbols\";\r\nimport { CloudSqlite } from \"../../CloudSqlite\";\r\nimport { BlobContainer } from \"../../BlobContainerService\";\r\n\r\ndescribe(\"WorkspaceFile\", () => {\r\n\r\n let editor: WorkspaceEditor;\r\n let workspace: Workspace;\r\n\r\n before(() => {\r\n editor = WorkspaceEditor.construct();\r\n workspace = editor.workspace;\r\n });\r\n after(() => {\r\n editor.close();\r\n });\r\n\r\n async function makeEditableDb(props: WorkspaceDbProps & WorkspaceContainerProps, manifest: WorkspaceDbManifest): Promise<EditableWorkspaceDb> {\r\n const container = editor.getContainer({ ...props, accessToken: \"\" });\r\n const wsFile = await container.createDb({ ...props, manifest });\r\n wsFile.open();\r\n return wsFile;\r\n }\r\n\r\n function compareFiles(file1: string, file2: string) {\r\n expect(fs.lstatSync(file1).size).equal(fs.lstatSync(file2).size);\r\n expect(fs.readFileSync(file1)).to.deep.equal(fs.readFileSync(file2));\r\n }\r\n\r\n it(\"WorkspaceContainer names\", () => {\r\n const expectBadName = (names: string[]) => {\r\n names.forEach((containerId) => {\r\n expect(() => validateWorkspaceContainerId(containerId), containerId).to.throw(\"containerId\");\r\n });\r\n };\r\n\r\n expectBadName([\r\n \"\",\r\n \" \",\r\n \"12\", // too short\r\n \"a\\\\b\",\r\n `a\"b`,\r\n \"a:b\",\r\n \"a.b\",\r\n \"a?b\",\r\n \"a*b\",\r\n \"a|b\",\r\n \"123--4\",\r\n \"Abc\",\r\n \"return\\r\",\r\n \"newline\\n\",\r\n \"a\".repeat(64), // too long\r\n \"-leading-dash\",\r\n \"trailing-dash-\"]);\r\n\r\n validateWorkspaceContainerId(Guid.createValue()); // guids should be valid\r\n });\r\n\r\n it(\"WorkspaceDbNames\", () => {\r\n const expectBadName = (names: string[]) => {\r\n names.forEach((dbName) => {\r\n expect(() => CloudSqlite.validateDbName(dbName)).to.throw(\"dbName\");\r\n });\r\n };\r\n\r\n expectBadName([\r\n \"\",\r\n \" \",\r\n \"1/2\",\r\n \"a\\\\b\",\r\n `a\"b`,\r\n \"base:1.2.3\",\r\n \"a:b\",\r\n \"a.b\",\r\n \"a?b\",\r\n \"a*b\",\r\n \"a|b\",\r\n \"con\",\r\n \"prn\",\r\n \"return\\r\",\r\n \"newline\\n\",\r\n \"a\".repeat(256), // too long\r\n \" leading space\",\r\n \"trailing space \",\r\n \"per.iod\",\r\n \"hash#tag\",\r\n \"back`tick\",\r\n \"single'quote\",\r\n ]);\r\n\r\n CloudSqlite.validateDbName(Guid.createValue()); // guids should be valid\r\n });\r\n\r\n it(\"WorkspaceDb version fallback\", () => {\r\n expect(CloudSqlite.validateDbVersion(\"\")).equals(\"0.0.0\");\r\n expect(CloudSqlite.makeSemverName(\"db1\", \"\")).equals(\"db1:0.0.0\");\r\n expect(() => CloudSqlite.validateDbVersion(\" \")).to.throw(\"invalid version specification\");\r\n });\r\n\r\n it(\"create new WorkspaceDb\", async () => {\r\n const manifest: WorkspaceDbManifest = { workspaceName: \"resources for acme users\", contactName: \"contact me\" };\r\n const wsFile = await makeEditableDb({ containerId: \"acme-engineering-inc-2\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, manifest);\r\n const inFile = IModelTestUtils.resolveAssetFile(\"test.setting.json5\");\r\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\r\n let blobVal = new Uint8Array(testRange.toFloat64Array().buffer);\r\n let strVal = \"this is test1\";\r\n const strRscName = \"string-resource/1\";\r\n const blobRscName = \"blob.resource:1\";\r\n const fileRscName = \"settings files/my settings/a.json5\";\r\n\r\n let testManifest = wsFile.manifest;\r\n expect(testManifest.workspaceName).equals(manifest.workspaceName);\r\n expect(testManifest.contactName).equals(manifest.contactName);\r\n\r\n wsFile.updateManifest({ ...testManifest, contactName: \"new contact\" });\r\n testManifest = wsFile.manifest;\r\n expect(testManifest.workspaceName).equals(manifest.workspaceName);\r\n expect(testManifest.contactName).equals(\"new contact\");\r\n\r\n expect(() => wsFile.addFile(fileRscName, \"bad file name\")).to.throw(\"no such file\");\r\n expect(() => wsFile.updateFile(fileRscName, inFile)).to.throw(\"error replacing\");\r\n expect(() => wsFile.removeFile(fileRscName)).to.throw(\"does not exist\");\r\n\r\n wsFile.addBlob(blobRscName, blobVal);\r\n wsFile.addString(strRscName, strVal);\r\n expect(wsFile.getString(strRscName)).equals(strVal);\r\n expect(wsFile.getBlob(blobRscName)).to.deep.equal(blobVal);\r\n strVal = \"updated string\";\r\n blobVal = Uint8Array.from([0, 1, 2, 3]);\r\n wsFile.updateString(strRscName, strVal);\r\n wsFile.updateBlob(blobRscName, blobVal);\r\n expect(wsFile.getString(strRscName)).equals(strVal);\r\n expect(wsFile.getBlob(blobRscName)).to.deep.equal(blobVal);\r\n\r\n wsFile.removeBlob(blobRscName);\r\n wsFile.removeString(strRscName);\r\n expect(wsFile.getString(strRscName)).to.be.undefined;\r\n expect(wsFile.getBlob(blobRscName)).to.be.undefined;\r\n\r\n wsFile.addFile(fileRscName, inFile);\r\n const writeFile = sinon.spy(wsFile.sqliteDb[_nativeDb], \"extractEmbeddedFile\");\r\n expect(writeFile.callCount).eq(0);\r\n const outFile = wsFile.getFile(fileRscName)!;\r\n expect(writeFile.callCount).eq(1);\r\n expect(extname(outFile)).equals(\".json5\");\r\n compareFiles(inFile, outFile);\r\n\r\n let outFile2 = wsFile.getFile(fileRscName)!;\r\n expect(writeFile.callCount).eq(1);\r\n expect(outFile).eq(outFile2);\r\n\r\n const inFile2 = IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\");\r\n wsFile.updateFile(fileRscName, inFile2);\r\n outFile2 = wsFile.getFile(fileRscName)!;\r\n expect(writeFile.callCount).eq(2);\r\n expect(outFile).eq(outFile2);\r\n compareFiles(inFile2, outFile);\r\n });\r\n\r\n it(\"load workspace settings\", async () => {\r\n const settingsFile = IModelTestUtils.resolveAssetFile(\"test.setting.json5\");\r\n const defaultDb = await makeEditableDb({ containerId: \"default\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, { workspaceName: \"default resources\", contactName: \"contact 123\" });\r\n defaultDb.addString(\"default-settings\", fs.readFileSync(settingsFile, \"utf-8\"));\r\n defaultDb.close();\r\n\r\n const settings = workspace.settings;\r\n await workspace.loadSettingsDictionary(\r\n { dbName: \"db1\", containerId: \"default\", baseUri: \"\", storageType: \"azure\", resourceName: \"default-settings\", priority: SettingsPriority.defaults });\r\n expect(settings.getSetting(\"editor/renderWhitespace\")).equals(\"selection\");\r\n\r\n const workspaceName = \"all fonts workspace\";\r\n const schemaFile = IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\");\r\n const fontsDb = await makeEditableDb({ containerId: \"fonts\", dbName: \"fonts\", baseUri: \"\", storageType: \"azure\" }, { workspaceName, contactName: \"font guy\" });\r\n\r\n fontsDb.addFile(\"Helvetica.ttf\", schemaFile, \"ttf\");\r\n fontsDb.close();\r\n });\r\n\r\n it(\"settingsWorkspaceDbName discovers all string resources as dictionaries\", async () => {\r\n const containerProps = { containerId: \"load-all-test\", baseUri: \"\", storageType: \"azure\" as const };\r\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all workspace\" });\r\n db.addString(\"dict-a\", JSON.stringify({ \"editor/renderWhitespace\": \"all\" }));\r\n db.addString(\"dict-b\", JSON.stringify({ \"editor/fontSize\": 14 }));\r\n db.close();\r\n\r\n\r\n const settings = workspace.settings;\r\n await workspace.loadSettingsDictionary({\r\n ...containerProps,\r\n priority: SettingsPriority.iTwin,\r\n dbName: settingsWorkspaceDbName,\r\n });\r\n expect(settings.getSetting(\"editor/renderWhitespace\")).equals(\"all\");\r\n expect(settings.getSetting(\"editor/fontSize\")).equals(14);\r\n });\r\n\r\n it(\"settingsWorkspaceDbName loads resourceName last when set\", async () => {\r\n const containerProps = { containerId: \"load-all-ignore-rsc\", baseUri: \"\", storageType: \"azure\" as const };\r\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all-priority\" });\r\n db.addString(\"first\", JSON.stringify({ \"editor/tabSize\": 2, \"editor/shared\": \"first\" }));\r\n db.addString(\"second\", JSON.stringify({ \"editor/wordWrap\": \"on\", \"editor/shared\": \"second\" }));\r\n db.close();\r\n\r\n const settings = workspace.settings;\r\n await workspace.loadSettingsDictionary({\r\n ...containerProps,\r\n priority: SettingsPriority.defaults,\r\n dbName: settingsWorkspaceDbName,\r\n resourceName: \"second\",\r\n });\r\n // All dictionaries are loaded, with resourceName loaded last.\r\n expect(settings.getSetting(\"editor/tabSize\")).equals(2);\r\n expect(settings.getSetting(\"editor/wordWrap\")).equals(\"on\");\r\n expect(settings.getSetting(\"editor/shared\")).equals(\"second\");\r\n });\r\n\r\n it(\"settingsWorkspaceDbName continues loading sibling dictionaries after a resource fails\", async () => {\r\n const containerProps = { containerId: \"load-all-continue-on-error\", baseUri: \"\", storageType: \"azure\" as const };\r\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all-continue-on-error\" });\r\n db.addString(\"dict-valid\", JSON.stringify({ \"editor/continueAfterError\": true }));\r\n db.addString(\"dict-invalid\", \"not valid json\");\r\n db.close();\r\n\r\n const problems: WorkspaceDbLoadError[] = [];\r\n await workspace.loadSettingsDictionary({\r\n ...containerProps,\r\n priority: SettingsPriority.defaults,\r\n dbName: settingsWorkspaceDbName,\r\n // Force this valid resource to be evaluated last.\r\n resourceName: \"dict-valid\",\r\n }, problems);\r\n\r\n expect(workspace.settings.getSetting(\"editor/continueAfterError\")).to.equal(true);\r\n expect(problems.length).to.equal(1);\r\n });\r\n\r\n\r\n\r\n describe(\"workspace db version cache key\", () => {\r\n afterEach(() => sinon.restore());\r\n\r\n function getContainer(containerId: string, props?: Partial<WorkspaceContainerProps>) {\r\n return editor.getContainer({ containerId, baseUri: \"\", storageType: \"azure\", accessToken: \"\", ...props });\r\n }\r\n\r\n function createFakeCloudContainer(containerId: string): CloudSqlite.CloudContainer {\r\n return {\r\n connect: () => { },\r\n disconnect: () => { },\r\n checkForChanges: () => { },\r\n queryDatabase: () => undefined,\r\n queryDatabases: () => [],\r\n acquireWriteLock: () => { },\r\n releaseWriteLock: () => { },\r\n abandonChanges: () => { },\r\n containerId,\r\n baseUri: \"https://example.invalid\",\r\n storageType: \"azure\",\r\n isPublic: false,\r\n } as unknown as CloudSqlite.CloudContainer;\r\n }\r\n\r\n function stubCloudLookup(containerId: string, resolveVersion: (props: WorkspaceDbProps) => string) {\r\n sinon.stub(CloudSqlite, \"createCloudContainer\").returns(createFakeCloudContainer(containerId));\r\n sinon.stub(CloudSqlite, \"querySemverMatch\").callsFake((props) => CloudSqlite.makeSemverName(props.dbName, resolveVersion(props)));\r\n sinon.stub(CloudSqlite, \"isSemverEditable\").returns(true);\r\n }\r\n\r\n it(\"local getWorkspaceDb ignores version selectors for cache identity\", async () => {\r\n const container = getContainer(\"workspace-cache-local\");\r\n await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-cache-local\" } });\r\n\r\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\" });\r\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\", includePrerelease: true });\r\n expect(db1).to.equal(db2);\r\n });\r\n\r\n it(\"local createDb with omitted dbName matches an explicit default-name lookup\", async () => {\r\n const container = getContainer(\"workspace-cache-local-default-name\");\r\n const db1 = await container.createDb({ manifest: { workspaceName: \"workspace-cache-local-default-name\" } });\r\n\r\n const db2 = container.getEditableDb({ dbName: \"workspace-db\" });\r\n expect(db1).to.equal(db2);\r\n });\r\n\r\n it(\"cloud getWorkspaceDb reuses the same instance for semver-equivalent selectors\", () => {\r\n const containerId = \"workspace-cache-cloud-equivalent\";\r\n stubCloudLookup(containerId, (props) => props.version === \"1\" ? \"1.0.0\" : (props.version ?? \"1.0.0\"));\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1\" });\r\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\" });\r\n expect(db1).to.equal(db2);\r\n });\r\n\r\n it(\"cloud getWorkspaceDb returns different instances for different resolved versions\", () => {\r\n const containerId = \"workspace-cache-cloud-different\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"1.0.0\");\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\" });\r\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"2.0.0\" });\r\n expect(db1).to.not.equal(db2);\r\n });\r\n\r\n it(\"cloud getWorkspaceDb respects includePrerelease only when it resolves differently\", () => {\r\n const containerId = \"workspace-cache-cloud-prerelease\";\r\n stubCloudLookup(containerId, (props) => props.includePrerelease ? \"1.1.0-beta.1\" : \"1.0.0\");\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const stable = container.getWorkspaceDb({ dbName: \"test-db\", version: \"*\" });\r\n const prerelease = container.getWorkspaceDb({ dbName: \"test-db\", version: \"*\", includePrerelease: true });\r\n expect(stable).to.not.equal(prerelease);\r\n });\r\n\r\n it(\"createDb with explicit version returns the cached editable db for that resolved version\", async () => {\r\n const containerId = \"workspace-create-version\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\r\n sinon.stub(CloudSqlite, \"uploadDb\").resolves();\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const db = await container.createDb({ dbName: \"test-db\", version: \"1.0.0\", manifest: { workspaceName: \"workspace-create-version\" } });\r\n\r\n const dbAgain = container.getEditableDb({ dbName: \"test-db\", version: \"1.0.0\" });\r\n expect(db).to.equal(dbAgain);\r\n });\r\n\r\n it(\"createDb without an explicit version returns the cached editable db for version 0.0.0\", async () => {\r\n const containerId = \"workspace-create-default-version\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\r\n sinon.stub(CloudSqlite, \"uploadDb\").resolves();\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n const db = await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-create-default-version\" } });\r\n\r\n const dbAgain = container.getEditableDb({ dbName: \"test-db\", version: \"0.0.0\" });\r\n expect(db).to.equal(dbAgain);\r\n });\r\n\r\n it(\"cloud createDb uploads using the requested version\", async () => {\r\n const containerId = \"workspace-cloud-explicit-version\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\r\n const uploadDb = sinon.stub(CloudSqlite, \"uploadDb\").resolves();\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n await container.createDb({ dbName: \"test-db\", version: \"1.2.3\", manifest: { workspaceName: \"workspace-cloud-explicit-version\" } });\r\n\r\n expect(uploadDb.calledOnce).to.be.true;\r\n expect(uploadDb.firstCall.args[1].dbName).to.equal(\"test-db:1.2.3\");\r\n });\r\n\r\n it(\"cloud createDb defaults omitted version to 0.0.0\", async () => {\r\n const containerId = \"workspace-cloud-default-version\";\r\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\r\n const uploadDb = sinon.stub(CloudSqlite, \"uploadDb\").resolves();\r\n\r\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\r\n await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-cloud-default-version\" } });\r\n\r\n expect(uploadDb.calledOnce).to.be.true;\r\n expect(uploadDb.firstCall.args[1].dbName).to.equal(\"test-db:0.0.0\");\r\n });\r\n });\r\n\r\n\r\n describe(\"getContainerAsync token resolution\", () => {\r\n afterEach(() => sinon.restore());\r\n\r\n it(\"preserves an explicitly-provided accessToken\", async () => {\r\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").rejects(new Error(\"should not be called\"));\r\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\r\n return { fromProps: args } as WorkspaceContainer;\r\n });\r\n const props: WorkspaceContainerProps = {\r\n containerId: \"explicit-token-test\",\r\n baseUri: \"https://some-cloud-uri\",\r\n storageType: \"azure\",\r\n accessToken: \"my-explicit-token\",\r\n };\r\n\r\n const container = await workspace.getContainerAsync(props);\r\n\r\n expect(requestTokenStub.called).to.be.false;\r\n expect(getContainerStub.calledOnce).to.be.true;\r\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"my-explicit-token\");\r\n expect(container.fromProps.accessToken).to.equal(\"my-explicit-token\");\r\n });\r\n\r\n it(\"uses empty token for local containers with empty baseUri\", async () => {\r\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").rejects(new Error(\"should not be called\"));\r\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\r\n return { fromProps: args } as WorkspaceContainer;\r\n });\r\n const props: WorkspaceContainerProps = {\r\n containerId: \"local-token-test\",\r\n baseUri: \"\",\r\n storageType: \"azure\",\r\n };\r\n\r\n const container = await workspace.getContainerAsync(props);\r\n expect(requestTokenStub.called).to.be.false;\r\n expect(getContainerStub.calledOnce).to.be.true;\r\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"\");\r\n expect(container.fromProps.accessToken).to.equal(\"\");\r\n });\r\n\r\n it(\"calls requestToken when no accessToken is provided for a cloud container\", async () => {\r\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").resolves(\"resolved-token\");\r\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\r\n return { fromProps: args } as WorkspaceContainer;\r\n });\r\n const props: WorkspaceContainerProps = {\r\n containerId: \"cloud-no-token-test\",\r\n baseUri: \"https://some-cloud-uri\",\r\n storageType: \"azure\",\r\n };\r\n\r\n const container = await workspace.getContainerAsync(props);\r\n expect(requestTokenStub.calledOnce).to.be.true;\r\n expect(getContainerStub.calledOnce).to.be.true;\r\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"resolved-token\");\r\n expect(container.fromProps.accessToken).to.equal(\"resolved-token\");\r\n });\r\n });\r\n\r\n describe(\"findContainers\", () => {\r\n const testContainerId = \"mock-workspace-container-id\";\r\n const testITwinId = \"mock-itwin-id\";\r\n const testIModelId = \"mock-imodel-id\";\r\n let savedService: BlobContainer.ContainerService | undefined;\r\n\r\n function createMockService(containers: BlobContainer.MetadataResponse[]): BlobContainer.ContainerService {\r\n return {\r\n create: async () => ({ containerId: testContainerId, baseUri: \"https://mock.blob.core/\", provider: \"azure\" as const }),\r\n delete: async () => { },\r\n queryScope: async () => ({ iTwinId: testITwinId }),\r\n queryMetadata: async () => ({ containerType: \"workspace\", label: \"mock\" }),\r\n queryContainersMetadata: async (_userToken, args) => {\r\n return containers.filter((c) =>\r\n (args.containerType === undefined || c.containerType === args.containerType) &&\r\n (args.iTwinId === testITwinId || args.iTwinId === undefined),\r\n );\r\n },\r\n updateJson: async () => { },\r\n requestToken: async (_props) => ({\r\n token: \"\",\r\n scope: { iTwinId: testITwinId },\r\n provider: \"azure\" as const,\r\n expiration: new Date(Date.now() + 3600000),\r\n metadata: { containerType: \"workspace\", label: \"mock\" },\r\n baseUri: \"\",\r\n }),\r\n };\r\n }\r\n\r\n before(() => {\r\n savedService = BlobContainer.service;\r\n });\r\n\r\n afterEach(() => {\r\n BlobContainer.service = savedService;\r\n });\r\n\r\n it(\"finds containers by iTwinId\", async () => {\r\n BlobContainer.service = createMockService([\r\n { containerId: testContainerId, containerType: \"workspace\", label: \"Test Workspace\" },\r\n ]);\r\n\r\n const containers = await editor.findContainers({ iTwinId: testITwinId });\r\n expect(containers).to.have.length(1);\r\n expect(containers[0].fromProps.containerId).to.equal(testContainerId);\r\n });\r\n\r\n it(\"finds a container by iTwinId and iModelId\", async () => {\r\n BlobContainer.service = createMockService([\r\n { containerId: \"imodel-scoped-container\", containerType: \"workspace\", label: \"iModel Workspace\" },\r\n ]);\r\n\r\n const containers = await editor.findContainers({ iTwinId: testITwinId, iModelId: testIModelId });\r\n expect(containers).to.have.length(1);\r\n expect(containers[0].fromProps.containerId).to.equal(\"imodel-scoped-container\");\r\n });\r\n\r\n it(\"returns empty array when no workspace containers are found\", async () => {\r\n BlobContainer.service = createMockService([]);\r\n\r\n const containers = await editor.findContainers({ iTwinId: \"nonexistent-itwin\" });\r\n expect(containers).to.have.length(0);\r\n });\r\n\r\n it(\"throws when BlobContainer.service is not available\", async () => {\r\n BlobContainer.service = undefined;\r\n\r\n await expect(editor.findContainers({ iTwinId: testITwinId }))\r\n .to.be.rejectedWith(/BlobContainer.service is not available/);\r\n });\r\n });\r\n\r\n});\r\n"]}
@@ -133,15 +133,16 @@ export interface SettingsDictionaryProps extends SettingsDictionarySource {
133
133
  * Like iModel-specific settings, any settings supplied by the iTwin will override those defined at the application level.
134
134
  *
135
135
  * Application settings are loaded into [[IModelHost.appWorkspace]] when the session begins (i.e., when [[IModelHost.startup]] is invoked), and unloaded when it ends (in [[IModelHost.shutdown]]).
136
- * They are read from [JSON5](https://json5.org/) files delivered with the application. The application should register any additional [[SettingsDictionary]]'s '(and their corresponding
137
- * [[SettingGroupSchema]]s) at this time.
136
+ * They are read from [JSON5](https://json5.org/) files delivered with the application. The application should register any additional [[SettingsDictionary]]s
137
+ * (and their corresponding [[SettingGroupSchema]]s) at this time.
138
138
  *
139
139
  * iModel-specific settings are stored in the iModel's property table and loaded into [[IModelDb.workspace]] when the iModel is first opened.
140
- * You can add and remove a [[SettingsDictionary]] from the property table using [[IModelDb.saveSettingDictionary]] and [[IModelDb.deleteSettingDictionary]].
140
+ * You can add and remove a [[SettingsDictionary]] from the property table using [[EditTxn.saveSettingDictionary]] and [[EditTxn.deleteSettingDictionary]].
141
+ * If you are migrating older code, [[IModelDb.saveSettingDictionary]] and [[IModelDb.deleteSettingDictionary]] are deprecated in favor of the [[EditTxn]] APIs.
141
142
  *
142
143
  * iTwin-specific settings are stored in a [[CloudSqliteContainer]] in the cloud.
143
144
  * When [[IModelHost.getITwinWorkspace]] is invoked, the container is accessed using the iTwinId and the settings are loaded into the returned [[Workspace]].
144
- * You can add and remove a [[SettingsDictionary]] from the container using [[Workspace.saveSettingsDictionary]] and [[Workspace.deleteSettingsDictionary]].
145
+ * You can add and remove a [[SettingsDictionary]] from the container using [[IModelHost.saveSettingDictionary]] and [[IModelHost.deleteSettingDictionary]].
145
146
  *
146
147
  * See the [learning article]($docs/learning/backend/Workspace) for a detailed overview and examples.
147
148
  *
@@ -178,6 +179,7 @@ export interface Settings {
178
179
  getDictionary(source: SettingsDictionarySource): SettingsDictionary | undefined;
179
180
  /** Add a new [[SettingsDictionary]] with the priority, name, and [[WorkspaceDb]] specified by `props` and setting values supplied by `settings`.
180
181
  * @note If a dictionary with the same name and [[WorkspaceDb]] already exists, it will be replaced.
182
+ * @note Values added via this method exist only for the current session. They are not persisted and will be lost when the host shuts down.
181
183
  * @see [[addFile]], [[addJson]], and [[addDirectory]] for convenient ways to add dictionaries from various sources.
182
184
  */
183
185
  addDictionary(props: SettingsDictionaryProps, settings: SettingsContainer): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.d.ts","sourceRoot":"","sources":["../../../src/workspace/Settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Settings.d.ts","sourceRoot":"","sources":["../../../src/workspace/Settings.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC;AAErC,YAAY;AACZ,yBAAiB,OAAO,CAAC;IACvB,2CAA2C;IAC3C,SAAgB,KAAK,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAOtD;IAED;;;;;;OAMG;IACH,SAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CA4ChF;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,YAAY;AACZ,yBAAiB,gBAAgB,CAAC;IAChC,yGAAyG;IAClG,MAAM,QAAQ,MAAM,CAAC;IAC5B,sDAAsD;IAC/C,MAAM,WAAW,MAAM,CAAC;IAC/B,6DAA6D;IACtD,MAAM,YAAY,MAAM,CAAC;IAChC,sDAAsD;IAC/C,MAAM,KAAK,MAAM,CAAC;IACzB,wDAAwD;IACjD,MAAM,MAAM,MAAM,CAAC;IAC1B,gDAAgD;IACzC,MAAM,MAAM,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAErC,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IAExC;;;;OAIG;IACH,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC;IAEvE;;;;;;OAMG;IACH,MAAM,IAAI,iBAAiB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,8LAA8L;IAC9L,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE,qIAAqI;IACrI,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,QAAQ;IACvB,gBAAgB;IAChB,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAErC,gBAAgB;IAChB,KAAK,IAAI,IAAI,CAAC;IAEd;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAErD,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAEhD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAEnE,+FAA+F;IAC/F,YAAY,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAExE;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpE,wFAAwF;IACxF,aAAa,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAEhF;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEjF,yDAAyD;IACzD,cAAc,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAEtD;;;;;;;;;OASG;IACH,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAEzF,0JAA0J;IAC1J,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,UAAU,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAEvH,0JAA0J;IAC1J,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3E;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAClE,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAE/E;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC;IACrE,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAElF;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAClE,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IAExD;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1E,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC;IAErE;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxF,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CAC7E"}