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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/lib/cjs/BlobContainerService.d.ts +2 -0
  3. package/lib/cjs/BlobContainerService.d.ts.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.d.ts +2 -1
  6. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  7. package/lib/cjs/BriefcaseManager.js +39 -9
  8. package/lib/cjs/BriefcaseManager.js.map +1 -1
  9. package/lib/cjs/ChangeUnifier.d.ts +82 -0
  10. package/lib/cjs/ChangeUnifier.d.ts.map +1 -0
  11. package/lib/cjs/ChangeUnifier.js +163 -0
  12. package/lib/cjs/ChangeUnifier.js.map +1 -0
  13. package/lib/cjs/ChangesetReader.d.ts +21 -2
  14. package/lib/cjs/ChangesetReader.d.ts.map +1 -1
  15. package/lib/cjs/ChangesetReader.js +37 -1
  16. package/lib/cjs/ChangesetReader.js.map +1 -1
  17. package/lib/cjs/CloudSqlite.d.ts +15 -0
  18. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  19. package/lib/cjs/CloudSqlite.js.map +1 -1
  20. package/lib/cjs/ECDb.d.ts +1 -0
  21. package/lib/cjs/ECDb.d.ts.map +1 -1
  22. package/lib/cjs/ECDb.js +4 -1
  23. package/lib/cjs/ECDb.js.map +1 -1
  24. package/lib/cjs/EditTxn.d.ts +61 -19
  25. package/lib/cjs/EditTxn.d.ts.map +1 -1
  26. package/lib/cjs/EditTxn.js +84 -29
  27. package/lib/cjs/EditTxn.js.map +1 -1
  28. package/lib/cjs/GeoCoordConfig.d.ts +1 -0
  29. package/lib/cjs/GeoCoordConfig.d.ts.map +1 -1
  30. package/lib/cjs/GeoCoordConfig.js +12 -8
  31. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  32. package/lib/cjs/IModelDb.d.ts +22 -9
  33. package/lib/cjs/IModelDb.d.ts.map +1 -1
  34. package/lib/cjs/IModelDb.js +54 -12
  35. package/lib/cjs/IModelDb.js.map +1 -1
  36. package/lib/cjs/NativeHost.d.ts.map +1 -1
  37. package/lib/cjs/NativeHost.js +5 -1
  38. package/lib/cjs/NativeHost.js.map +1 -1
  39. package/lib/cjs/Relationship.d.ts +28 -0
  40. package/lib/cjs/Relationship.d.ts.map +1 -1
  41. package/lib/cjs/Relationship.js +78 -0
  42. package/lib/cjs/Relationship.js.map +1 -1
  43. package/lib/cjs/SchemaSync.d.ts.map +1 -1
  44. package/lib/cjs/SchemaSync.js +1 -0
  45. package/lib/cjs/SchemaSync.js.map +1 -1
  46. package/lib/cjs/TxnManager.d.ts +126 -89
  47. package/lib/cjs/TxnManager.d.ts.map +1 -1
  48. package/lib/cjs/TxnManager.js +114 -76
  49. package/lib/cjs/TxnManager.js.map +1 -1
  50. package/lib/cjs/ViewStateHydrator.d.ts.map +1 -1
  51. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  52. package/lib/cjs/ViewStore.d.ts.map +1 -1
  53. package/lib/cjs/ViewStore.js +62 -19
  54. package/lib/cjs/ViewStore.js.map +1 -1
  55. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  56. package/lib/cjs/annotations/LeaderGeometry.js +3 -0
  57. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  58. package/lib/cjs/core-backend.d.ts +1 -0
  59. package/lib/cjs/core-backend.d.ts.map +1 -1
  60. package/lib/cjs/core-backend.js +1 -0
  61. package/lib/cjs/core-backend.js.map +1 -1
  62. package/lib/cjs/internal/BriefcaseUtils.d.ts +19 -0
  63. package/lib/cjs/internal/BriefcaseUtils.d.ts.map +1 -0
  64. package/lib/cjs/internal/BriefcaseUtils.js +65 -0
  65. package/lib/cjs/internal/BriefcaseUtils.js.map +1 -0
  66. package/lib/cjs/internal/QueryMetadataCache.d.ts +44 -0
  67. package/lib/cjs/internal/QueryMetadataCache.d.ts.map +1 -0
  68. package/lib/cjs/internal/QueryMetadataCache.js +107 -0
  69. package/lib/cjs/internal/QueryMetadataCache.js.map +1 -0
  70. package/lib/cjs/internal/Symbols.d.ts +9 -0
  71. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  72. package/lib/cjs/internal/Symbols.js +10 -1
  73. package/lib/cjs/internal/Symbols.js.map +1 -1
  74. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  75. package/lib/cjs/internal/workspace/WorkspaceImpl.js +20 -6
  76. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  77. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +6 -6
  78. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  79. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  80. package/lib/cjs/workspace/SettingsEditor.d.ts +4 -3
  81. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
  82. package/lib/cjs/workspace/SettingsEditor.js +7 -5
  83. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  84. package/lib/esm/BlobContainerService.d.ts +2 -0
  85. package/lib/esm/BlobContainerService.d.ts.map +1 -1
  86. package/lib/esm/BlobContainerService.js.map +1 -1
  87. package/lib/esm/BriefcaseManager.d.ts +2 -1
  88. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  89. package/lib/esm/BriefcaseManager.js +40 -10
  90. package/lib/esm/BriefcaseManager.js.map +1 -1
  91. package/lib/esm/ChangeUnifier.d.ts +82 -0
  92. package/lib/esm/ChangeUnifier.d.ts.map +1 -0
  93. package/lib/esm/ChangeUnifier.js +159 -0
  94. package/lib/esm/ChangeUnifier.js.map +1 -0
  95. package/lib/esm/ChangesetReader.d.ts +21 -2
  96. package/lib/esm/ChangesetReader.d.ts.map +1 -1
  97. package/lib/esm/ChangesetReader.js +38 -2
  98. package/lib/esm/ChangesetReader.js.map +1 -1
  99. package/lib/esm/CloudSqlite.d.ts +15 -0
  100. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  101. package/lib/esm/CloudSqlite.js.map +1 -1
  102. package/lib/esm/ECDb.d.ts +1 -0
  103. package/lib/esm/ECDb.d.ts.map +1 -1
  104. package/lib/esm/ECDb.js +4 -1
  105. package/lib/esm/ECDb.js.map +1 -1
  106. package/lib/esm/EditTxn.d.ts +61 -19
  107. package/lib/esm/EditTxn.d.ts.map +1 -1
  108. package/lib/esm/EditTxn.js +85 -30
  109. package/lib/esm/EditTxn.js.map +1 -1
  110. package/lib/esm/GeoCoordConfig.d.ts +1 -0
  111. package/lib/esm/GeoCoordConfig.d.ts.map +1 -1
  112. package/lib/esm/GeoCoordConfig.js +12 -8
  113. package/lib/esm/GeoCoordConfig.js.map +1 -1
  114. package/lib/esm/IModelDb.d.ts +22 -9
  115. package/lib/esm/IModelDb.d.ts.map +1 -1
  116. package/lib/esm/IModelDb.js +56 -14
  117. package/lib/esm/IModelDb.js.map +1 -1
  118. package/lib/esm/NativeHost.d.ts.map +1 -1
  119. package/lib/esm/NativeHost.js +5 -1
  120. package/lib/esm/NativeHost.js.map +1 -1
  121. package/lib/esm/Relationship.d.ts +28 -0
  122. package/lib/esm/Relationship.d.ts.map +1 -1
  123. package/lib/esm/Relationship.js +78 -0
  124. package/lib/esm/Relationship.js.map +1 -1
  125. package/lib/esm/SchemaSync.d.ts.map +1 -1
  126. package/lib/esm/SchemaSync.js +1 -0
  127. package/lib/esm/SchemaSync.js.map +1 -1
  128. package/lib/esm/TxnManager.d.ts +126 -89
  129. package/lib/esm/TxnManager.d.ts.map +1 -1
  130. package/lib/esm/TxnManager.js +116 -78
  131. package/lib/esm/TxnManager.js.map +1 -1
  132. package/lib/esm/ViewStateHydrator.d.ts.map +1 -1
  133. package/lib/esm/ViewStateHydrator.js.map +1 -1
  134. package/lib/esm/ViewStore.d.ts.map +1 -1
  135. package/lib/esm/ViewStore.js +62 -19
  136. package/lib/esm/ViewStore.js.map +1 -1
  137. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  138. package/lib/esm/annotations/LeaderGeometry.js +3 -0
  139. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  140. package/lib/esm/core-backend.d.ts +1 -0
  141. package/lib/esm/core-backend.d.ts.map +1 -1
  142. package/lib/esm/core-backend.js +1 -0
  143. package/lib/esm/core-backend.js.map +1 -1
  144. package/lib/esm/internal/BriefcaseUtils.d.ts +19 -0
  145. package/lib/esm/internal/BriefcaseUtils.d.ts.map +1 -0
  146. package/lib/esm/internal/BriefcaseUtils.js +61 -0
  147. package/lib/esm/internal/BriefcaseUtils.js.map +1 -0
  148. package/lib/esm/internal/QueryMetadataCache.d.ts +44 -0
  149. package/lib/esm/internal/QueryMetadataCache.d.ts.map +1 -0
  150. package/lib/esm/internal/QueryMetadataCache.js +103 -0
  151. package/lib/esm/internal/QueryMetadataCache.js.map +1 -0
  152. package/lib/esm/internal/Symbols.d.ts +9 -0
  153. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  154. package/lib/esm/internal/Symbols.js +9 -0
  155. package/lib/esm/internal/Symbols.js.map +1 -1
  156. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  157. package/lib/esm/internal/workspace/WorkspaceImpl.js +20 -6
  158. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  159. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +6 -6
  160. package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  161. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  162. package/lib/esm/test/annotations/LeaderGeometry.test.js +15 -1
  163. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  164. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +144 -30
  165. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  166. package/lib/esm/test/ecdb/QueryMetadataCache.test.d.ts +2 -0
  167. package/lib/esm/test/ecdb/QueryMetadataCache.test.d.ts.map +1 -0
  168. package/lib/esm/test/ecdb/QueryMetadataCache.test.js +630 -0
  169. package/lib/esm/test/ecdb/QueryMetadataCache.test.js.map +1 -0
  170. package/lib/esm/test/element/DeleteDefinitionElements.test.js +403 -249
  171. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  172. package/lib/esm/test/element/RelationshipBatchLookup.test.d.ts +2 -0
  173. package/lib/esm/test/element/RelationshipBatchLookup.test.d.ts.map +1 -0
  174. package/lib/esm/test/element/RelationshipBatchLookup.test.js +202 -0
  175. package/lib/esm/test/element/RelationshipBatchLookup.test.js.map +1 -0
  176. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +187 -1
  177. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  178. package/lib/esm/test/hubaccess/SchemaImportOrphanColumns.test.d.ts +2 -0
  179. package/lib/esm/test/hubaccess/SchemaImportOrphanColumns.test.d.ts.map +1 -0
  180. package/lib/esm/test/hubaccess/SchemaImportOrphanColumns.test.js +142 -0
  181. package/lib/esm/test/hubaccess/SchemaImportOrphanColumns.test.js.map +1 -0
  182. package/lib/esm/test/imodel/IModelGeolocation.test.js +8 -6
  183. package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -1
  184. package/lib/esm/test/imodel/IModelProps.test.d.ts +2 -0
  185. package/lib/esm/test/imodel/IModelProps.test.d.ts.map +1 -0
  186. package/lib/esm/test/imodel/IModelProps.test.js +411 -0
  187. package/lib/esm/test/imodel/IModelProps.test.js.map +1 -0
  188. package/lib/esm/test/schema/SchemaViewPropertyOverrides.test.d.ts +2 -0
  189. package/lib/esm/test/schema/SchemaViewPropertyOverrides.test.d.ts.map +1 -0
  190. package/lib/esm/test/schema/SchemaViewPropertyOverrides.test.js +240 -0
  191. package/lib/esm/test/schema/SchemaViewPropertyOverrides.test.js.map +1 -0
  192. package/lib/esm/test/schema/SchemaViewValidation.test.js +2 -8
  193. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  194. package/lib/esm/test/standalone/BriefcaseManagerDelete.test.d.ts +2 -0
  195. package/lib/esm/test/standalone/BriefcaseManagerDelete.test.d.ts.map +1 -0
  196. package/lib/esm/test/standalone/BriefcaseManagerDelete.test.js +159 -0
  197. package/lib/esm/test/standalone/BriefcaseManagerDelete.test.js.map +1 -0
  198. package/lib/esm/test/standalone/ChangeUnifier.test.d.ts +2 -0
  199. package/lib/esm/test/standalone/ChangeUnifier.test.d.ts.map +1 -0
  200. package/lib/esm/test/standalone/ChangeUnifier.test.js +732 -0
  201. package/lib/esm/test/standalone/ChangeUnifier.test.js.map +1 -0
  202. package/lib/esm/test/standalone/DeleteElements.test.js +962 -83
  203. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  204. package/lib/esm/test/standalone/EditTxn.test.js +72 -1
  205. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  206. package/lib/esm/test/standalone/GeoCoordConfig.test.d.ts +2 -0
  207. package/lib/esm/test/standalone/GeoCoordConfig.test.d.ts.map +1 -0
  208. package/lib/esm/test/standalone/GeoCoordConfig.test.js +158 -0
  209. package/lib/esm/test/standalone/GeoCoordConfig.test.js.map +1 -0
  210. package/lib/esm/test/standalone/ViewStoreDb.test.js +53 -0
  211. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  212. package/lib/esm/test/workspace/SettingsContainers.test.d.ts +2 -0
  213. package/lib/esm/test/workspace/SettingsContainers.test.d.ts.map +1 -0
  214. package/lib/esm/test/workspace/SettingsContainers.test.js +95 -0
  215. package/lib/esm/test/workspace/SettingsContainers.test.js.map +1 -0
  216. package/lib/esm/workspace/SettingsEditor.d.ts +4 -3
  217. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
  218. package/lib/esm/workspace/SettingsEditor.js +7 -5
  219. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  220. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"ViewStoreDb.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ViewStoreDb.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 { Suite } from \"mocha\";\r\nimport { join } from \"path\";\r\nimport { Guid, GuidString, Logger, LogLevel, OpenMode } from \"@itwin/core-bentley\";\r\nimport { ViewStore } from \"../../ViewStore\";\r\nimport { ThumbnailFormatProps } from \"@itwin/core-common\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\n\r\ndescribe(\"ViewStore\", function (this: Suite) {\r\n this.timeout(0);\r\n\r\n let vs1: ViewStore.ViewDb;\r\n\r\n before(async () => {\r\n Logger.setLevel(\"SQLite\", LogLevel.None); // we're expecting errors\r\n const dbName = join(KnownTestLocations.outputDir, \"viewStore.db\");\r\n ViewStore.ViewDb.createNewDb(dbName);\r\n vs1 = new ViewStore.ViewDb({ guidMap: {} as any });\r\n vs1.openDb(dbName, OpenMode.ReadWrite);\r\n });\r\n\r\n after(async () => {\r\n vs1.closeDb(true);\r\n Logger.setLevel(\"SQLite\", LogLevel.Error);\r\n });\r\n\r\n it(\"ViewDb\", async () => {\r\n const c1 = vs1.addCategorySelectorRow({ name: \"first cat\", json: \"cat1-json\" });\r\n const ds1 = vs1.addDisplayStyleRow({ name: \"first style\", json: \"style1-json\" });\r\n\r\n expect(vs1.getViewByNameSync({ name: \"view1\" })).to.be.undefined;\r\n const v1Id = vs1.addViewRow({ className: \"spatial\", name: \"view1\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n expect(v1Id).equals(1);\r\n\r\n const v1 = vs1.getViewByNameSync({ name: \"view1\" })!;\r\n expect(vs1.findViewIdByName({ name: \"view1\" })).equals(v1Id);\r\n expect(vs1.findViewIdByName({ name: \"/view1\" })).equals(v1Id);\r\n expect(v1.owner).equals(\"owner10\");\r\n expect(v1.className).equals(\"spatial\");\r\n expect(v1.groupId).equals(\"@1\");\r\n expect(v1.isPrivate).to.be.true;\r\n expect(v1.name).equals(\"view1\");\r\n await vs1.updateViewShared({ viewId: v1Id, isShared: true, owner: \"owner10\" });\r\n const v1Updated = vs1.getViewByNameSync({ name: \"view1\" })!;\r\n expect(v1Updated.isPrivate).to.be.false;\r\n\r\n const v1Id2 = vs1.addViewRow({ className: \"spatial\", name: \"v2\", json: \"json-v2\", owner: \"owner1\", groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n expect(v1Id2).equals(2);\r\n const v2 = vs1.getViewRow(v1Id2)!;\r\n expect(v2.name).equals(\"v2\");\r\n vs1.deleteViewRow(v1Id2);\r\n expect(vs1.findViewIdByName({ name: \"v2\", groupId: 1 })).equals(0);\r\n\r\n expect(() => vs1.addViewGroupRow({ name: \"\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \" \", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \"@bad\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \"bad/name\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \"^fd\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \"sd#fd\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewRow({ className: \"spatial\", name: \"@bad\", json: \"json-v2\", owner: \"owner1\", groupId: 1, categorySel: c1, displayStyle: ds1 })).to.throw(\"illegal view\");\r\n expect(() => vs1.addViewRow({ className: \"spatial\", name: \"bad/name\", json: \"json-v2\", owner: \"owner1\", groupId: 1, categorySel: c1, displayStyle: ds1 })).to.throw(\"illegal view\");\r\n\r\n const g1 = vs1.addViewGroupRow({ name: \"group1\", json: \"group1-json\" });\r\n const g2 = vs1.addViewGroupRow({ name: \"group2\", json: \"group2-json\" });\r\n const g3 = vs1.addViewGroupRow({ name: \"group 3\", parentId: g2, json: \"group3-json\" });\r\n const g4 = vs1.addViewGroupRow({ name: \"group4\", parentId: g3, json: \"group3-json\" });\r\n const v2Id = vs1.addViewRow({ className: \"spatial2\", name: \"view2\", json: \"json2\", groupId: g4, categorySel: c1, displayStyle: ds1 });\r\n expect(v2Id).equals(3);\r\n\r\n for (let i = 0; i < 100; i++)\r\n vs1.addViewRow({ className: \"spatial\", name: `test view ${i}`, json: `json${i}`, owner: \"owner1\", groupId: g2, categorySel: c1, displayStyle: ds1 });\r\n\r\n // duplicate name in a group should throw\r\n expect(() => vs1.addViewRow({ className: \"spatial3\", name: \"test view 0\", json: \"json-blah\", owner: \"owner1\", groupId: g2, categorySel: c1, displayStyle: ds1 })).to.throw(\"UNIQUE\");\r\n // allow the same name in different groups\r\n const v103 = vs1.addViewRow({ className: \"spatial3\", name: \"test view 0\", json: \"json-blah\", owner: \"owner1\", groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n const v104 = vs1.addViewRow({ className: \"spatial3\", name: \"another view\", json: \"json-blah\", owner: \"owner10\", groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n\r\n const g3Id = vs1.getViewGroupByName(\"group 3\", g2);\r\n\r\n expect(g3Id).equals(g3);\r\n expect(vs1.findViewGroup(\"group1\")).equals(g1);\r\n expect(vs1.findViewGroup(\"group 3\")).equals(0); // not in the root group\r\n expect(vs1.findViewGroup(\"/group2/group 3/\")).equals(g3);\r\n expect(vs1.findViewGroup(\"/group2/group 3/group4\")).equals(g4);\r\n expect(vs1.findViewGroup(\"group2/group 3/group4\")).equals(g4);\r\n expect(vs1.findViewGroup(ViewStore.fromRowId(g4))).equals(g4);\r\n expect(vs1.findViewGroup(\"group2/group 3/group4/blah\")).equals(0);\r\n expect(vs1.findViewGroup(\"group2/blah/group4\")).equals(0);\r\n expect(vs1.findViewGroup(\"blah\")).equals(0);\r\n expect(vs1.findViewGroup(\"/\")).equals(1);\r\n expect(vs1.findViewGroup(\"\")).equals(1);\r\n\r\n expect(vs1.getViewByNameSync({ name: \"view2\", groupId: g4 })?.groupId).equals(ViewStore.fromRowId(g4));\r\n expect(vs1.findViewIdByName({ name: \"/group2/group 3/group4/view2\" })).equals(v2Id);\r\n expect(vs1.findViewIdByName({ name: \"group2/group 3/group4/view2\" })).equals(v2Id);\r\n expect(vs1.findViewIdByName({ name: `${ViewStore.fromRowId(g4)}/view2` })).equals(v2Id);\r\n expect(vs1.findViewIdByName({ name: \"group2/group 3/group4/not there\" })).equals(0);\r\n expect(vs1.findViewIdByName({ name: \"group2/test view 3\" })).not.equal(0);\r\n\r\n const group3 = vs1.getViewGroup(g3Id)!;\r\n expect(group3.name).equals(\"group 3\");\r\n expect(group3.parentId).equals(g2);\r\n expect(group3.json).equals(\"group3-json\");\r\n await vs1.renameViewGroup({ groupId: g3Id, name: \"group3-updated\" });\r\n vs1.updateViewGroupJson(g3Id, \"group3-json-updated\");\r\n const g3Updated = vs1.getViewGroup(g3Id)!;\r\n expect(g3Updated.name).equals(\"group3-updated\");\r\n expect(g3Updated.json).equals(\"group3-json-updated\");\r\n\r\n expect(vs1.queryViewsSync({ group: \"group2\", classNames: [\"spatial\"] }).length).equals(100);\r\n expect(vs1.queryViewsSync({ group: ViewStore.fromRowId(g4), classNames: [\"spatial2\"] }).length).equals(1);\r\n expect(vs1.queryViewsSync({ classNames: [\"spatial\", \"spatial3\", \"blah\"] }).length).equals(3);\r\n expect(vs1.queryViewsSync({ classNames: [] }).length).equals(0);\r\n expect(vs1.queryViewsSync({ classNames: [\"blah\"] }).length).equals(0);\r\n expect((await vs1.findViewsByOwner({ owner: \"owner1\" })).length).equals(101);\r\n\r\n const thumbnail1 = new Uint8Array([2, 33, 23, 0, 202]);\r\n const format1: ThumbnailFormatProps = { width: 100, height: 200, format: \"jpeg\" };\r\n const format2: ThumbnailFormatProps = { width: 10, height: 20, format: \"png\" };\r\n vs1.addOrReplaceThumbnailRow({ data: thumbnail1, viewId: v1Id, format: format1 });\r\n vs1.addOrReplaceThumbnailRow({ data: thumbnail1, viewId: v2Id, format: format2 });\r\n const thumbnail2 = vs1.getThumbnailRow(v2Id);\r\n expect(thumbnail2?.data).deep.equals(thumbnail1);\r\n expect(thumbnail2?.format).deep.equals(format2);\r\n const thumb3 = new Uint8Array([2, 33, 23, 0, 203]);\r\n vs1.addOrReplaceThumbnailRow({ data: thumb3, viewId: v2Id, format: format2 });\r\n const thumbnail3 = vs1.getThumbnailRow(v2Id);\r\n expect(thumbnail3?.data).deep.equals(thumb3);\r\n vs1.addOrReplaceThumbnailRow({ data: thumbnail1, viewId: 33, format: format1 });\r\n expect(vs1.getThumbnailRow(33)).to.not.be.undefined;\r\n vs1.deleteThumbnailSync(ViewStore.fromRowId(33));\r\n expect(vs1.getThumbnailRow(33)).to.be.undefined;\r\n\r\n await vs1.deleteViewGroup({ name: \"group1\" });\r\n expect(vs1.getViewByNameSync({ name: \"view2\", groupId: g1 })).to.be.undefined;\r\n\r\n const cat01 = vs1.addCategorySelectorRow({ name: \"cat1\", json: \"cat1-json\" });\r\n vs1.addCategorySelectorRow({ name: \"cat2\", json: \"cat2-json\" });\r\n const cat1Id = vs1.findCategorySelectorByName(\"cat1\");\r\n expect(cat1Id).equals(cat01);\r\n let cat1 = vs1.getCategorySelectorRow(cat1Id)!;\r\n expect(cat1.name).equals(\"cat1\");\r\n expect(cat1.json).equals(\"cat1-json\");\r\n await vs1.updateCategorySelectorJson(cat1Id, \"cat1-json-updated\");// eslint-disable-line @typescript-eslint/await-thenable\r\n cat1 = vs1.getCategorySelectorRow(cat1Id)!;\r\n expect(cat1.json).equals(\"cat1-json-updated\");\r\n\r\n vs1.deleteCategorySelectorSync(cat1Id);\r\n expect(vs1.findCategorySelectorByName(\"cat1\")).equals(0);\r\n\r\n const ds01 = vs1.addDisplayStyleRow({ name: \"style1\", json: \"style1-json\" });\r\n vs1.addDisplayStyleRow({ name: \"style2\", json: \"style2-json\" });\r\n const style1Id = vs1.findDisplayStyleByName(\"style1\");\r\n expect(style1Id).equals(ds01);\r\n const style1 = vs1.getDisplayStyleRow(style1Id)!;\r\n expect(style1.name).equals(\"style1\");\r\n expect(style1.json).equals(\"style1-json\");\r\n await vs1.renameDisplayStyle({ id: style1Id, name: \"style1-updated\" });\r\n const style1UpdatedNameId = vs1.findDisplayStyleByName(\"style1-updated\");\r\n expect(style1UpdatedNameId).equals(style1Id);\r\n\r\n vs1.updateDisplayStyleJson(style1Id, \"style1-json-updated\");\r\n const style1Updated = vs1.getDisplayStyleRow(style1Id)!;\r\n expect(style1Updated.json).equals(\"style1-json-updated\");\r\n\r\n vs1.deleteDisplayStyleSync(style1Id);\r\n expect(vs1.findDisplayStyleByName(\"style1\")).equals(0);\r\n expect(vs1.findDisplayStyleByName(\"style2\")).equals(3);\r\n\r\n vs1.addModelSelectorRow({ name: \"model1\", json: \"model1-json\" });\r\n const ms2 = vs1.addModelSelectorRow({ json: \"model2-json\" });\r\n const model1Id = vs1.findModelSelectorByName(\"model1\");\r\n expect(model1Id).equals(1);\r\n const model1 = vs1.getModelSelectorRow(model1Id)!;\r\n expect(model1.name).equals(\"model1\");\r\n expect(model1.json).equals(\"model1-json\");\r\n const model2 = vs1.getModelSelectorRow(ms2)!;\r\n expect(model2.name).undefined;\r\n expect(model2.json).equals(\"model2-json\");\r\n\r\n await vs1.renameModelSelector({ id: model1Id, name: \"model1-updated\" });\r\n const model1UpdatedNameId = vs1.findModelSelectorByName(\"model1-updated\");\r\n expect(model1UpdatedNameId).equals(model1Id);\r\n await vs1.renameModelSelector({ id: model1Id, name: undefined });\r\n expect(vs1.getModelSelectorRow(model1Id)!.name).undefined;\r\n\r\n vs1.updateModelSelectorJson(model1Id, \"model1-json-updated\");\r\n const model1Updated = vs1.getModelSelectorRow(model1Id)!;\r\n expect(model1Updated.json).equals(\"model1-json-updated\");\r\n\r\n vs1.deleteModelSelectorSync(model1Id);\r\n expect(vs1.findModelSelectorByName(\"model1\")).equals(0);\r\n\r\n vs1.addTimelineRow({ name: \"timeline1\", json: \"timeline1-json\" });\r\n vs1.addTimelineRow({ name: \"timeline2\", json: \"timeline2-json\" });\r\n const timeline1Id = vs1.findTimelineByName(\"timeline1\");\r\n const timeline2Id = vs1.findTimelineByName(\"timeline2\");\r\n expect(timeline1Id).equals(1);\r\n const timeline1 = vs1.getTimelineRow(timeline1Id)!;\r\n expect(timeline1.name).equals(\"timeline1\");\r\n expect(timeline1.json).equals(\"timeline1-json\");\r\n\r\n await vs1.renameTimeline({ id: timeline1Id, name: \"timeline1-updated\" });\r\n const timeline1UpdatedNameId = vs1.findTimelineByName(\"timeline1-updated\");\r\n expect(timeline1UpdatedNameId).equals(timeline1Id);\r\n\r\n vs1.updateTimelineJson(timeline1Id, \"timeline1-json-updated\");\r\n const timeline1Updated = vs1.getTimelineRow(timeline1Id)!;\r\n expect(timeline1Updated.json).equals(\"timeline1-json-updated\");\r\n\r\n vs1.deleteTimelineSync(timeline2Id);\r\n expect(vs1.findTimelineByName(\"timeline2\")).equals(0);\r\n\r\n const t1 = vs1.addTag({ name: \"tag1\", json: \"tag1-json\", owner: \"owner1\" });\r\n vs1.addTag({ name: \"tag2\", json: \"tag2-json\" });\r\n const tag1Id = vs1.findTagByName(\"tag1\");\r\n expect(tag1Id).equals(t1);\r\n const tag1 = vs1.getTag(tag1Id)!;\r\n expect(tag1.name).equals(\"tag1\");\r\n expect(tag1.json).equals(\"tag1-json\");\r\n expect(tag1.owner).equals(\"owner1\");\r\n for (let i = 0; i < 5; i++)\r\n vs1.addTag({ name: `test tag ${i}`, json: `newTag${i}-json` });\r\n\r\n vs1.addTagToView({ viewId: v1Id, tagId: tag1Id });\r\n vs1.addTagToView({ viewId: v1Id, tagId: 2 });\r\n vs1.addTagToView({ viewId: v103, tagId: 2 });\r\n vs1.addTagToView({ viewId: v104, tagId: 2 });\r\n vs1.addTagToView({ viewId: v1Id, tagId: 3 });\r\n const taggedViewIds = vs1.findViewsForTag(tag1Id);\r\n expect(taggedViewIds.length).equals(1);\r\n expect(taggedViewIds[0]).equals(v1Id);\r\n const tags = vs1.getTagsForView(v1Id)!;\r\n expect(tags.length).equals(3);\r\n expect(tags[0]).equals(\"tag1\");\r\n expect(tags[1]).equals(\"tag2\");\r\n expect(tags[2]).equals(\"test tag 0\");\r\n\r\n vs1.addViewRow({ className: \"BisCore:SpatialViewDefinition\", name: \"my private 2\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n vs1.addViewRow({ className: \"BisCore:OrthographicViewDefinition\", name: \"my private 3\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n vs1.addViewRow({ className: \"BisCore:SheetViewDefinition\", name: \"sheet 3\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n vs1.addViewRow({ className: \"BisCore:DrawingViewDefinition\", name: \"drawing 3\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n\r\n let views = vs1.queryViewsSync({ group: \"/\" });\r\n expect(views.length).equals(3);\r\n expect(views[0].name).equals(\"another view\");\r\n expect(vs1.queryViewsSync({ group: \"group1\" }).length).equals(0);\r\n expect(vs1.queryViewsSync({ group: \"group2\" }).length).equal(100);\r\n expect(vs1.queryViewsSync({ group: \"group2\", offset: 20, limit: 10 }).length).equals(10);\r\n expect(vs1.queryViewsSync({ group: \"group2\", offset: 20, limit: 100 }).length).equals(80);\r\n views = vs1.queryViewsSync({ group: \"group2\", nameSearch: \"%20%\", nameCompare: \"LIKE\" });\r\n expect(views.length).equals(1);\r\n expect(views[0].name).equals(\"test view 20\");\r\n views = vs1.queryViewsSync({ group: \"group2\", nameSearch: \"*2*\", nameCompare: \"GLOB\" });\r\n expect(views.length).equals(19);\r\n expect(vs1.queryViewsSync({ group: \"group2\", tags: [\"tag1\"] }).length).equal(0);\r\n expect(vs1.queryViewsSync({ tags: [\"tag1\"] }).length).equal(1);\r\n views = vs1.queryViewsSync({ tags: [\"tag2\", \"tag1\"] });\r\n expect(views.length).equal(3);\r\n expect(views[2].tags?.length).equal(3);\r\n views = vs1.queryViewsSync({ owner: \"owner10\" });\r\n expect(views.length).equal(7);\r\n views = vs1.queryViewsSync({ owner: \"owner10\", nameSearch: \"my%\", nameCompare: \"LIKE\" });\r\n expect(views.length).equal(2);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:SpatialViewDefinition\"] }).length).equal(1);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:SpatialViewDefinition\", \"BisCore:OrthographicViewDefinition\"] }).length).equal(2);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:DrawingViewDefinition\"] }).length).equal(1);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:DrawingViewDefinition\", \"BisCore:SheetViewDefinition\"] }).length).equal(2);\r\n\r\n await vs1.renameTag({ oldName: \"tag2\", newName: \"tag2-renamed\" });\r\n views = vs1.queryViewsSync({ tags: [\"tag2-renamed\"] });\r\n expect(views.length).equal(3);\r\n\r\n vs1.deleteTagSync({ name: \"tag2-renamed\" });\r\n const tagIdsAfterDelete = vs1.getTagsForView(v1Id)!;\r\n expect(tagIdsAfterDelete.length).equals(2);\r\n expect(tagIdsAfterDelete[0]).equals(\"tag1\");\r\n expect(tagIdsAfterDelete[1]).equals(\"test tag 0\");\r\n\r\n await vs1.addSearch({ name: \"search1\", json: \"search1-json\" });\r\n const search2 = await vs1.addSearch({ name: \"search2\", json: \"search2-json\" });\r\n await expect(vs1.addSearch({ name: \"search1\", json: \"search1-json\" })).to.be.rejectedWith(\"UNIQUE\");\r\n const search1Id = vs1.findSearchByName(\"search1\");\r\n expect(search1Id).equals(1);\r\n const search1 = vs1.getSearch(search1Id)!;\r\n expect(search1.name).equals(\"search1\");\r\n expect(search1.json).equals(\"search1-json\");\r\n await vs1.renameSearch({ id: search1Id, name: \"search1-updated\" });\r\n const search1UpdatedNameId = vs1.findSearchByName(\"search1-updated\");\r\n expect(search1UpdatedNameId).equals(search1Id);\r\n vs1.updateSearchJson(search1Id, \"search1-json-updated\");\r\n const search1Updated = vs1.getSearch(search1Id)!;\r\n expect(search1Updated.json).equals(\"search1-json-updated\");\r\n vs1.deleteSearch(search2);\r\n expect(vs1.findSearchByName(\"search2\")).equals(0);\r\n\r\n const guids: GuidString[] = [];\r\n const rowIds: ViewStore.RowId[] = [];\r\n const nGuids = 1000;\r\n for (let i = 0; i < nGuids; i++) {\r\n const guid = Guid.createValue();\r\n const rowId = vs1.addGuid(guid);\r\n guids.push(guid);\r\n rowIds.push(rowId);\r\n }\r\n for (let i = 0; i < nGuids; i++) {\r\n expect(vs1.getGuid(rowIds[i])).equals(guids[i]);\r\n expect(vs1.addGuid(guids[i])).equals(rowIds[i]);\r\n }\r\n\r\n let count = 0;\r\n vs1.iterateGuids(rowIds, (guid: GuidString, row: ViewStore.RowId) => {\r\n count++;\r\n expect(guid).not.undefined;\r\n expect(guids.indexOf(guid)).not.equals(-1);\r\n const rowString1 = ViewStore.fromRowId(row);\r\n expect(rowString1.startsWith(\"@\")).true;\r\n expect(ViewStore.toRowId(rowString1)).equals(row); // round trip\r\n });\r\n expect(count).equals(nGuids);\r\n\r\n const largeNumber = 0x7ffffffffffff;\r\n expect(ViewStore.toRowId(ViewStore.fromRowId(largeNumber))).equals(largeNumber);\r\n\r\n vs1.vacuum();\r\n });\r\n\r\n it(\"selector queries should skip undefined and null bindings\", async () => {\r\n const dbName = join(KnownTestLocations.outputDir, \"viewStoreBindings.db\");\r\n if (IModelJsFs.existsSync(dbName))\r\n IModelJsFs.removeSync(dbName);\r\n const snapshot = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n const vs = new ViewStore.ViewDb({ guidMap: {} as any });\r\n try {\r\n ViewStore.ViewDb.createNewDb(dbName);\r\n vs.openDb(dbName, OpenMode.ReadWrite);\r\n vs.iModel = snapshot;\r\n\r\n const selectorId = await vs.addCategorySelector({ selector: { query: { from: \"BisCore:SpatialCategory\" } } });\r\n\r\n const baseline = vs.getCategorySelectorSync({ id: selectorId });\r\n expect(baseline.categories.length).greaterThan(0);\r\n\r\n // Undefined/null bindings not referenced by the query must be skipped (legacy ECSqlStatement.bindValues\r\n // semantics, per ViewStoreRpc.QueryBindings), not bound as NULL.\r\n const withUnusedUndefined = vs.getCategorySelectorSync({ id: selectorId, bindings: { parent: undefined } });\r\n expect(withUnusedUndefined.categories).deep.equal(baseline.categories);\r\n\r\n const withUnusedNull = vs.getCategorySelectorSync({ id: selectorId, bindings: { parent: null } });\r\n expect(withUnusedNull.categories).deep.equal(baseline.categories);\r\n } finally {\r\n if (vs.isOpen)\r\n vs.closeDb();\r\n if (snapshot.isOpen)\r\n snapshot.close();\r\n }\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ViewStoreDb.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ViewStoreDb.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 { Suite } from \"mocha\";\r\nimport { join } from \"path\";\r\nimport { Guid, GuidString, Logger, LogLevel, OpenMode } from \"@itwin/core-bentley\";\r\nimport { ViewStore } from \"../../ViewStore\";\r\nimport { ThumbnailFormatProps, ViewStoreError } from \"@itwin/core-common\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\n\r\ndescribe(\"ViewStore\", function (this: Suite) {\r\n this.timeout(0);\r\n\r\n let vs1: ViewStore.ViewDb;\r\n\r\n before(async () => {\r\n Logger.setLevel(\"SQLite\", LogLevel.None); // we're expecting errors\r\n const dbName = join(KnownTestLocations.outputDir, \"viewStore.db\");\r\n ViewStore.ViewDb.createNewDb(dbName);\r\n vs1 = new ViewStore.ViewDb({ guidMap: {} as any });\r\n vs1.openDb(dbName, OpenMode.ReadWrite);\r\n });\r\n\r\n after(async () => {\r\n vs1.closeDb(true);\r\n Logger.setLevel(\"SQLite\", LogLevel.Error);\r\n });\r\n\r\n it(\"ViewDb\", async () => {\r\n const c1 = vs1.addCategorySelectorRow({ name: \"first cat\", json: \"cat1-json\" });\r\n const ds1 = vs1.addDisplayStyleRow({ name: \"first style\", json: \"style1-json\" });\r\n\r\n expect(vs1.getViewByNameSync({ name: \"view1\" })).to.be.undefined;\r\n const v1Id = vs1.addViewRow({ className: \"spatial\", name: \"view1\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n expect(v1Id).equals(1);\r\n\r\n const v1 = vs1.getViewByNameSync({ name: \"view1\" })!;\r\n expect(vs1.findViewIdByName({ name: \"view1\" })).equals(v1Id);\r\n expect(vs1.findViewIdByName({ name: \"/view1\" })).equals(v1Id);\r\n expect(v1.owner).equals(\"owner10\");\r\n expect(v1.className).equals(\"spatial\");\r\n expect(v1.groupId).equals(\"@1\");\r\n expect(v1.isPrivate).to.be.true;\r\n expect(v1.name).equals(\"view1\");\r\n await vs1.updateViewShared({ viewId: v1Id, isShared: true, owner: \"owner10\" });\r\n const v1Updated = vs1.getViewByNameSync({ name: \"view1\" })!;\r\n expect(v1Updated.isPrivate).to.be.false;\r\n\r\n const v1Id2 = vs1.addViewRow({ className: \"spatial\", name: \"v2\", json: \"json-v2\", owner: \"owner1\", groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n expect(v1Id2).equals(2);\r\n const v2 = vs1.getViewRow(v1Id2)!;\r\n expect(v2.name).equals(\"v2\");\r\n vs1.deleteViewRow(v1Id2);\r\n expect(vs1.findViewIdByName({ name: \"v2\", groupId: 1 })).equals(0);\r\n\r\n expect(() => vs1.addViewGroupRow({ name: \"\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \" \", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \"@bad\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \"bad/name\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \"^fd\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewGroupRow({ name: \"sd#fd\", json: \"\" })).to.throw(\"illegal group\");\r\n expect(() => vs1.addViewRow({ className: \"spatial\", name: \"@bad\", json: \"json-v2\", owner: \"owner1\", groupId: 1, categorySel: c1, displayStyle: ds1 })).to.throw(\"illegal view\");\r\n expect(() => vs1.addViewRow({ className: \"spatial\", name: \"bad/name\", json: \"json-v2\", owner: \"owner1\", groupId: 1, categorySel: c1, displayStyle: ds1 })).to.throw(\"illegal view\");\r\n\r\n const g1 = vs1.addViewGroupRow({ name: \"group1\", json: \"group1-json\" });\r\n const g2 = vs1.addViewGroupRow({ name: \"group2\", json: \"group2-json\" });\r\n const g3 = vs1.addViewGroupRow({ name: \"group 3\", parentId: g2, json: \"group3-json\" });\r\n const g4 = vs1.addViewGroupRow({ name: \"group4\", parentId: g3, json: \"group3-json\" });\r\n const v2Id = vs1.addViewRow({ className: \"spatial2\", name: \"view2\", json: \"json2\", groupId: g4, categorySel: c1, displayStyle: ds1 });\r\n expect(v2Id).equals(3);\r\n\r\n for (let i = 0; i < 100; i++)\r\n vs1.addViewRow({ className: \"spatial\", name: `test view ${i}`, json: `json${i}`, owner: \"owner1\", groupId: g2, categorySel: c1, displayStyle: ds1 });\r\n\r\n // duplicate name in a group should throw\r\n expect(() => vs1.addViewRow({ className: \"spatial3\", name: \"test view 0\", json: \"json-blah\", owner: \"owner1\", groupId: g2, categorySel: c1, displayStyle: ds1 })).to.throw(\"UNIQUE\");\r\n // allow the same name in different groups\r\n const v103 = vs1.addViewRow({ className: \"spatial3\", name: \"test view 0\", json: \"json-blah\", owner: \"owner1\", groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n const v104 = vs1.addViewRow({ className: \"spatial3\", name: \"another view\", json: \"json-blah\", owner: \"owner10\", groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n\r\n const g3Id = vs1.getViewGroupByName(\"group 3\", g2);\r\n\r\n expect(g3Id).equals(g3);\r\n expect(vs1.findViewGroup(\"group1\")).equals(g1);\r\n expect(vs1.findViewGroup(\"group 3\")).equals(0); // not in the root group\r\n expect(vs1.findViewGroup(\"/group2/group 3/\")).equals(g3);\r\n expect(vs1.findViewGroup(\"/group2/group 3/group4\")).equals(g4);\r\n expect(vs1.findViewGroup(\"group2/group 3/group4\")).equals(g4);\r\n expect(vs1.findViewGroup(ViewStore.fromRowId(g4))).equals(g4);\r\n expect(vs1.findViewGroup(\"group2/group 3/group4/blah\")).equals(0);\r\n expect(vs1.findViewGroup(\"group2/blah/group4\")).equals(0);\r\n expect(vs1.findViewGroup(\"blah\")).equals(0);\r\n expect(vs1.findViewGroup(\"/\")).equals(1);\r\n expect(vs1.findViewGroup(\"\")).equals(1);\r\n\r\n expect(vs1.getViewByNameSync({ name: \"view2\", groupId: g4 })?.groupId).equals(ViewStore.fromRowId(g4));\r\n expect(vs1.findViewIdByName({ name: \"/group2/group 3/group4/view2\" })).equals(v2Id);\r\n expect(vs1.findViewIdByName({ name: \"group2/group 3/group4/view2\" })).equals(v2Id);\r\n expect(vs1.findViewIdByName({ name: `${ViewStore.fromRowId(g4)}/view2` })).equals(v2Id);\r\n expect(vs1.findViewIdByName({ name: \"group2/group 3/group4/not there\" })).equals(0);\r\n expect(vs1.findViewIdByName({ name: \"group2/test view 3\" })).not.equal(0);\r\n\r\n const group3 = vs1.getViewGroup(g3Id)!;\r\n expect(group3.name).equals(\"group 3\");\r\n expect(group3.parentId).equals(g2);\r\n expect(group3.json).equals(\"group3-json\");\r\n await vs1.renameViewGroup({ groupId: g3Id, name: \"group3-updated\" });\r\n vs1.updateViewGroupJson(g3Id, \"group3-json-updated\");\r\n const g3Updated = vs1.getViewGroup(g3Id)!;\r\n expect(g3Updated.name).equals(\"group3-updated\");\r\n expect(g3Updated.json).equals(\"group3-json-updated\");\r\n\r\n expect(vs1.queryViewsSync({ group: \"group2\", classNames: [\"spatial\"] }).length).equals(100);\r\n expect(vs1.queryViewsSync({ group: ViewStore.fromRowId(g4), classNames: [\"spatial2\"] }).length).equals(1);\r\n expect(vs1.queryViewsSync({ classNames: [\"spatial\", \"spatial3\", \"blah\"] }).length).equals(3);\r\n expect(vs1.queryViewsSync({ classNames: [] }).length).equals(0);\r\n expect(vs1.queryViewsSync({ classNames: [\"blah\"] }).length).equals(0);\r\n expect((await vs1.findViewsByOwner({ owner: \"owner1\" })).length).equals(101);\r\n\r\n const thumbnail1 = new Uint8Array([2, 33, 23, 0, 202]);\r\n const format1: ThumbnailFormatProps = { width: 100, height: 200, format: \"jpeg\" };\r\n const format2: ThumbnailFormatProps = { width: 10, height: 20, format: \"png\" };\r\n vs1.addOrReplaceThumbnailRow({ data: thumbnail1, viewId: v1Id, format: format1 });\r\n vs1.addOrReplaceThumbnailRow({ data: thumbnail1, viewId: v2Id, format: format2 });\r\n const thumbnail2 = vs1.getThumbnailRow(v2Id);\r\n expect(thumbnail2?.data).deep.equals(thumbnail1);\r\n expect(thumbnail2?.format).deep.equals(format2);\r\n const thumb3 = new Uint8Array([2, 33, 23, 0, 203]);\r\n vs1.addOrReplaceThumbnailRow({ data: thumb3, viewId: v2Id, format: format2 });\r\n const thumbnail3 = vs1.getThumbnailRow(v2Id);\r\n expect(thumbnail3?.data).deep.equals(thumb3);\r\n vs1.addOrReplaceThumbnailRow({ data: thumbnail1, viewId: 33, format: format1 });\r\n expect(vs1.getThumbnailRow(33)).to.not.be.undefined;\r\n vs1.deleteThumbnailSync(ViewStore.fromRowId(33));\r\n expect(vs1.getThumbnailRow(33)).to.be.undefined;\r\n\r\n await vs1.deleteViewGroup({ name: \"group1\" });\r\n expect(vs1.getViewByNameSync({ name: \"view2\", groupId: g1 })).to.be.undefined;\r\n\r\n const cat01 = vs1.addCategorySelectorRow({ name: \"cat1\", json: \"cat1-json\" });\r\n vs1.addCategorySelectorRow({ name: \"cat2\", json: \"cat2-json\" });\r\n const cat1Id = vs1.findCategorySelectorByName(\"cat1\");\r\n expect(cat1Id).equals(cat01);\r\n let cat1 = vs1.getCategorySelectorRow(cat1Id)!;\r\n expect(cat1.name).equals(\"cat1\");\r\n expect(cat1.json).equals(\"cat1-json\");\r\n await vs1.updateCategorySelectorJson(cat1Id, \"cat1-json-updated\");// eslint-disable-line @typescript-eslint/await-thenable\r\n cat1 = vs1.getCategorySelectorRow(cat1Id)!;\r\n expect(cat1.json).equals(\"cat1-json-updated\");\r\n\r\n vs1.deleteCategorySelectorSync(cat1Id);\r\n expect(vs1.findCategorySelectorByName(\"cat1\")).equals(0);\r\n\r\n const ds01 = vs1.addDisplayStyleRow({ name: \"style1\", json: \"style1-json\" });\r\n vs1.addDisplayStyleRow({ name: \"style2\", json: \"style2-json\" });\r\n const style1Id = vs1.findDisplayStyleByName(\"style1\");\r\n expect(style1Id).equals(ds01);\r\n const style1 = vs1.getDisplayStyleRow(style1Id)!;\r\n expect(style1.name).equals(\"style1\");\r\n expect(style1.json).equals(\"style1-json\");\r\n await vs1.renameDisplayStyle({ id: style1Id, name: \"style1-updated\" });\r\n const style1UpdatedNameId = vs1.findDisplayStyleByName(\"style1-updated\");\r\n expect(style1UpdatedNameId).equals(style1Id);\r\n\r\n vs1.updateDisplayStyleJson(style1Id, \"style1-json-updated\");\r\n const style1Updated = vs1.getDisplayStyleRow(style1Id)!;\r\n expect(style1Updated.json).equals(\"style1-json-updated\");\r\n\r\n vs1.deleteDisplayStyleSync(style1Id);\r\n expect(vs1.findDisplayStyleByName(\"style1\")).equals(0);\r\n expect(vs1.findDisplayStyleByName(\"style2\")).equals(3);\r\n\r\n vs1.addModelSelectorRow({ name: \"model1\", json: \"model1-json\" });\r\n const ms2 = vs1.addModelSelectorRow({ json: \"model2-json\" });\r\n const model1Id = vs1.findModelSelectorByName(\"model1\");\r\n expect(model1Id).equals(1);\r\n const model1 = vs1.getModelSelectorRow(model1Id)!;\r\n expect(model1.name).equals(\"model1\");\r\n expect(model1.json).equals(\"model1-json\");\r\n const model2 = vs1.getModelSelectorRow(ms2)!;\r\n expect(model2.name).undefined;\r\n expect(model2.json).equals(\"model2-json\");\r\n\r\n await vs1.renameModelSelector({ id: model1Id, name: \"model1-updated\" });\r\n const model1UpdatedNameId = vs1.findModelSelectorByName(\"model1-updated\");\r\n expect(model1UpdatedNameId).equals(model1Id);\r\n await vs1.renameModelSelector({ id: model1Id, name: undefined });\r\n expect(vs1.getModelSelectorRow(model1Id)!.name).undefined;\r\n\r\n vs1.updateModelSelectorJson(model1Id, \"model1-json-updated\");\r\n const model1Updated = vs1.getModelSelectorRow(model1Id)!;\r\n expect(model1Updated.json).equals(\"model1-json-updated\");\r\n\r\n vs1.deleteModelSelectorSync(model1Id);\r\n expect(vs1.findModelSelectorByName(\"model1\")).equals(0);\r\n\r\n vs1.addTimelineRow({ name: \"timeline1\", json: \"timeline1-json\" });\r\n vs1.addTimelineRow({ name: \"timeline2\", json: \"timeline2-json\" });\r\n const timeline1Id = vs1.findTimelineByName(\"timeline1\");\r\n const timeline2Id = vs1.findTimelineByName(\"timeline2\");\r\n expect(timeline1Id).equals(1);\r\n const timeline1 = vs1.getTimelineRow(timeline1Id)!;\r\n expect(timeline1.name).equals(\"timeline1\");\r\n expect(timeline1.json).equals(\"timeline1-json\");\r\n\r\n await vs1.renameTimeline({ id: timeline1Id, name: \"timeline1-updated\" });\r\n const timeline1UpdatedNameId = vs1.findTimelineByName(\"timeline1-updated\");\r\n expect(timeline1UpdatedNameId).equals(timeline1Id);\r\n\r\n vs1.updateTimelineJson(timeline1Id, \"timeline1-json-updated\");\r\n const timeline1Updated = vs1.getTimelineRow(timeline1Id)!;\r\n expect(timeline1Updated.json).equals(\"timeline1-json-updated\");\r\n\r\n vs1.deleteTimelineSync(timeline2Id);\r\n expect(vs1.findTimelineByName(\"timeline2\")).equals(0);\r\n\r\n const t1 = vs1.addTag({ name: \"tag1\", json: \"tag1-json\", owner: \"owner1\" });\r\n vs1.addTag({ name: \"tag2\", json: \"tag2-json\" });\r\n const tag1Id = vs1.findTagByName(\"tag1\");\r\n expect(tag1Id).equals(t1);\r\n const tag1 = vs1.getTag(tag1Id)!;\r\n expect(tag1.name).equals(\"tag1\");\r\n expect(tag1.json).equals(\"tag1-json\");\r\n expect(tag1.owner).equals(\"owner1\");\r\n for (let i = 0; i < 5; i++)\r\n vs1.addTag({ name: `test tag ${i}`, json: `newTag${i}-json` });\r\n\r\n vs1.addTagToView({ viewId: v1Id, tagId: tag1Id });\r\n vs1.addTagToView({ viewId: v1Id, tagId: 2 });\r\n vs1.addTagToView({ viewId: v103, tagId: 2 });\r\n vs1.addTagToView({ viewId: v104, tagId: 2 });\r\n vs1.addTagToView({ viewId: v1Id, tagId: 3 });\r\n const taggedViewIds = vs1.findViewsForTag(tag1Id);\r\n expect(taggedViewIds.length).equals(1);\r\n expect(taggedViewIds[0]).equals(v1Id);\r\n const tags = vs1.getTagsForView(v1Id)!;\r\n expect(tags.length).equals(3);\r\n expect(tags[0]).equals(\"tag1\");\r\n expect(tags[1]).equals(\"tag2\");\r\n expect(tags[2]).equals(\"test tag 0\");\r\n\r\n vs1.addViewRow({ className: \"BisCore:SpatialViewDefinition\", name: \"my private 2\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n vs1.addViewRow({ className: \"BisCore:OrthographicViewDefinition\", name: \"my private 3\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n vs1.addViewRow({ className: \"BisCore:SheetViewDefinition\", name: \"sheet 3\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n vs1.addViewRow({ className: \"BisCore:DrawingViewDefinition\", name: \"drawing 3\", json: \"json1\", owner: \"owner10\", isPrivate: true, groupId: 1, categorySel: c1, displayStyle: ds1 });\r\n\r\n let views = vs1.queryViewsSync({ group: \"/\" });\r\n expect(views.length).equals(3);\r\n expect(views[0].name).equals(\"another view\");\r\n expect(vs1.queryViewsSync({ group: \"group1\" }).length).equals(0);\r\n expect(vs1.queryViewsSync({ group: \"group2\" }).length).equal(100);\r\n expect(vs1.queryViewsSync({ group: \"group2\", offset: 20, limit: 10 }).length).equals(10);\r\n expect(vs1.queryViewsSync({ group: \"group2\", offset: 20, limit: 100 }).length).equals(80);\r\n views = vs1.queryViewsSync({ group: \"group2\", nameSearch: \"%20%\", nameCompare: \"LIKE\" });\r\n expect(views.length).equals(1);\r\n expect(views[0].name).equals(\"test view 20\");\r\n views = vs1.queryViewsSync({ group: \"group2\", nameSearch: \"*2*\", nameCompare: \"GLOB\" });\r\n expect(views.length).equals(19);\r\n expect(vs1.queryViewsSync({ group: \"group2\", tags: [\"tag1\"] }).length).equal(0);\r\n expect(vs1.queryViewsSync({ tags: [\"tag1\"] }).length).equal(1);\r\n views = vs1.queryViewsSync({ tags: [\"tag2\", \"tag1\"] });\r\n expect(views.length).equal(3);\r\n expect(views[2].tags?.length).equal(3);\r\n views = vs1.queryViewsSync({ owner: \"owner10\" });\r\n expect(views.length).equal(7);\r\n views = vs1.queryViewsSync({ owner: \"owner10\", nameSearch: \"my%\", nameCompare: \"LIKE\" });\r\n expect(views.length).equal(2);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:SpatialViewDefinition\"] }).length).equal(1);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:SpatialViewDefinition\", \"BisCore:OrthographicViewDefinition\"] }).length).equal(2);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:DrawingViewDefinition\"] }).length).equal(1);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:DrawingViewDefinition\", \"BisCore:SheetViewDefinition\"] }).length).equal(2);\r\n\r\n // query parameters may come from RPC callers, so values must never be interpreted as SQL\r\n const allPublicCount = vs1.queryViewsSync({}).length;\r\n const injectClause = \"x') OR 1=1 OR className IN('x\";\r\n expect(vs1.queryViewsSync({ classNames: [injectClause] }).length).equal(0);\r\n expect(vs1.queryViewsSync({ classNames: [\"foo') UNION SELECT Id,name,owner,private,1 FROM views -- \"] }).length).equal(0);\r\n expect(vs1.queryViewsSync({ tags: [injectClause] }).length).equal(0);\r\n expect(vs1.queryViewsSync({ classNames: [\"it's\"] }).length).equal(0); // quotes in values must not cause SQL errors\r\n expect(vs1.queryViewsSync({ tags: [\"it's\"] }).length).equal(0);\r\n expect(vs1.queryViewsSync({ nameSearch: \"' OR 1=1 --\" }).length).equal(0);\r\n expect(vs1.queryViewsSync({ group: \"group2\", offset: 95 }).length).equal(5); // offset without limit\r\n const badParams: any[] = [\r\n { nameSearch: \"x\", nameCompare: \"= @name OR 1=1 OR name =\" },\r\n { nameSearch: \"x\", nameCompare: \"like\" },\r\n { limit: \"1 UNION SELECT Id FROM views\" },\r\n { limit: 1.5 },\r\n { limit: -1 },\r\n { limit: 10, offset: \"1; --\" },\r\n { classNames: \"BisCore:SpatialViewDefinition\" },\r\n { classNames: [1] },\r\n { tags: [{}] },\r\n { owner: 1 },\r\n { nameSearch: { $ne: \"\" } },\r\n { group: 5 },\r\n { group: [\"group2\"] },\r\n null,\r\n undefined,\r\n ];\r\n for (const params of badParams) {\r\n // must be rejected by validation with a ViewStoreError, not fail later with a generic or native error\r\n expect(() => vs1.queryViewsSync(params), String(JSON.stringify(params))).throws().that.satisfies((e: unknown) => ViewStoreError.isError(e, \"invalid-value\"));\r\n }\r\n expect(vs1.queryViewsSync({ owner: \"\", nameSearch: \"\", group: \"\" }).length).equal(allPublicCount); // empty strings are treated as absent\r\n\r\n // owner is optional: without it only public views are returned; with it, that owner's private views are added\r\n expect(vs1.queryViewsSync({ group: \"/\" }).every((view) => !view.isPrivate)).to.be.true;\r\n expect(vs1.queryViewsSync({ group: \"/\", owner: \"someoneElse\" }).every((view) => !view.isPrivate)).to.be.true;\r\n expect(vs1.queryViewsSync({ group: \"/\", owner: \"owner10\" }).filter((view) => view.isPrivate).length).equal(4);\r\n expect(vs1.queryViewsSync({ nameSearch: \"my private 2\" }).length).equal(0);\r\n expect(vs1.queryViewsSync({ nameSearch: \"my private 2\", owner: \"someoneElse\" }).length).equal(0);\r\n expect(vs1.queryViewsSync({ nameSearch: \"my private 2\", owner: \"owner10\" }).length).equal(1);\r\n\r\n // a limit of 0 means no limit\r\n expect(vs1.queryViewsSync({ group: \"group2\", limit: 0 }).length).equal(100);\r\n expect(vs1.queryViewsSync({ group: \"group2\", limit: 0, offset: 0 }).length).equal(100);\r\n\r\n // the query statement is cached, so bindings from one call must not leak into the next\r\n expect(vs1.queryViewsSync({ owner: \"owner10\" }).length).equal(7);\r\n expect(vs1.queryViewsSync({}).length).equal(allPublicCount);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [\"BisCore:SpatialViewDefinition\"], nameSearch: \"my%\", nameCompare: \"LIKE\", limit: 1 }).length).equal(1);\r\n expect(vs1.queryViewsSync({ nameSearch: \"another view\" }).length).equal(1);\r\n expect(vs1.queryViewsSync({}).length).equal(allPublicCount);\r\n\r\n // arrays are bound as a single JSON value, so their size is not limited by SQLite's bound-variable limit\r\n const manyClassNames = Array.from({ length: 40000 }, (_, i) => `Fake:Class${i}`);\r\n expect(vs1.queryViewsSync({ owner: \"owner10\", classNames: [...manyClassNames, \"BisCore:DrawingViewDefinition\"] }).length).equal(1);\r\n expect(vs1.queryViewsSync({}).length).equal(allPublicCount);\r\n\r\n await vs1.renameTag({ oldName: \"tag2\", newName: \"tag2-renamed\" });\r\n views = vs1.queryViewsSync({ tags: [\"tag2-renamed\"] });\r\n expect(views.length).equal(3);\r\n\r\n vs1.deleteTagSync({ name: \"tag2-renamed\" });\r\n const tagIdsAfterDelete = vs1.getTagsForView(v1Id)!;\r\n expect(tagIdsAfterDelete.length).equals(2);\r\n expect(tagIdsAfterDelete[0]).equals(\"tag1\");\r\n expect(tagIdsAfterDelete[1]).equals(\"test tag 0\");\r\n\r\n await vs1.addSearch({ name: \"search1\", json: \"search1-json\" });\r\n const search2 = await vs1.addSearch({ name: \"search2\", json: \"search2-json\" });\r\n await expect(vs1.addSearch({ name: \"search1\", json: \"search1-json\" })).to.be.rejectedWith(\"UNIQUE\");\r\n const search1Id = vs1.findSearchByName(\"search1\");\r\n expect(search1Id).equals(1);\r\n const search1 = vs1.getSearch(search1Id)!;\r\n expect(search1.name).equals(\"search1\");\r\n expect(search1.json).equals(\"search1-json\");\r\n await vs1.renameSearch({ id: search1Id, name: \"search1-updated\" });\r\n const search1UpdatedNameId = vs1.findSearchByName(\"search1-updated\");\r\n expect(search1UpdatedNameId).equals(search1Id);\r\n vs1.updateSearchJson(search1Id, \"search1-json-updated\");\r\n const search1Updated = vs1.getSearch(search1Id)!;\r\n expect(search1Updated.json).equals(\"search1-json-updated\");\r\n vs1.deleteSearch(search2);\r\n expect(vs1.findSearchByName(\"search2\")).equals(0);\r\n\r\n const guids: GuidString[] = [];\r\n const rowIds: ViewStore.RowId[] = [];\r\n const nGuids = 1000;\r\n for (let i = 0; i < nGuids; i++) {\r\n const guid = Guid.createValue();\r\n const rowId = vs1.addGuid(guid);\r\n guids.push(guid);\r\n rowIds.push(rowId);\r\n }\r\n for (let i = 0; i < nGuids; i++) {\r\n expect(vs1.getGuid(rowIds[i])).equals(guids[i]);\r\n expect(vs1.addGuid(guids[i])).equals(rowIds[i]);\r\n }\r\n\r\n let count = 0;\r\n vs1.iterateGuids(rowIds, (guid: GuidString, row: ViewStore.RowId) => {\r\n count++;\r\n expect(guid).not.undefined;\r\n expect(guids.indexOf(guid)).not.equals(-1);\r\n const rowString1 = ViewStore.fromRowId(row);\r\n expect(rowString1.startsWith(\"@\")).true;\r\n expect(ViewStore.toRowId(rowString1)).equals(row); // round trip\r\n });\r\n expect(count).equals(nGuids);\r\n\r\n const largeNumber = 0x7ffffffffffff;\r\n expect(ViewStore.toRowId(ViewStore.fromRowId(largeNumber))).equals(largeNumber);\r\n\r\n vs1.vacuum();\r\n });\r\n\r\n it(\"selector queries should skip undefined and null bindings\", async () => {\r\n const dbName = join(KnownTestLocations.outputDir, \"viewStoreBindings.db\");\r\n if (IModelJsFs.existsSync(dbName))\r\n IModelJsFs.removeSync(dbName);\r\n const snapshot = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n const vs = new ViewStore.ViewDb({ guidMap: {} as any });\r\n try {\r\n ViewStore.ViewDb.createNewDb(dbName);\r\n vs.openDb(dbName, OpenMode.ReadWrite);\r\n vs.iModel = snapshot;\r\n\r\n const selectorId = await vs.addCategorySelector({ selector: { query: { from: \"BisCore:SpatialCategory\" } } });\r\n\r\n const baseline = vs.getCategorySelectorSync({ id: selectorId });\r\n expect(baseline.categories.length).greaterThan(0);\r\n\r\n // Undefined/null bindings not referenced by the query must be skipped (legacy ECSqlStatement.bindValues\r\n // semantics, per ViewStoreRpc.QueryBindings), not bound as NULL.\r\n const withUnusedUndefined = vs.getCategorySelectorSync({ id: selectorId, bindings: { parent: undefined } });\r\n expect(withUnusedUndefined.categories).deep.equal(baseline.categories);\r\n\r\n const withUnusedNull = vs.getCategorySelectorSync({ id: selectorId, bindings: { parent: null } });\r\n expect(withUnusedNull.categories).deep.equal(baseline.categories);\r\n } finally {\r\n if (vs.isOpen)\r\n vs.closeDb();\r\n if (snapshot.isOpen)\r\n snapshot.close();\r\n }\r\n });\r\n});\r\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SettingsContainers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsContainers.test.d.ts","sourceRoot":"","sources":["../../../../src/test/workspace/SettingsContainers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { expect } from "chai";
6
+ import * as sinon from "sinon";
7
+ import { BlobContainer } from "../../BlobContainerService";
8
+ import { IModelHost } from "../../IModelHost";
9
+ import { SettingsPriority } from "../../workspace/Settings";
10
+ import { SettingsContainers } from "../../workspace/SettingsEditor";
11
+ const projectId = "11111111-1111-4111-8111-111111111111";
12
+ const accountId = "22222222-2222-4222-8222-222222222222";
13
+ const metadata = (containerId, iTwinId = projectId, iModelId) => ({
14
+ containerId, iTwinId, iModelId, accountITwinId: accountId, containerType: "settings", label: containerId,
15
+ });
16
+ const projectRoot = metadata("project-root");
17
+ const accountRoot = metadata("account-root", accountId);
18
+ const iModels = [metadata("iModel-a", projectId, "iModel-a-id"), metadata("iModel-b", projectId, "iModel-b-id")];
19
+ describe("SettingsContainers root discovery", () => {
20
+ let savedService;
21
+ let query;
22
+ let requestToken;
23
+ beforeEach(() => {
24
+ savedService = BlobContainer.service;
25
+ sinon.stub(IModelHost, "getAccessToken").resolves("test-token");
26
+ query = sinon.stub();
27
+ requestToken = sinon.stub().callsFake(async ({ containerId }) => ({
28
+ token: "read-token", baseUri: "https://example.test", provider: "azure", containerId,
29
+ }));
30
+ BlobContainer.service = {
31
+ create: sinon.stub(), delete: sinon.stub(), queryScope: sinon.stub(), queryMetadata: sinon.stub(),
32
+ queryContainersMetadata: query, updateJson: sinon.stub(), requestToken,
33
+ };
34
+ });
35
+ afterEach(() => {
36
+ BlobContainer.service = savedService;
37
+ sinon.restore();
38
+ });
39
+ for (const { name, containers, expected } of [
40
+ { name: "project root and iModel containers", containers: [projectRoot, ...iModels], expected: "project-root" },
41
+ { name: "a sole iModel container without a project root", containers: iModels.slice(0, 1), expected: undefined },
42
+ { name: "iModel containers without a project root", containers: iModels, expected: undefined },
43
+ ]) {
44
+ it(`selects only the project root for write lookup with ${name}`, async () => {
45
+ query.resolves(containers);
46
+ expect(await SettingsContainers.getITwinContainerId(projectId)).to.equal(expected);
47
+ expect(query.calledOnceWithExactly("test-token", { iTwinId: projectId, containerType: "settings" })).to.be.true;
48
+ expect(requestToken.called).to.be.false;
49
+ });
50
+ }
51
+ for (const { name, containers, expected } of [
52
+ { name: "project root and iModel containers", containers: [projectRoot, ...iModels], expected: ["project-root"] },
53
+ { name: "a sole iModel container without a project root", containers: iModels.slice(0, 1), expected: [] },
54
+ { name: "iModel containers without a project root", containers: iModels, expected: [] },
55
+ {
56
+ name: "organization root, project root and iModel containers",
57
+ containers: [projectRoot, ...iModels, accountRoot, metadata("account-iModel", accountId, "account-iModel-id")],
58
+ expected: ["project-root", "account-root"],
59
+ },
60
+ ]) {
61
+ it(`selects only roots for read discovery with ${name}`, async () => {
62
+ query.resolves(containers);
63
+ const sources = await SettingsContainers.getITwinSettingsSources(projectId);
64
+ expect(sources?.map((source) => source.containerId) ?? []).to.deep.equal(expected);
65
+ expect(requestToken.getCalls().map((call) => call.args[0].containerId)).to.deep.equal(expected);
66
+ if (expected.length === 0)
67
+ expect(sources).to.be.undefined;
68
+ else
69
+ expect(sources?.map((source) => source.priority)).to.deep.equal(expected.map((id) => id === "account-root" ? SettingsPriority.organization : SettingsPriority.iTwin));
70
+ });
71
+ }
72
+ it("still rejects duplicate project roots for write lookup and read discovery", async () => {
73
+ query.resolves([projectRoot, ...iModels, metadata("duplicate-root")]);
74
+ for (const discover of [SettingsContainers.getITwinContainerId, SettingsContainers.getITwinSettingsSources]) {
75
+ try {
76
+ await discover(projectId);
77
+ expect.fail("Duplicate roots must be rejected");
78
+ }
79
+ catch (error) {
80
+ expect(error.message).to.include("Multiple iTwin settings containers");
81
+ }
82
+ }
83
+ });
84
+ it("still rejects duplicate organization roots for read discovery", async () => {
85
+ query.resolves([accountRoot, metadata("duplicate-account-root", accountId), ...iModels]);
86
+ try {
87
+ await SettingsContainers.getITwinSettingsSources(projectId);
88
+ expect.fail("Duplicate organization roots must be rejected");
89
+ }
90
+ catch (error) {
91
+ expect(error.message).to.include("Multiple iTwin settings containers");
92
+ }
93
+ });
94
+ });
95
+ //# sourceMappingURL=SettingsContainers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsContainers.test.js","sourceRoot":"","sources":["../../../../src/test/workspace/SettingsContainers.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 sinon from \"sinon\";\r\nimport { BlobContainer } from \"../../BlobContainerService\";\r\nimport { IModelHost } from \"../../IModelHost\";\r\nimport { SettingsPriority } from \"../../workspace/Settings\";\r\nimport { SettingsContainers } from \"../../workspace/SettingsEditor\";\r\n\r\nconst projectId = \"11111111-1111-4111-8111-111111111111\";\r\nconst accountId = \"22222222-2222-4222-8222-222222222222\";\r\nconst metadata = (containerId: string, iTwinId = projectId, iModelId?: string) => ({\r\n containerId, iTwinId, iModelId, accountITwinId: accountId, containerType: \"settings\", label: containerId,\r\n});\r\nconst projectRoot = metadata(\"project-root\");\r\nconst accountRoot = metadata(\"account-root\", accountId);\r\nconst iModels = [metadata(\"iModel-a\", projectId, \"iModel-a-id\"), metadata(\"iModel-b\", projectId, \"iModel-b-id\")];\r\n\r\ndescribe(\"SettingsContainers root discovery\", () => {\r\n let savedService: BlobContainer.ContainerService | undefined;\r\n let query: sinon.SinonStub;\r\n let requestToken: sinon.SinonStub;\r\n\r\n beforeEach(() => {\r\n savedService = BlobContainer.service;\r\n sinon.stub(IModelHost, \"getAccessToken\").resolves(\"test-token\");\r\n query = sinon.stub();\r\n requestToken = sinon.stub().callsFake(async ({ containerId }) => ({\r\n token: \"read-token\", baseUri: \"https://example.test\", provider: \"azure\", containerId,\r\n }));\r\n BlobContainer.service = {\r\n create: sinon.stub(), delete: sinon.stub(), queryScope: sinon.stub(), queryMetadata: sinon.stub(),\r\n queryContainersMetadata: query, updateJson: sinon.stub(), requestToken,\r\n };\r\n });\r\n\r\n afterEach(() => {\r\n BlobContainer.service = savedService;\r\n sinon.restore();\r\n });\r\n\r\n for (const { name, containers, expected } of [\r\n { name: \"project root and iModel containers\", containers: [projectRoot, ...iModels], expected: \"project-root\" },\r\n { name: \"a sole iModel container without a project root\", containers: iModels.slice(0, 1), expected: undefined },\r\n { name: \"iModel containers without a project root\", containers: iModels, expected: undefined },\r\n ]) {\r\n it(`selects only the project root for write lookup with ${name}`, async () => {\r\n query.resolves(containers);\r\n expect(await SettingsContainers.getITwinContainerId(projectId)).to.equal(expected);\r\n expect(query.calledOnceWithExactly(\"test-token\", { iTwinId: projectId, containerType: \"settings\" })).to.be.true;\r\n expect(requestToken.called).to.be.false;\r\n });\r\n }\r\n\r\n for (const { name, containers, expected } of [\r\n { name: \"project root and iModel containers\", containers: [projectRoot, ...iModels], expected: [\"project-root\"] },\r\n { name: \"a sole iModel container without a project root\", containers: iModels.slice(0, 1), expected: [] },\r\n { name: \"iModel containers without a project root\", containers: iModels, expected: [] },\r\n {\r\n name: \"organization root, project root and iModel containers\",\r\n containers: [projectRoot, ...iModels, accountRoot, metadata(\"account-iModel\", accountId, \"account-iModel-id\")],\r\n expected: [\"project-root\", \"account-root\"],\r\n },\r\n ]) {\r\n it(`selects only roots for read discovery with ${name}`, async () => {\r\n query.resolves(containers);\r\n const sources = await SettingsContainers.getITwinSettingsSources(projectId);\r\n expect(sources?.map((source) => source.containerId) ?? []).to.deep.equal(expected);\r\n expect(requestToken.getCalls().map((call) => call.args[0].containerId)).to.deep.equal(expected);\r\n if (expected.length === 0)\r\n expect(sources).to.be.undefined;\r\n else\r\n expect(sources?.map((source) => source.priority)).to.deep.equal(expected.map((id) => id === \"account-root\" ? SettingsPriority.organization : SettingsPriority.iTwin));\r\n });\r\n }\r\n\r\n it(\"still rejects duplicate project roots for write lookup and read discovery\", async () => {\r\n query.resolves([projectRoot, ...iModels, metadata(\"duplicate-root\")]);\r\n for (const discover of [SettingsContainers.getITwinContainerId, SettingsContainers.getITwinSettingsSources]) {\r\n try {\r\n await discover(projectId);\r\n expect.fail(\"Duplicate roots must be rejected\");\r\n } catch (error) {\r\n expect((error as Error).message).to.include(\"Multiple iTwin settings containers\");\r\n }\r\n }\r\n });\r\n\r\n it(\"still rejects duplicate organization roots for read discovery\", async () => {\r\n query.resolves([accountRoot, metadata(\"duplicate-account-root\", accountId), ...iModels]);\r\n try {\r\n await SettingsContainers.getITwinSettingsSources(projectId);\r\n expect.fail(\"Duplicate organization roots must be rejected\");\r\n } catch (error) {\r\n expect((error as Error).message).to.include(\"Multiple iTwin settings containers\");\r\n }\r\n });\r\n});\r\n"]}
@@ -41,9 +41,10 @@ export declare namespace SettingsEditor {
41
41
  */
42
42
  export declare namespace SettingsContainers {
43
43
  /**
44
- * Query the [[BlobContainer]] service for the single settings container associated with a given iTwin.
45
- * @returns The containerId, or `undefined` if no container exists.
46
- * @throws if more than one settings container is found.
44
+ * Query the [[BlobContainer]] service for the iTwin-root settings container associated with a given iTwin.
45
+ * Only containers without an iModelId in their query metadata are considered.
46
+ * @returns The containerId, or `undefined` if no matching container is found.
47
+ * @throws if more than one matching container is found.
47
48
  */
48
49
  function getITwinContainerId(iTwinId: GuidString): Promise<WorkspaceContainerId | undefined>;
49
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsEditor.d.ts","sourceRoot":"","sources":["../../../src/workspace/SettingsEditor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAI7E,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIhF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD,gBAAgB;AAChB,yBAAiB,cAAc,CAAC;IAC9B,8DAA8D;IACvD,MAAM,aAAa,aAAa,CAAC;IAExC;;;;OAIG;IACH,SAAsB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,0BAA0B,CAAA;KAAE,CAAC,CAExI;IAED;;;;;OAKG;IACH,SAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,0BAA0B,CAAA;KAAE,GAAG,SAAS,CAAC,CAE9I;CACF;AAED;;;GAGG;AACH,yBAAiB,kBAAkB,CAAC;IAclC;;;;OAIG;IACH,SAAsB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CASxG;IAED;;;;;;;OAOG;IACH,SAAsB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,wBAAwB,EAAE,GAAG,SAAS,CAAC,CAwClH;CACF"}
1
+ {"version":3,"file":"SettingsEditor.d.ts","sourceRoot":"","sources":["../../../src/workspace/SettingsEditor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAI7E,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIhF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD,gBAAgB;AAChB,yBAAiB,cAAc,CAAC;IAC9B,8DAA8D;IACvD,MAAM,aAAa,aAAa,CAAC;IAExC;;;;OAIG;IACH,SAAsB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,0BAA0B,CAAA;KAAE,CAAC,CAExI;IAED;;;;;OAKG;IACH,SAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,0BAA0B,CAAA;KAAE,GAAG,SAAS,CAAC,CAE9I;CACF;AAED;;;GAGG;AACH,yBAAiB,kBAAkB,CAAC;IAclC;;;;;OAKG;IACH,SAAsB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CASxG;IAED;;;;;;;OAOG;IACH,SAAsB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,wBAAwB,EAAE,GAAG,SAAS,CAAC,CAyClH;CACF"}
@@ -61,12 +61,13 @@ export var SettingsContainers;
61
61
  return BlobContainer.service.queryContainersMetadata(userToken, { ...args, containerType: SettingsEditor.containerType });
62
62
  }
63
63
  /**
64
- * Query the [[BlobContainer]] service for the single settings container associated with a given iTwin.
65
- * @returns The containerId, or `undefined` if no container exists.
66
- * @throws if more than one settings container is found.
64
+ * Query the [[BlobContainer]] service for the iTwin-root settings container associated with a given iTwin.
65
+ * Only containers without an iModelId in their query metadata are considered.
66
+ * @returns The containerId, or `undefined` if no matching container is found.
67
+ * @throws if more than one matching container is found.
67
68
  */
68
69
  async function getITwinContainerId(iTwinId) {
69
- const containers = await queryContainers({ iTwinId });
70
+ const containers = (await queryContainers({ iTwinId })).filter((container) => undefined === container.iModelId);
70
71
  if (containers.length > 1) {
71
72
  ITwinSettingsError.throwError("multiple-itwin-settings-containers", {
72
73
  message: `Multiple iTwin settings containers were found for '${iTwinId}', so a container cannot be automatically selected.`,
@@ -88,7 +89,8 @@ export var SettingsContainers;
88
89
  if (undefined === BlobContainer.service)
89
90
  ITwinSettingsError.throwError("blob-service-unavailable", { message: "BlobContainer.service is not available." });
90
91
  const userToken = await IModelHost.getAccessToken();
91
- const containers = await queryContainers({ iTwinId, includeParentITwins: { filter: "accountOnly" } });
92
+ const containers = (await queryContainers({ iTwinId, includeParentITwins: { filter: "accountOnly" } }))
93
+ .filter((container) => undefined === container.iModelId);
92
94
  if (containers.length === 0)
93
95
  return undefined;
94
96
  const seenITwins = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsEditor.js","sourceRoot":"","sources":["../../../src/workspace/SettingsEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Workspace\r\n */\r\n\r\nimport { ITwinSettingsError } from \"@itwin/core-common\";\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { WorkspaceContainerId, WorkspaceDbSettingsProps } from \"./Workspace\";\r\nimport { BlobContainer } from \"../BlobContainerService\";\r\nimport { IModelHost } from \"../IModelHost\";\r\nimport { constructSettingsEditorForITwin, getSettingsEditorForITwin } from \"../internal/workspace/SettingsEditorImpl\";\r\nimport { EditableWorkspaceContainer, WorkspaceEditor } from \"./WorkspaceEditor\";\r\nimport { SettingsPriority } from \"./Settings\";\r\nimport { settingsWorkspaceDbName } from \"./SettingsDb\";\r\n\r\n/** The default resource name used to store settings in a [[WorkspaceDb]].\r\n * This is the key under which all settings are stored in the SQLite `strings` table.\r\n * When loading settings at runtime via [[Workspace.loadSettingsDictionary]], the `resourceName` defaults\r\n * to this value, ensuring the read and write paths always agree on which key to use.\r\n * @internal\r\n */\r\nexport const settingsResourceName = \"settingsDictionary\";\r\n\r\n/** @internal */\r\nexport namespace SettingsEditor {\r\n /** The type of workspace container used to store settings. */\r\n export const containerType = \"settings\";\r\n\r\n /**\r\n * Create a new [[SettingsEditor]] for creating new versions of [[SettingsDb]]s.\r\n * @note The caller becomes the owner of the SettingsEditor and is responsible for calling [[SettingsEditor.close]] on it when finished.\r\n * @note It is illegal to have more than one SettingsEditor active in a single session.\r\n */\r\n export async function constructForITwin(iTwinId: GuidString): Promise<{ editor: WorkspaceEditor; container: EditableWorkspaceContainer }> {\r\n return constructSettingsEditorForITwin(iTwinId);\r\n }\r\n\r\n /**\r\n * Obtain a [[SettingsEditor]] for the existing settings container associated with an iTwin.\r\n * @returns The editor and container, or `undefined` if no settings container exists for the iTwin.\r\n * @note The caller becomes the owner of the SettingsEditor and is responsible for calling [[SettingsEditor.close]] on it when finished.\r\n * @note It is illegal to have more than one SettingsEditor active in a single session.\r\n */\r\n export async function getForITwin(iTwinId: GuidString): Promise<{ editor: WorkspaceEditor; container: EditableWorkspaceContainer } | undefined> {\r\n return getSettingsEditorForITwin(iTwinId);\r\n }\r\n}\r\n\r\n/**\r\n * Help locate and obtain access to known containers with type \"settings\".\r\n * @internal\r\n */\r\nexport namespace SettingsContainers {\r\n /**\r\n * Query the [[BlobContainer]] service for all settings containers associated with a given iTwin.\r\n * Automatically filters by `containerType: \"settings\"`.\r\n * @note Requires [[IModelHost.authorizationClient]] to be configured.\r\n */\r\n async function queryContainers(args: BlobContainer.QueryContainerProps): Promise<BlobContainer.MetadataResponse[]> {\r\n if (undefined === BlobContainer.service)\r\n ITwinSettingsError.throwError(\"blob-service-unavailable\", { message: \"BlobContainer.service is not available.\" });\r\n\r\n const userToken = await IModelHost.getAccessToken();\r\n return BlobContainer.service.queryContainersMetadata(userToken, { ...args, containerType: SettingsEditor.containerType });\r\n }\r\n\r\n /**\r\n * Query the [[BlobContainer]] service for the single settings container associated with a given iTwin.\r\n * @returns The containerId, or `undefined` if no container exists.\r\n * @throws if more than one settings container is found.\r\n */\r\n export async function getITwinContainerId(iTwinId: GuidString): Promise<WorkspaceContainerId | undefined> {\r\n const containers = await queryContainers({ iTwinId });\r\n if (containers.length > 1) {\r\n ITwinSettingsError.throwError(\"multiple-itwin-settings-containers\", {\r\n message: `Multiple iTwin settings containers were found for '${iTwinId}', so a container cannot be automatically selected.`,\r\n iTwinId,\r\n });\r\n }\r\n return containers[0]?.containerId;\r\n }\r\n\r\n /**\r\n * Look up settings containers for an iTwin and its account iTwin and obtain read-only access tokens.\r\n * @returns Container props needed by [[IModelHost.getITwinWorkspace]]. The requested iTwin's settings\r\n * container is returned at [[SettingsPriority.iTwin]]; the account iTwin container is returned at\r\n * [[SettingsPriority.organization]].\r\n * @note Requires [[IModelHost.authorizationClient]] to be configured.\r\n * @note Requires [[BlobContainer.service]] to be configured.\r\n */\r\n export async function getITwinSettingsSources(iTwinId: GuidString): Promise<WorkspaceDbSettingsProps[] | undefined> {\r\n if (undefined === BlobContainer.service)\r\n ITwinSettingsError.throwError(\"blob-service-unavailable\", { message: \"BlobContainer.service is not available.\" });\r\n\r\n const userToken = await IModelHost.getAccessToken();\r\n const containers = await queryContainers({ iTwinId, includeParentITwins: { filter: \"accountOnly\" } });\r\n if (containers.length === 0) return undefined;\r\n\r\n const seenITwins = new Set<string>();\r\n const results: WorkspaceDbSettingsProps[] = [];\r\n for (const container of containers) {\r\n const ownerITwinId = container.iTwinId;\r\n if (undefined === ownerITwinId) {\r\n ITwinSettingsError.throwError(\"missing-container-itwinid\", {\r\n message: `Settings container '${container.containerId}' has no iTwinId. Please upgrade to a newer version of the BlobContainer service that populates iTwinId in query results.`,\r\n iTwinId,\r\n });\r\n }\r\n if (seenITwins.has(ownerITwinId)) {\r\n ITwinSettingsError.throwError(\"multiple-itwin-settings-containers\", {\r\n message: `Multiple iTwin settings containers were found for '${ownerITwinId}', so a container cannot be automatically selected.`,\r\n iTwinId: ownerITwinId,\r\n });\r\n }\r\n seenITwins.add(ownerITwinId);\r\n\r\n const priority = container.accountITwinId === ownerITwinId ? SettingsPriority.organization : SettingsPriority.iTwin;\r\n const tokenProps = await BlobContainer.service.requestToken({ containerId: container.containerId, accessLevel: \"read\", userToken });\r\n results.push({\r\n baseUri: tokenProps.baseUri,\r\n containerId: container.containerId,\r\n storageType: tokenProps.provider,\r\n accessToken: tokenProps.token,\r\n priority,\r\n dbName: settingsWorkspaceDbName,\r\n includePrerelease: true,\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SettingsEditor.js","sourceRoot":"","sources":["../../../src/workspace/SettingsEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Workspace\r\n */\r\n\r\nimport { ITwinSettingsError } from \"@itwin/core-common\";\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { WorkspaceContainerId, WorkspaceDbSettingsProps } from \"./Workspace\";\r\nimport { BlobContainer } from \"../BlobContainerService\";\r\nimport { IModelHost } from \"../IModelHost\";\r\nimport { constructSettingsEditorForITwin, getSettingsEditorForITwin } from \"../internal/workspace/SettingsEditorImpl\";\r\nimport { EditableWorkspaceContainer, WorkspaceEditor } from \"./WorkspaceEditor\";\r\nimport { SettingsPriority } from \"./Settings\";\r\nimport { settingsWorkspaceDbName } from \"./SettingsDb\";\r\n\r\n/** The default resource name used to store settings in a [[WorkspaceDb]].\r\n * This is the key under which all settings are stored in the SQLite `strings` table.\r\n * When loading settings at runtime via [[Workspace.loadSettingsDictionary]], the `resourceName` defaults\r\n * to this value, ensuring the read and write paths always agree on which key to use.\r\n * @internal\r\n */\r\nexport const settingsResourceName = \"settingsDictionary\";\r\n\r\n/** @internal */\r\nexport namespace SettingsEditor {\r\n /** The type of workspace container used to store settings. */\r\n export const containerType = \"settings\";\r\n\r\n /**\r\n * Create a new [[SettingsEditor]] for creating new versions of [[SettingsDb]]s.\r\n * @note The caller becomes the owner of the SettingsEditor and is responsible for calling [[SettingsEditor.close]] on it when finished.\r\n * @note It is illegal to have more than one SettingsEditor active in a single session.\r\n */\r\n export async function constructForITwin(iTwinId: GuidString): Promise<{ editor: WorkspaceEditor; container: EditableWorkspaceContainer }> {\r\n return constructSettingsEditorForITwin(iTwinId);\r\n }\r\n\r\n /**\r\n * Obtain a [[SettingsEditor]] for the existing settings container associated with an iTwin.\r\n * @returns The editor and container, or `undefined` if no settings container exists for the iTwin.\r\n * @note The caller becomes the owner of the SettingsEditor and is responsible for calling [[SettingsEditor.close]] on it when finished.\r\n * @note It is illegal to have more than one SettingsEditor active in a single session.\r\n */\r\n export async function getForITwin(iTwinId: GuidString): Promise<{ editor: WorkspaceEditor; container: EditableWorkspaceContainer } | undefined> {\r\n return getSettingsEditorForITwin(iTwinId);\r\n }\r\n}\r\n\r\n/**\r\n * Help locate and obtain access to known containers with type \"settings\".\r\n * @internal\r\n */\r\nexport namespace SettingsContainers {\r\n /**\r\n * Query the [[BlobContainer]] service for all settings containers associated with a given iTwin.\r\n * Automatically filters by `containerType: \"settings\"`.\r\n * @note Requires [[IModelHost.authorizationClient]] to be configured.\r\n */\r\n async function queryContainers(args: BlobContainer.QueryContainerProps): Promise<BlobContainer.MetadataResponse[]> {\r\n if (undefined === BlobContainer.service)\r\n ITwinSettingsError.throwError(\"blob-service-unavailable\", { message: \"BlobContainer.service is not available.\" });\r\n\r\n const userToken = await IModelHost.getAccessToken();\r\n return BlobContainer.service.queryContainersMetadata(userToken, { ...args, containerType: SettingsEditor.containerType });\r\n }\r\n\r\n /**\r\n * Query the [[BlobContainer]] service for the iTwin-root settings container associated with a given iTwin.\r\n * Only containers without an iModelId in their query metadata are considered.\r\n * @returns The containerId, or `undefined` if no matching container is found.\r\n * @throws if more than one matching container is found.\r\n */\r\n export async function getITwinContainerId(iTwinId: GuidString): Promise<WorkspaceContainerId | undefined> {\r\n const containers = (await queryContainers({ iTwinId })).filter((container) => undefined === container.iModelId);\r\n if (containers.length > 1) {\r\n ITwinSettingsError.throwError(\"multiple-itwin-settings-containers\", {\r\n message: `Multiple iTwin settings containers were found for '${iTwinId}', so a container cannot be automatically selected.`,\r\n iTwinId,\r\n });\r\n }\r\n return containers[0]?.containerId;\r\n }\r\n\r\n /**\r\n * Look up settings containers for an iTwin and its account iTwin and obtain read-only access tokens.\r\n * @returns Container props needed by [[IModelHost.getITwinWorkspace]]. The requested iTwin's settings\r\n * container is returned at [[SettingsPriority.iTwin]]; the account iTwin container is returned at\r\n * [[SettingsPriority.organization]].\r\n * @note Requires [[IModelHost.authorizationClient]] to be configured.\r\n * @note Requires [[BlobContainer.service]] to be configured.\r\n */\r\n export async function getITwinSettingsSources(iTwinId: GuidString): Promise<WorkspaceDbSettingsProps[] | undefined> {\r\n if (undefined === BlobContainer.service)\r\n ITwinSettingsError.throwError(\"blob-service-unavailable\", { message: \"BlobContainer.service is not available.\" });\r\n\r\n const userToken = await IModelHost.getAccessToken();\r\n const containers = (await queryContainers({ iTwinId, includeParentITwins: { filter: \"accountOnly\" } }))\r\n .filter((container) => undefined === container.iModelId);\r\n if (containers.length === 0) return undefined;\r\n\r\n const seenITwins = new Set<string>();\r\n const results: WorkspaceDbSettingsProps[] = [];\r\n for (const container of containers) {\r\n const ownerITwinId = container.iTwinId;\r\n if (undefined === ownerITwinId) {\r\n ITwinSettingsError.throwError(\"missing-container-itwinid\", {\r\n message: `Settings container '${container.containerId}' has no iTwinId. Please upgrade to a newer version of the BlobContainer service that populates iTwinId in query results.`,\r\n iTwinId,\r\n });\r\n }\r\n if (seenITwins.has(ownerITwinId)) {\r\n ITwinSettingsError.throwError(\"multiple-itwin-settings-containers\", {\r\n message: `Multiple iTwin settings containers were found for '${ownerITwinId}', so a container cannot be automatically selected.`,\r\n iTwinId: ownerITwinId,\r\n });\r\n }\r\n seenITwins.add(ownerITwinId);\r\n\r\n const priority = container.accountITwinId === ownerITwinId ? SettingsPriority.organization : SettingsPriority.iTwin;\r\n const tokenProps = await BlobContainer.service.requestToken({ containerId: container.containerId, accessLevel: \"read\", userToken });\r\n results.push({\r\n baseUri: tokenProps.baseUri,\r\n containerId: container.containerId,\r\n storageType: tokenProps.provider,\r\n accessToken: tokenProps.token,\r\n priority,\r\n dbName: settingsWorkspaceDbName,\r\n includePrerelease: true,\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-backend",
3
- "version": "5.15.0-dev.7",
3
+ "version": "5.15.0",
4
4
  "description": "iTwin.js backend components",
5
5
  "main": "lib/cjs/core-backend.js",
6
6
  "module": "lib/esm/core-backend.js",
@@ -27,11 +27,11 @@
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@opentelemetry/api": "^1.0.4",
30
- "@itwin/core-bentley": "5.15.0-dev.7",
31
- "@itwin/ecschema-metadata": "5.15.0-dev.7",
32
- "@itwin/core-common": "5.15.0-dev.7",
33
- "@itwin/core-geometry": "5.15.0-dev.7",
34
- "@itwin/core-quantity": "5.15.0-dev.7"
30
+ "@itwin/core-bentley": "5.15.0",
31
+ "@itwin/core-common": "5.15.0",
32
+ "@itwin/core-quantity": "5.15.0",
33
+ "@itwin/ecschema-metadata": "5.15.0",
34
+ "@itwin/core-geometry": "5.15.0"
35
35
  },
36
36
  "peerDependenciesMeta": {
37
37
  "@opentelemetry/api": {
@@ -57,7 +57,7 @@
57
57
  "@types/sinon": "^17.0.2",
58
58
  "@types/touch": "^3.1.2",
59
59
  "@types/ws": "^7.0.0",
60
- "@xmldom/xmldom": "~0.8.13",
60
+ "@xmldom/xmldom": "~0.8.15",
61
61
  "chai": "^4.3.10",
62
62
  "chai-as-promised": "^7.1.1",
63
63
  "cpx2": "^8.0.0",
@@ -71,19 +71,19 @@
71
71
  "typescript": "~5.6.2",
72
72
  "marked": "^14.1.3",
73
73
  "sql-formatter": "^15.4.6",
74
- "vite": "^6.4.3",
75
- "@itwin/build-tools": "5.15.0-dev.7",
76
- "@itwin/core-bentley": "5.15.0-dev.7",
77
- "@itwin/core-quantity": "5.15.0-dev.7",
78
- "@itwin/core-common": "5.15.0-dev.7",
79
- "@itwin/core-geometry": "5.15.0-dev.7",
80
- "@itwin/ecschema-metadata": "5.15.0-dev.7",
81
- "@itwin/ecsql-common": "5.15.0-dev.7",
82
- "internal-tools": "3.0.0-dev.69",
83
- "@itwin/ecschema-locaters": "5.15.0-dev.7"
74
+ "vite": "^6.4.4",
75
+ "@itwin/core-common": "5.15.0",
76
+ "@itwin/core-bentley": "5.15.0",
77
+ "@itwin/build-tools": "5.15.0",
78
+ "@itwin/ecschema-locaters": "5.15.0",
79
+ "@itwin/core-geometry": "5.15.0",
80
+ "@itwin/core-quantity": "5.15.0",
81
+ "@itwin/ecschema-metadata": "5.15.0",
82
+ "@itwin/ecsql-common": "5.15.0",
83
+ "internal-tools": "3.0.0-dev.69"
84
84
  },
85
85
  "dependencies": {
86
- "@bentley/imodeljs-native": "5.15.11",
86
+ "@bentley/imodeljs-native": "5.15.39",
87
87
  "@itwin/object-storage-azure": "^3.0.4",
88
88
  "@azure/storage-blob": "^12.28.0",
89
89
  "form-data": "^4.0.6",