@itwin/core-backend 5.10.0-dev.9 → 5.10.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 (278) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/lib/cjs/BriefcaseManager.d.ts +8 -1
  3. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseManager.js.map +1 -1
  5. package/lib/cjs/Category.d.ts +4 -4
  6. package/lib/cjs/Category.js.map +1 -1
  7. package/lib/cjs/ChangesetECAdaptor.d.ts +6 -6
  8. package/lib/cjs/ChangesetECAdaptor.js +4 -4
  9. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  10. package/lib/cjs/ChangesetReader.d.ts +84 -1
  11. package/lib/cjs/ChangesetReader.d.ts.map +1 -1
  12. package/lib/cjs/ChangesetReader.js +108 -12
  13. package/lib/cjs/ChangesetReader.js.map +1 -1
  14. package/lib/cjs/ClassRegistry.d.ts +3 -3
  15. package/lib/cjs/ClassRegistry.js +3 -3
  16. package/lib/cjs/ClassRegistry.js.map +1 -1
  17. package/lib/cjs/CodeSpecs.d.ts +3 -3
  18. package/lib/cjs/CodeSpecs.js.map +1 -1
  19. package/lib/cjs/DisplayStyle.d.ts +2 -2
  20. package/lib/cjs/DisplayStyle.js.map +1 -1
  21. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  22. package/lib/cjs/ECSqlStatement.js +4 -0
  23. package/lib/cjs/ECSqlStatement.js.map +1 -1
  24. package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -1
  25. package/lib/cjs/ECSqlSyncReader.js +1 -0
  26. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  27. package/lib/cjs/Element.d.ts +16 -13
  28. package/lib/cjs/Element.d.ts.map +1 -1
  29. package/lib/cjs/Element.js +8 -5
  30. package/lib/cjs/Element.js.map +1 -1
  31. package/lib/cjs/ElementAspect.d.ts +1 -1
  32. package/lib/cjs/ElementAspect.js.map +1 -1
  33. package/lib/cjs/ElementTreeWalker.d.ts +5 -5
  34. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  35. package/lib/cjs/Entity.d.ts +13 -5
  36. package/lib/cjs/Entity.d.ts.map +1 -1
  37. package/lib/cjs/Entity.js +13 -5
  38. package/lib/cjs/Entity.js.map +1 -1
  39. package/lib/cjs/ExternalSource.d.ts +2 -2
  40. package/lib/cjs/ExternalSource.js.map +1 -1
  41. package/lib/cjs/IModelDb.d.ts +112 -40
  42. package/lib/cjs/IModelDb.d.ts.map +1 -1
  43. package/lib/cjs/IModelDb.js +215 -42
  44. package/lib/cjs/IModelDb.js.map +1 -1
  45. package/lib/cjs/LineStyle.d.ts +6 -6
  46. package/lib/cjs/LineStyle.js.map +1 -1
  47. package/lib/cjs/LocalHub.d.ts +6 -0
  48. package/lib/cjs/LocalHub.d.ts.map +1 -1
  49. package/lib/cjs/LocalHub.js +23 -0
  50. package/lib/cjs/LocalHub.js.map +1 -1
  51. package/lib/cjs/Material.d.ts +1 -1
  52. package/lib/cjs/Material.js.map +1 -1
  53. package/lib/cjs/Model.d.ts +6 -6
  54. package/lib/cjs/Model.js.map +1 -1
  55. package/lib/cjs/Relationship.d.ts +13 -11
  56. package/lib/cjs/Relationship.d.ts.map +1 -1
  57. package/lib/cjs/Relationship.js +9 -7
  58. package/lib/cjs/Relationship.js.map +1 -1
  59. package/lib/cjs/SheetIndex.d.ts +4 -4
  60. package/lib/cjs/SheetIndex.js.map +1 -1
  61. package/lib/cjs/Texture.d.ts +1 -1
  62. package/lib/cjs/Texture.js.map +1 -1
  63. package/lib/cjs/TxnManager.d.ts.map +1 -1
  64. package/lib/cjs/TxnManager.js +7 -0
  65. package/lib/cjs/TxnManager.js.map +1 -1
  66. package/lib/cjs/ViewDefinition.d.ts +6 -6
  67. package/lib/cjs/ViewDefinition.js.map +1 -1
  68. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  69. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  70. package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -1
  71. package/lib/cjs/annotations/FrameGeometry.js +2 -3
  72. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  73. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +6 -2
  74. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +1 -0
  75. package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
  76. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  77. package/lib/cjs/domains/GenericElements.d.ts +2 -2
  78. package/lib/cjs/domains/GenericElements.js.map +1 -1
  79. package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
  80. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  81. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
  82. package/lib/cjs/internal/ElementLRUCache.js +23 -4
  83. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  84. package/lib/cjs/internal/HubMock.d.ts +24 -1
  85. package/lib/cjs/internal/HubMock.d.ts.map +1 -1
  86. package/lib/cjs/internal/HubMock.js +60 -39
  87. package/lib/cjs/internal/HubMock.js.map +1 -1
  88. package/lib/cjs/internal/ServerBasedLocks.d.ts +19 -1
  89. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  90. package/lib/cjs/internal/ServerBasedLocks.js +55 -1
  91. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  92. package/lib/cjs/internal/cross-package.d.ts +1 -1
  93. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  94. package/lib/cjs/internal/cross-package.js +1 -2
  95. package/lib/cjs/internal/cross-package.js.map +1 -1
  96. package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
  97. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +55 -9
  98. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  99. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  100. package/lib/cjs/internal/workspace/WorkspaceImpl.js +7 -11
  101. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  102. package/lib/cjs/workspace/SettingsSchemas.d.ts +20 -3
  103. package/lib/cjs/workspace/SettingsSchemas.d.ts.map +1 -1
  104. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  105. package/lib/cjs/workspace/Workspace.d.ts +3 -1
  106. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  107. package/lib/cjs/workspace/Workspace.js.map +1 -1
  108. package/lib/esm/BriefcaseManager.d.ts +8 -1
  109. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  110. package/lib/esm/BriefcaseManager.js.map +1 -1
  111. package/lib/esm/Category.d.ts +4 -4
  112. package/lib/esm/Category.js.map +1 -1
  113. package/lib/esm/ChangesetECAdaptor.d.ts +6 -6
  114. package/lib/esm/ChangesetECAdaptor.js +4 -4
  115. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  116. package/lib/esm/ChangesetReader.d.ts +84 -1
  117. package/lib/esm/ChangesetReader.d.ts.map +1 -1
  118. package/lib/esm/ChangesetReader.js +108 -12
  119. package/lib/esm/ChangesetReader.js.map +1 -1
  120. package/lib/esm/ClassRegistry.d.ts +3 -3
  121. package/lib/esm/ClassRegistry.js +3 -3
  122. package/lib/esm/ClassRegistry.js.map +1 -1
  123. package/lib/esm/CodeSpecs.d.ts +3 -3
  124. package/lib/esm/CodeSpecs.js.map +1 -1
  125. package/lib/esm/DisplayStyle.d.ts +2 -2
  126. package/lib/esm/DisplayStyle.js.map +1 -1
  127. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  128. package/lib/esm/ECSqlStatement.js +4 -0
  129. package/lib/esm/ECSqlStatement.js.map +1 -1
  130. package/lib/esm/ECSqlSyncReader.d.ts.map +1 -1
  131. package/lib/esm/ECSqlSyncReader.js +1 -0
  132. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  133. package/lib/esm/Element.d.ts +16 -13
  134. package/lib/esm/Element.d.ts.map +1 -1
  135. package/lib/esm/Element.js +8 -5
  136. package/lib/esm/Element.js.map +1 -1
  137. package/lib/esm/ElementAspect.d.ts +1 -1
  138. package/lib/esm/ElementAspect.js.map +1 -1
  139. package/lib/esm/ElementTreeWalker.d.ts +5 -5
  140. package/lib/esm/ElementTreeWalker.js.map +1 -1
  141. package/lib/esm/Entity.d.ts +13 -5
  142. package/lib/esm/Entity.d.ts.map +1 -1
  143. package/lib/esm/Entity.js +13 -5
  144. package/lib/esm/Entity.js.map +1 -1
  145. package/lib/esm/ExternalSource.d.ts +2 -2
  146. package/lib/esm/ExternalSource.js.map +1 -1
  147. package/lib/esm/IModelDb.d.ts +112 -40
  148. package/lib/esm/IModelDb.d.ts.map +1 -1
  149. package/lib/esm/IModelDb.js +216 -43
  150. package/lib/esm/IModelDb.js.map +1 -1
  151. package/lib/esm/LineStyle.d.ts +6 -6
  152. package/lib/esm/LineStyle.js.map +1 -1
  153. package/lib/esm/LocalHub.d.ts +6 -0
  154. package/lib/esm/LocalHub.d.ts.map +1 -1
  155. package/lib/esm/LocalHub.js +23 -0
  156. package/lib/esm/LocalHub.js.map +1 -1
  157. package/lib/esm/Material.d.ts +1 -1
  158. package/lib/esm/Material.js.map +1 -1
  159. package/lib/esm/Model.d.ts +6 -6
  160. package/lib/esm/Model.js.map +1 -1
  161. package/lib/esm/Relationship.d.ts +13 -11
  162. package/lib/esm/Relationship.d.ts.map +1 -1
  163. package/lib/esm/Relationship.js +9 -7
  164. package/lib/esm/Relationship.js.map +1 -1
  165. package/lib/esm/SheetIndex.d.ts +4 -4
  166. package/lib/esm/SheetIndex.js.map +1 -1
  167. package/lib/esm/Texture.d.ts +1 -1
  168. package/lib/esm/Texture.js.map +1 -1
  169. package/lib/esm/TxnManager.d.ts.map +1 -1
  170. package/lib/esm/TxnManager.js +7 -0
  171. package/lib/esm/TxnManager.js.map +1 -1
  172. package/lib/esm/ViewDefinition.d.ts +6 -6
  173. package/lib/esm/ViewDefinition.js.map +1 -1
  174. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  175. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  176. package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -1
  177. package/lib/esm/annotations/FrameGeometry.js +2 -3
  178. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  179. package/lib/esm/domains/FunctionalElements.d.ts +1 -1
  180. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  181. package/lib/esm/domains/GenericElements.d.ts +2 -2
  182. package/lib/esm/domains/GenericElements.js.map +1 -1
  183. package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
  184. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  185. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
  186. package/lib/esm/internal/ElementLRUCache.js +23 -4
  187. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  188. package/lib/esm/internal/HubMock.d.ts +24 -1
  189. package/lib/esm/internal/HubMock.d.ts.map +1 -1
  190. package/lib/esm/internal/HubMock.js +61 -40
  191. package/lib/esm/internal/HubMock.js.map +1 -1
  192. package/lib/esm/internal/ServerBasedLocks.d.ts +19 -1
  193. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
  194. package/lib/esm/internal/ServerBasedLocks.js +55 -1
  195. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  196. package/lib/esm/internal/cross-package.d.ts +1 -1
  197. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  198. package/lib/esm/internal/cross-package.js +1 -1
  199. package/lib/esm/internal/cross-package.js.map +1 -1
  200. package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
  201. package/lib/esm/internal/workspace/SettingsSchemasImpl.js +55 -9
  202. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  203. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  204. package/lib/esm/internal/workspace/WorkspaceImpl.js +7 -11
  205. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  206. package/lib/esm/test/ElementLRUCache.test.js +60 -0
  207. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  208. package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts +2 -0
  209. package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts.map +1 -0
  210. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +239 -0
  211. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -0
  212. package/lib/esm/test/annotations/FrameGeometry.test.js +2 -1
  213. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  214. package/lib/esm/test/ecdb/CTE.test.js +1 -0
  215. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  216. package/lib/esm/test/ecdb/ECSqlQuery.test.js +10 -2
  217. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  218. package/lib/esm/test/ecdb/ECSqlStatement.test.js +10 -0
  219. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  220. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +1 -0
  221. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  222. package/lib/esm/test/ecdb/QueryReaders.test.js +13 -0
  223. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  224. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +1 -0
  225. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  226. package/lib/esm/test/element/DeleteDefinitionElements.test.js +6 -2
  227. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  228. package/lib/esm/test/element/ElementRoundTrip.test.js +5 -0
  229. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  230. package/lib/esm/test/element/ExcludedElements.test.js +1 -0
  231. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  232. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +10 -0
  233. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  234. package/lib/esm/test/hubaccess/SemanticRebase.test.js +1 -0
  235. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  236. package/lib/esm/test/imodel/IModel.test.js +31 -0
  237. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  238. package/lib/esm/test/schema/ClassRegistry.test.js +3 -0
  239. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  240. package/lib/esm/test/schema/IModelSchemaContext.test.js +2 -0
  241. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  242. package/lib/esm/test/schema/SchemaViewHidden.test.d.ts +2 -0
  243. package/lib/esm/test/schema/SchemaViewHidden.test.d.ts.map +1 -0
  244. package/lib/esm/test/schema/SchemaViewHidden.test.js +275 -0
  245. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -0
  246. package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts +2 -0
  247. package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts.map +1 -0
  248. package/lib/esm/test/schema/SchemaViewKoQ.test.js +184 -0
  249. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -0
  250. package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts +2 -0
  251. package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts.map +1 -0
  252. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +141 -0
  253. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -0
  254. package/lib/esm/test/schema/SchemaViewValidation.test.d.ts +2 -0
  255. package/lib/esm/test/schema/SchemaViewValidation.test.d.ts.map +1 -0
  256. package/lib/esm/test/schema/SchemaViewValidation.test.js +475 -0
  257. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -0
  258. package/lib/esm/test/standalone/ChangesetReader.test.js +945 -337
  259. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  260. package/lib/esm/test/standalone/DeleteElements.test.js +45 -0
  261. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  262. package/lib/esm/test/standalone/IModelWrite.test.js +6 -0
  263. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  264. package/lib/esm/test/standalone/ServerBasedLocks.test.js +62 -0
  265. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  266. package/lib/esm/test/standalone/Settings.test.js +2 -0
  267. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  268. package/lib/esm/test/standalone/SettingsSchemas.test.js +397 -0
  269. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  270. package/lib/esm/test/standalone/Workspace.test.js +23 -0
  271. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  272. package/lib/esm/workspace/SettingsSchemas.d.ts +20 -3
  273. package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -1
  274. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  275. package/lib/esm/workspace/Workspace.d.ts +3 -1
  276. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  277. package/lib/esm/workspace/Workspace.js.map +1 -1
  278. package/package.json +15 -15
@@ -486,9 +486,6 @@ class EditorImpl {
486
486
  }
487
487
  }
488
488
  class EditorContainerImpl extends WorkspaceContainerImpl {
489
- get cloudContainer() {
490
- return super.cloudContainer;
491
- }
492
489
  get cloudProps() {
493
490
  const cloudContainer = this.cloudContainer;
494
491
  if (undefined === cloudContainer)
@@ -522,19 +519,17 @@ class EditorContainerImpl extends WorkspaceContainerImpl {
522
519
  acquireWriteLock(user) {
523
520
  if (this.cloudContainer) {
524
521
  this.cloudContainer.acquireWriteLock(user);
525
- this.cloudContainer.writeLockHeldBy = user;
522
+ CloudSqlite_1.CloudSqlite.addHiddenProperty(this.cloudContainer, "writeLockHeldBy", user);
526
523
  }
527
524
  }
528
525
  releaseWriteLock() {
529
- if (this.cloudContainer) {
530
- this.cloudContainer.releaseWriteLock();
531
- this.cloudContainer.writeLockHeldBy = undefined;
532
- }
526
+ if (this.cloudContainer)
527
+ CloudSqlite_1.CloudSqlite.releaseWriteLock(this.cloudContainer);
533
528
  }
534
529
  abandonChanges() {
535
530
  if (this.cloudContainer) {
536
531
  this.cloudContainer.abandonChanges();
537
- this.cloudContainer.writeLockHeldBy = undefined;
532
+ CloudSqlite_1.CloudSqlite.addHiddenProperty(this.cloudContainer, "writeLockHeldBy", undefined);
538
533
  }
539
534
  }
540
535
  async withEditableDb(user, operation, props) {
@@ -614,9 +609,10 @@ class EditableDbImpl extends WorkspaceDbImpl {
614
609
  close() {
615
610
  if (this.isOpen) {
616
611
  // whenever we close an EditableDb, update the name of the last editor in the manifest
617
- const lastEditedBy = this._container.cloudContainer?.writeLockHeldBy;
612
+ const cloudContainer = this.container.cloudContainer;
613
+ const lastEditedBy = cloudContainer === undefined ? undefined : CloudSqlite_1.CloudSqlite.getWriteLockHeldBy(cloudContainer);
618
614
  if (lastEditedBy !== undefined)
619
- this.updateManifest({ ...this.manifest, lastEditedBy });
615
+ this.updateManifest({ ...this.manifest, lastEditedBy, lastEditedAt: new Date().toISOString() });
620
616
  // make sure all changes were saved before we close
621
617
  this.sqliteDb.saveChanges();
622
618
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/WorkspaceImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { createHash } from \"crypto\";\nimport * as fs from \"fs-extra\";\nimport { dirname, extname, join } from \"path\";\nimport { AccessToken, assert, BeEvent, DbResult, Mutable, OpenMode, ProcessDetector } from \"@itwin/core-bentley\";\nimport { CloudSqliteError, FilePropertyProps, LocalDirName, LocalFileName, WorkspaceError } from \"@itwin/core-common\";\nimport { CloudSqlite } from \"../../CloudSqlite\";\nimport { IModelHost, KnownLocations } from \"../../IModelHost\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { SQLiteDb } from \"../../SQLiteDb\";\nimport { SqliteStatement } from \"../../SqliteStatement\";\nimport { SettingName, Settings, SettingsContainer, SettingsDictionaryProps, SettingsPriority } from \"../../workspace/Settings\";\nimport { isSettingsDb, queryStringResourceNames } from \"../../workspace/SettingsDb\";\nimport { settingsResourceName } from \"../../workspace/SettingsEditor\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport {\n GetWorkspaceContainerArgs, Workspace, WorkspaceContainer, WorkspaceContainerId, WorkspaceContainerProps, WorkspaceDb, WorkspaceDbCloudProps,\n WorkspaceDbFullName, WorkspaceDbLoadError, WorkspaceDbLoadErrors, WorkspaceDbManifest, WorkspaceDbName, WorkspaceDbNameAndVersion, WorkspaceDbProps,\n WorkspaceDbQueryResourcesArgs, WorkspaceDbSettingsProps, WorkspaceDbVersion, WorkspaceOpts, WorkspaceResourceName, WorkspaceSettingNames,\n} from \"../../workspace/Workspace\";\nimport { CreateNewWorkspaceContainerArgs, CreateNewWorkspaceDbVersionArgs, EditableWorkspaceContainer, EditableWorkspaceDb, WorkspaceEditor, WorkspaceEditor as WorkspaceEditorNs } from \"../../workspace/WorkspaceEditor\";\nimport { WorkspaceSqliteDb } from \"./WorkspaceSqliteDb\";\nimport { SettingsImpl } from \"./SettingsImpl\";\nimport { _implementationProhibited, _nativeDb } from \"../Symbols\";\nimport { getOnlineStatus } from \"../OnlineStatus\";\nimport { BlobContainer } from \"../../BlobContainerService\";\n\n\nfunction workspaceDbNameWithDefault(dbName?: WorkspaceDbName): WorkspaceDbName {\n return dbName ?? \"workspace-db\";\n}\n\n/** file extension for local WorkspaceDbs */\nexport const workspaceDbFileExt = \"itwin-workspace\";\n\ninterface WorkspaceCloudContainer extends CloudSqlite.CloudContainer {\n connectCount: number;\n sharedConnect(): boolean;\n sharedDisconnect(): void;\n}\n\ninterface WorkspaceCloudCache extends CloudSqlite.CloudCache {\n workspaceContainers: Map<string, WorkspaceCloudContainer>;\n}\n\nfunction makeWorkspaceCloudCache(arg: CloudSqlite.CreateCloudCacheArg): WorkspaceCloudCache {\n const cache = CloudSqlite.CloudCaches.getCache(arg) as WorkspaceCloudCache;\n if (undefined === cache.workspaceContainers) // if we just created this container, add the map.\n CloudSqlite.addHiddenProperty(cache, \"workspaceContainers\", new Map<string, WorkspaceCloudContainer>());\n return cache;\n}\n\nfunction getContainerFullId(props: WorkspaceContainerProps) {\n return `${props.baseUri}/${props.containerId}`;\n}\n\nfunction getWorkspaceCloudContainer(props: CloudSqlite.ContainerAccessProps, cache: WorkspaceCloudCache) {\n const id = getContainerFullId(props);\n let cloudContainer = cache.workspaceContainers.get(id);\n if (undefined !== cloudContainer)\n return cloudContainer;\n\n cloudContainer = CloudSqlite.createCloudContainer(props) as WorkspaceCloudContainer;\n cache.workspaceContainers.set(id, cloudContainer);\n cloudContainer.connectCount = 0;\n CloudSqlite.addHiddenProperty(cloudContainer, \"sharedConnect\", function (this: WorkspaceCloudContainer) {\n if (this.connectCount++ === 0) {\n this.connect(cache);\n return true;\n }\n\n return false;\n });\n\n CloudSqlite.addHiddenProperty(cloudContainer, \"sharedDisconnect\", function (this: WorkspaceCloudContainer) {\n if (--this.connectCount <= 0) {\n this.disconnect();\n cache.workspaceContainers.delete(id);\n this.connectCount = 0;\n }\n });\n\n return cloudContainer;\n}\n\nclass WorkspaceContainerImpl implements WorkspaceContainer {\n public readonly [_implementationProhibited] = undefined;\n public readonly workspace: WorkspaceImpl;\n public readonly filesDir: LocalDirName;\n public readonly id: WorkspaceContainerId;\n public readonly fromProps: WorkspaceContainerProps;\n private readonly _cloudContainer?: WorkspaceCloudContainer | undefined;\n\n public get cloudContainer(): WorkspaceCloudContainer | undefined {\n return this._cloudContainer;\n }\n\n protected _wsDbs = new Map<string, WorkspaceDb>();\n public get dirName() { return join(this.workspace.containerDir, this.id); }\n\n public constructor(workspace: WorkspaceImpl, props: WorkspaceContainerProps & { accessToken: AccessToken }) {\n validateWorkspaceContainerId(props.containerId);\n this.workspace = workspace;\n this.id = props.containerId;\n this.fromProps = props;\n\n if (props.baseUri !== \"\")\n this._cloudContainer = getWorkspaceCloudContainer(props, this.workspace.getCloudCache());\n\n workspace.addContainer(this);\n this.filesDir = join(this.dirName, \"Files\");\n\n const cloudContainer = this.cloudContainer;\n if (undefined === cloudContainer)\n return;\n\n // sharedConnect returns true if we just connected (if the container is shared, it may have already been connected)\n if (cloudContainer.sharedConnect() && false !== props.syncOnConnect) {\n try {\n if (ProcessDetector.isMobileAppBackend || ProcessDetector.isElectronAppBackend) {\n // Even though we've already confirmed that we are running in a native app backend,\n // having code here that references NativeHost causes a runtime exception. So we use\n // getOnlineStatus to determine whether we're online, which NativeHost keeps up to date.\n if (!getOnlineStatus()) {\n // If running in a native app and we're offline, don't check for changes.\n // Doing so will fail and be caught below, but it has to wait for the network\n // timeout.\n return;\n }\n }\n cloudContainer.checkForChanges();\n } catch {\n // must be offline\n }\n }\n }\n\n public resolveDbFileName(props: WorkspaceDbProps): WorkspaceDbFullName {\n const dbName = workspaceDbNameWithDefault(props.dbName);\n const container = this.cloudContainer;\n if (undefined === container)\n return join(this.dirName, `${dbName}.${workspaceDbFileExt}`); // local file, versions not allowed\n\n return CloudSqlite.querySemverMatch({ ...props, container, dbName });\n }\n\n public addWorkspaceDb(toAdd: WorkspaceDb) {\n if (undefined !== this._wsDbs.get(toAdd.dbFileName))\n WorkspaceError.throwError(\"already-exists\", { message: `workspaceDb '${toAdd.dbName}' already exists in workspace` });\n this._wsDbs.set(toAdd.dbFileName, toAdd);\n }\n\n public getWorkspaceDb(props?: WorkspaceDbProps): WorkspaceDb {\n const dbFileName = this.resolveDbFileName(props ?? {});\n return this._wsDbs.get(dbFileName) ?? new WorkspaceDbImpl(props ?? {}, this);\n }\n\n public closeWorkspaceDb(toDrop: WorkspaceDb) {\n const wsDb = this._wsDbs.get(toDrop.dbFileName);\n if (wsDb === toDrop) {\n this._wsDbs.delete(toDrop.dbFileName);\n wsDb.close();\n }\n }\n\n public close() {\n for (const [_name, db] of this._wsDbs)\n db.close();\n this._wsDbs.clear();\n this.cloudContainer?.sharedDisconnect();\n }\n}\n\n/** Implementation of WorkspaceDb */\nclass WorkspaceDbImpl implements WorkspaceDb {\n public readonly [_implementationProhibited] = undefined;\n public readonly sqliteDb = new WorkspaceSqliteDb();\n public readonly dbName: WorkspaceDbName;\n protected readonly _container: WorkspaceContainer;\n public readonly onClose = new BeEvent<() => void>();\n public readonly dbFileName: string;\n protected _manifest?: WorkspaceDbManifest;\n\n /** true if this WorkspaceDb is currently open */\n public get isOpen() { return this.sqliteDb.isOpen; }\n public get container(): WorkspaceContainer { return this._container; }\n public queryFileResource(rscName: WorkspaceResourceName): { localFileName: LocalFileName, info: IModelJsNative.EmbedFileQuery } | undefined {\n const info = this.sqliteDb[_nativeDb].queryEmbeddedFile(rscName);\n if (undefined === info)\n return undefined;\n\n // since resource names can contain illegal characters, path separators, etc., we make the local file name from its hash, in hex.\n let localFileName = join(this._container.filesDir, createHash(\"sha1\").update(this.dbFileName).update(rscName).digest(\"hex\"));\n if (info.fileExt !== \"\") // since some applications may expect to see the extension, append it here if it was supplied.\n localFileName = `${localFileName}.${info.fileExt}`;\n return { localFileName, info };\n }\n\n public constructor(props: WorkspaceDbProps, container: WorkspaceContainer) {\n this.dbName = workspaceDbNameWithDefault(props.dbName);\n CloudSqlite.validateDbName(this.dbName);\n this._container = container;\n this.dbFileName = container.resolveDbFileName(props);\n container.addWorkspaceDb(this);\n if (true === props.prefetch)\n this.prefetch();\n }\n\n public open() {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.Readonly, this._container.cloudContainer);\n }\n\n public close() {\n if (this.isOpen) {\n this.onClose.raiseEvent();\n this.sqliteDb.closeDb();\n this._container.closeWorkspaceDb(this);\n }\n }\n public get version() {\n const cloudContainer = this.container.cloudContainer;\n if (undefined === cloudContainer)\n return \"1.0.0\"; // local file, no versioning. return default\n return CloudSqlite.parseDbFileName(this.dbFileName).version;\n }\n\n public get manifest(): WorkspaceDbManifest {\n return this._manifest ??= this.withOpenDb((db) => {\n const manifestJson = db[_nativeDb].queryFileProperty(workspaceManifestProperty, true) as string | undefined;\n return manifestJson ? JSON.parse(manifestJson) : { workspaceName: this.dbName };\n });\n }\n\n private withOpenDb<T>(operation: (db: WorkspaceSqliteDb) => T): T {\n const done = this.isOpen ? () => { } : (this.open(), () => this.close());\n try {\n return operation(this.sqliteDb);\n } finally {\n done();\n }\n }\n\n public getString(rscName: WorkspaceResourceName): string | undefined {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value from strings WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getValueString(0) : undefined;\n });\n });\n }\n\n public getBlobReader(rscName: WorkspaceResourceName): SQLiteDb.BlobIO {\n return this.sqliteDb.withSqliteStatement(\"SELECT rowid from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n const blobReader = SQLiteDb.createBlobIO();\n blobReader.open(this.sqliteDb[_nativeDb], { tableName: \"blobs\", columnName: \"value\", row: stmt.getValueInteger(0) });\n return blobReader;\n });\n }\n\n public getBlob(rscName: WorkspaceResourceName): Uint8Array | undefined {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getValueBlob(0) : undefined;\n });\n });\n }\n\n public getFile(rscName: WorkspaceResourceName, targetFileName?: LocalFileName): LocalFileName | undefined {\n return this.withOpenDb((db) => {\n const file = this.queryFileResource(rscName);\n if (!file)\n return undefined;\n\n const info = file.info;\n const localFileName = targetFileName ?? file.localFileName;\n\n // check whether the file is already up to date.\n const stat = fs.existsSync(localFileName) && fs.statSync(localFileName);\n if (stat && Math.round(stat.mtimeMs) === info.date && stat.size === info.size)\n return localFileName; // yes, we're done\n\n // extractEmbeddedFile fails if the file exists or if the directory does not exist\n if (stat)\n fs.removeSync(localFileName);\n else\n IModelJsFs.recursiveMkDirSync(dirname(localFileName));\n\n db[_nativeDb].extractEmbeddedFile({ name: rscName, localFileName });\n const date = new Date(info.date);\n fs.utimesSync(localFileName, date, date); // set the last-modified date of the file to match date in container\n fs.chmodSync(localFileName, \"0444\"); // set file readonly\n return localFileName;\n });\n }\n\n public prefetch(opts?: CloudSqlite.PrefetchProps): CloudSqlite.CloudPrefetch {\n const cloudContainer = this._container.cloudContainer;\n if (cloudContainer === undefined)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"no cloud container to prefetch\" });\n return CloudSqlite.startCloudPrefetch(cloudContainer, this.dbFileName, opts);\n }\n\n public queryResources(args: WorkspaceDbQueryResourcesArgs): void {\n const table = \"blob\" !== args.type ? \"strings\" : \"blobs\";\n this.withOpenDb((db) => {\n const where = undefined !== args.namePattern ? ` WHERE id ${args.nameCompare ?? \"=\"} ?` : \"\";\n db.withSqliteStatement(`SELECT id from ${table}${where}`, (stmt) => {\n function* makeIterable() {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n yield stmt.getValueString(0);\n }\n }\n\n if (undefined !== args.namePattern) {\n stmt.bindString(1, args.namePattern);\n }\n\n args.callback(makeIterable());\n });\n });\n }\n}\n\n/** Implementation of Workspace */\nclass WorkspaceImpl implements Workspace {\n public readonly [_implementationProhibited] = undefined;\n private _containers = new Map<WorkspaceContainerId, WorkspaceContainerImpl>();\n public readonly containerDir: LocalDirName;\n public readonly settings: Settings;\n protected _cloudCache?: WorkspaceCloudCache;\n public getCloudCache(): WorkspaceCloudCache {\n return this._cloudCache ??= makeWorkspaceCloudCache({ cacheName: \"Workspace\", cacheSize: \"20G\" });\n }\n\n public constructor(settings: Settings, opts?: WorkspaceOpts) {\n this.settings = settings;\n this.containerDir = opts?.containerDir ?? join(IModelHost.cacheDir, \"Workspace\");\n let settingsFiles = opts?.settingsFiles;\n if (settingsFiles) {\n if (typeof settingsFiles === \"string\")\n settingsFiles = [settingsFiles];\n settingsFiles.forEach((file) => settings.addFile(file, SettingsPriority.application));\n }\n }\n\n public addContainer(toAdd: WorkspaceContainerImpl) {\n if (undefined !== this._containers.get(toAdd.id))\n WorkspaceError.throwError(\"container-exists\", { message: `container ${toAdd.id} already exists in workspace` });\n this._containers.set(toAdd.id, toAdd);\n }\n\n public findContainer(containerId: WorkspaceContainerId) {\n return this._containers.get(containerId);\n }\n\n public getContainer(props: GetWorkspaceContainerArgs): WorkspaceContainer {\n return this.findContainer(props.containerId) ?? new WorkspaceContainerImpl(this, props);\n }\n\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<WorkspaceContainer> {\n if (props.accessToken)\n return this.getContainer({ ...props, accessToken: props.accessToken });\n\n const accessToken = (props.baseUri === \"\" || props.isPublic)\n ? \"\"\n : await CloudSqlite.requestToken({ ...props, accessLevel: \"read\" });\n return this.getContainer({ ...props, accessToken });\n }\n\n public async getWorkspaceDb(props: WorkspaceDbCloudProps): Promise<WorkspaceDb> {\n let container: WorkspaceContainer | undefined = this.findContainer(props.containerId);\n if (undefined === container) {\n const accessToken = (props.baseUri === \"\" || props.isPublic) ? \"\" : await CloudSqlite.requestToken({ accessLevel: \"read\", ...props });\n container = new WorkspaceContainerImpl(this, { ...props, accessToken });\n }\n return container.getWorkspaceDb(props);\n }\n\n public async loadSettingsDictionary(props: WorkspaceDbSettingsProps | WorkspaceDbSettingsProps[], problems?: WorkspaceDbLoadError[]) {\n if (!Array.isArray(props))\n props = [props];\n\n const getSettingsResourceNames = (db: WorkspaceDb, dbProps: WorkspaceDbSettingsProps): WorkspaceResourceName[] => {\n if (!isSettingsDb(db))\n return [dbProps.resourceName ?? settingsResourceName];\n\n const all = queryStringResourceNames(db);\n // If resourceName is supplied, load it last so it has highest precedence at the same priority.\n return dbProps.resourceName !== undefined\n ? [...all.filter((name) => name !== dbProps.resourceName), dbProps.resourceName]\n : all;\n };\n\n for (const prop of props) {\n const db = await this.getWorkspaceDb(prop);\n db.open();\n try {\n const resourceNames = getSettingsResourceNames(db, prop);\n\n for (const resourceName of resourceNames) {\n try {\n const manifest = db.manifest;\n const dictProps: SettingsDictionaryProps = { name: resourceName, workspaceDb: db, priority: prop.priority };\n // don't load if we already have this dictionary. Happens if the same WorkspaceDb is in more than one list\n if (undefined === this.settings.getDictionary(dictProps)) {\n const settingsJson = db.getString(resourceName);\n if (undefined === settingsJson)\n throwWorkspaceDbLoadError(`could not load setting dictionary resource '${resourceName}' from: '${manifest.workspaceName}'`, prop, db);\n\n this.settings.addJson(dictProps, settingsJson);\n const dict = this.settings.getDictionary(dictProps);\n if (dict) {\n Workspace.onSettingsDictionaryLoadedFn({ dict, from: db });\n // if the dictionary we just loaded has a \"settingsWorkspaces\" entry, load them too, recursively\n const nested = dict.getSetting<WorkspaceDbSettingsProps[]>(WorkspaceSettingNames.settingsWorkspaces);\n if (nested !== undefined) {\n IModelHost.settingsSchemas.validateSetting<WorkspaceDbSettingsProps[]>(nested, WorkspaceSettingNames.settingsWorkspaces);\n await this.loadSettingsDictionary(nested, problems);\n }\n }\n }\n } catch (e) {\n problems?.push(e as WorkspaceDbLoadError);\n }\n }\n } catch (e) {\n problems?.push(e as WorkspaceDbLoadError);\n } finally {\n db.close();\n }\n }\n }\n\n public close() {\n this.settings.close();\n for (const [_id, container] of this._containers)\n container.close();\n this._containers.clear();\n }\n\n public resolveWorkspaceDbSetting(settingName: SettingName, filter?: Workspace.DbListFilter): WorkspaceDbCloudProps[] {\n const settingDef = IModelHost.settingsSchemas.settingDefs.get(settingName);\n const combine = settingDef?.combineArray === true;\n filter = filter ?? (() => true);\n const result: WorkspaceDbCloudProps[] = [];\n for (const entry of this.settings.getSettingEntries<WorkspaceDbCloudProps[]>(settingName)) {\n for (const dbProp of entry.value) {\n if (filter(dbProp, entry.dictionary)) {\n result.push(dbProp);\n }\n }\n\n if (!combine) {\n break;\n }\n }\n\n return result;\n }\n\n public async getWorkspaceDbs(args: Workspace.DbListOrSettingName & { filter?: Workspace.DbListFilter, problems?: WorkspaceDbLoadError[] }): Promise<WorkspaceDb[]> {\n const dbList = (args.settingName !== undefined) ? this.resolveWorkspaceDbSetting(args.settingName, args.filter) : args.dbs;\n const result: WorkspaceDb[] = [];\n const pushUnique = (wsDb: WorkspaceDb) => {\n for (const db of result) {\n // if we already have this db, skip it. The test below also has to consider that we create a separate WorkspaceDb object for the same\n // database from more than one Workspace (though then they must use a \"shared\" CloudContainer).\n if (db === wsDb || ((db.container.cloudContainer === wsDb.container.cloudContainer) && (db.dbFileName === wsDb.dbFileName)))\n return; // this db is redundant\n }\n result.push(wsDb);\n };\n\n for (const dbProps of dbList) {\n try {\n pushUnique(await this.getWorkspaceDb(dbProps));\n } catch (e) {\n const loadErr = e as WorkspaceDbLoadError;\n loadErr.wsDbProps = dbProps;\n args.problems?.push(loadErr);\n }\n }\n return result;\n }\n}\n\nconst workspaceEditorName = \"WorkspaceEditor\"; // name of the cache for the editor workspace\nclass EditorWorkspaceImpl extends WorkspaceImpl {\n public override getCloudCache(): WorkspaceCloudCache {\n return this._cloudCache ??= makeWorkspaceCloudCache({ cacheName: workspaceEditorName, cacheSize: \"20G\" });\n }\n}\n\nclass EditorImpl implements WorkspaceEditor {\n public readonly [_implementationProhibited] = undefined;\n public workspace = new EditorWorkspaceImpl(new SettingsImpl(), { containerDir: join(IModelHost.cacheDir, workspaceEditorName) });\n\n public async initializeContainer(args: CreateNewWorkspaceContainerArgs) {\n class CloudAccess extends CloudSqlite.DbAccess<WorkspaceSqliteDb> {\n protected static override _cacheName = workspaceEditorName;\n public static async initializeWorkspace(args: CreateNewWorkspaceContainerArgs) {\n const props = await this.createBlobContainer({ scope: args.scope, metadata: { ...args.metadata, containerType: args.containerType ?? \"workspace\" } });\n const dbFullName = CloudSqlite.makeSemverName(workspaceDbNameWithDefault(args.dbName), \"0.0.0\");\n await super._initializeDb({ ...args, props, dbName: dbFullName, dbType: WorkspaceSqliteDb, blockSize: \"4M\" });\n return props;\n }\n }\n return CloudAccess.initializeWorkspace(args);\n }\n\n public async createNewCloudContainer(args: CreateNewWorkspaceContainerArgs): Promise<EditableWorkspaceContainer> {\n const cloudContainer = await this.initializeContainer(args);\n const userToken = await IModelHost.authorizationClient?.getAccessToken();\n const accessToken = await CloudSqlite.requestToken({ ...cloudContainer, accessLevel: \"write\", userToken });\n return this.getContainer({ accessToken, ...cloudContainer, writeable: true, description: args.metadata.description });\n }\n\n public getContainer(props: GetWorkspaceContainerArgs): EditableWorkspaceContainer {\n return this.workspace.findContainer(props.containerId) as EditableWorkspaceContainer | undefined ?? new EditorContainerImpl(this.workspace, props);\n }\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<EditableWorkspaceContainer> {\n if (props.accessToken)\n return this.getContainer({ ...props, accessToken: props.accessToken });\n\n const accessToken = (props.baseUri === \"\")\n ? \"\"\n : await CloudSqlite.requestToken({ ...props, accessLevel: \"write\" });\n return this.getContainer({ ...props, accessToken });\n }\n\n public async findContainers(args: WorkspaceEditorNs.QueryWorkspaceContainersArgs): Promise<EditableWorkspaceContainer[]> {\n const containers = await WorkspaceEditorNs.queryContainers(args);\n const userToken = await IModelHost.getAccessToken();\n const results: EditableWorkspaceContainer[] = [];\n for (const containerMeta of containers) {\n // queryContainers already validates that BlobContainer.service is defined, so the non-null assertion is safe here.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tokenProps = await BlobContainer.service!.requestToken({ containerId: containerMeta.containerId, userToken, accessLevel: \"write\" });\n results.push(this.getContainer({\n containerId: containerMeta.containerId,\n baseUri: tokenProps.baseUri,\n storageType: tokenProps.provider,\n accessToken: tokenProps.token,\n writeable: true,\n }));\n }\n return results;\n }\n\n public close() {\n this.workspace.close();\n }\n}\n\ninterface EditCloudContainer extends WorkspaceCloudContainer {\n writeLockHeldBy?: string; // added by acquireWriteLock\n}\n\nclass EditorContainerImpl extends WorkspaceContainerImpl implements EditableWorkspaceContainer {\n public override get cloudContainer(): EditCloudContainer | undefined {\n return super.cloudContainer;\n }\n\n public get cloudProps(): WorkspaceContainerProps | undefined {\n const cloudContainer = this.cloudContainer;\n if (undefined === cloudContainer)\n return undefined;\n return {\n baseUri: cloudContainer.baseUri,\n containerId: cloudContainer.containerId,\n storageType: cloudContainer.storageType as \"azure\" | \"google\",\n isPublic: cloudContainer.isPublic,\n };\n }\n\n public async createNewWorkspaceDbVersion(args: CreateNewWorkspaceDbVersionArgs): Promise<{ oldDb: WorkspaceDbNameAndVersion, newDb: WorkspaceDbNameAndVersion }> {\n const container = this.cloudContainer;\n if (undefined === container)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"versions require cloud containers\" });\n\n const fromDb = { ...args.fromProps, dbName: workspaceDbNameWithDefault(args.fromProps?.dbName) };\n return CloudSqlite.createNewDbVersion(container, { ...args, fromDb });\n }\n\n public override getWorkspaceDb(props: WorkspaceDbProps): EditableWorkspaceDb {\n return this.getEditableDb(props);\n }\n\n public getEditableDb(props: WorkspaceDbProps): EditableWorkspaceDb {\n const dbFileName = this.resolveDbFileName(props);\n const db = this._wsDbs.get(dbFileName) as EditableDbImpl | undefined ?? new EditableDbImpl(props, this);\n\n if (this.cloudContainer && !CloudSqlite.isSemverEditable(db.dbFileName, this.cloudContainer)) {\n this._wsDbs.delete(dbFileName);\n CloudSqliteError.throwError(\"already-published\", { message: `${db.dbFileName} has been published and is not editable. Make a new version first.` });\n }\n\n return db;\n }\n\n public acquireWriteLock(user: string): void {\n if (this.cloudContainer) {\n this.cloudContainer.acquireWriteLock(user);\n this.cloudContainer.writeLockHeldBy = user;\n }\n }\n public releaseWriteLock() {\n if (this.cloudContainer) {\n this.cloudContainer.releaseWriteLock();\n this.cloudContainer.writeLockHeldBy = undefined;\n }\n }\n\n public abandonChanges() {\n if (this.cloudContainer) {\n this.cloudContainer.abandonChanges();\n this.cloudContainer.writeLockHeldBy = undefined;\n }\n }\n\n public async withEditableDb(user: string, operation: (db: EditableWorkspaceDb) => void, props?: WorkspaceDbProps): Promise<void> {\n this.acquireWriteLock(user);\n try {\n let db: EditableWorkspaceDb;\n try {\n db = this.getEditableDb({ ...props, includePrerelease: true });\n } catch (error) {\n if (!CloudSqliteError.isError(error, \"already-published\"))\n throw error;\n\n const newVersion = await this.createNewWorkspaceDbVersion({\n fromProps: props,\n versionType: \"prerelease\",\n identifier: \"beta\",\n });\n db = this.getEditableDb(newVersion.newDb);\n }\n\n db.open();\n try {\n operation(db);\n } finally {\n db.close();\n }\n this.releaseWriteLock();\n } catch (error) {\n this.abandonChanges();\n throw error;\n }\n }\n\n public async createDb(args: { dbName?: string, version?: WorkspaceDbVersion, manifest: WorkspaceDbManifest }): Promise<EditableWorkspaceDb> {\n if (!this.cloudContainer) {\n WorkspaceEditor.createEmptyDb({ localFileName: this.resolveDbFileName(args), manifest: args.manifest });\n } else {\n // currently the only way to create a workspaceDb in a cloud container is to create a temporary workspaceDb and upload it.\n const tempDbFile = join(KnownLocations.tmpdir, `empty.${workspaceDbFileExt}`);\n if (fs.existsSync(tempDbFile))\n IModelJsFs.removeSync(tempDbFile);\n\n WorkspaceEditor.createEmptyDb({ localFileName: tempDbFile, manifest: args.manifest });\n await CloudSqlite.uploadDb(this.cloudContainer, { localFileName: tempDbFile, dbName: CloudSqlite.makeSemverName(workspaceDbNameWithDefault(args.dbName), args.version) });\n IModelJsFs.removeSync(tempDbFile);\n }\n\n return this.getWorkspaceDb(args);\n }\n}\n\nclass EditableDbImpl extends WorkspaceDbImpl implements EditableWorkspaceDb {\n public override get container(): EditableWorkspaceContainer {\n assert(this._container instanceof EditorContainerImpl);\n return this._container;\n }\n\n private static validateResourceName(name: WorkspaceResourceName) {\n if (name.trim() !== name)\n WorkspaceError.throwError(\"invalid-name\", { message: \"resource name may not have leading or trailing spaces\" });\n\n if (name.length > 1024) {\n WorkspaceError.throwError(\"invalid-name\", { message: \"resource name too long\" });\n }\n }\n\n private validateResourceSize(val: Uint8Array | string) {\n const len = typeof val === \"string\" ? val.length : val.byteLength;\n if (len > (1024 * 1024 * 1024)) // one gigabyte\n WorkspaceError.throwError(\"too-large\", { message: \"value is too large\" });\n }\n public get cloudProps(): WorkspaceDbCloudProps | undefined {\n const props = (this._container as EditorContainerImpl).cloudProps as Mutable<WorkspaceDbCloudProps>;\n if (props === undefined)\n return undefined;\n\n const parsed = CloudSqlite.parseDbFileName(this.dbFileName);\n return { ...props, dbName: parsed.dbName, version: parsed.version };\n }\n\n public override open() {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.ReadWrite, this._container.cloudContainer);\n }\n\n public override close() {\n if (this.isOpen) {\n // whenever we close an EditableDb, update the name of the last editor in the manifest\n const lastEditedBy = (this._container.cloudContainer as any)?.writeLockHeldBy;\n if (lastEditedBy !== undefined)\n this.updateManifest({ ...this.manifest, lastEditedBy });\n\n // make sure all changes were saved before we close\n this.sqliteDb.saveChanges();\n }\n super.close();\n }\n\n private getFileModifiedTime(localFileName: LocalFileName): number {\n return Math.round(fs.statSync(localFileName).mtimeMs);\n }\n\n private performWriteSql(rscName: WorkspaceResourceName, sql: string, bind?: (stmt: SqliteStatement) => void) {\n this.sqliteDb.withSqliteStatement(sql, (stmt) => {\n stmt.bindString(1, rscName);\n bind?.(stmt);\n const rc = stmt.step();\n if (DbResult.BE_SQLITE_DONE !== rc) {\n if (DbResult.BE_SQLITE_CONSTRAINT_PRIMARYKEY === rc)\n WorkspaceError.throwError(\"resource-exists\", { message: `resource \"${rscName}\" already exists` });\n\n WorkspaceError.throwError(\"write-error\", { message: `workspace [${sql}], rc=${rc}` });\n }\n });\n this.sqliteDb.saveChanges();\n }\n\n public updateManifest(manifest: WorkspaceDbManifest) {\n this.sqliteDb[_nativeDb].saveFileProperty(workspaceManifestProperty, JSON.stringify(manifest));\n this._manifest = undefined;\n }\n public updateSettingsResource(settings: SettingsContainer, rscName?: string) {\n this.updateString(rscName ?? \"settingsDictionary\", JSON.stringify(settings));\n }\n public addString(rscName: WorkspaceResourceName, val: string): void {\n EditableDbImpl.validateResourceName(rscName);\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO strings(id,value) VALUES(?,?)\", (stmt) => stmt.bindString(2, val));\n }\n public updateString(rscName: WorkspaceResourceName, val: string): void {\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO strings(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\", (stmt) => stmt.bindString(2, val));\n }\n public removeString(rscName: WorkspaceResourceName): void {\n this.performWriteSql(rscName, \"DELETE FROM strings WHERE id=?\");\n }\n public addBlob(rscName: WorkspaceResourceName, val: Uint8Array): void {\n EditableDbImpl.validateResourceName(rscName);\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO blobs(id,value) VALUES(?,?)\", (stmt) => stmt.bindBlob(2, val));\n }\n public updateBlob(rscName: WorkspaceResourceName, val: Uint8Array): void {\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO blobs(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\", (stmt) => stmt.bindBlob(2, val));\n }\n public getBlobWriter(rscName: WorkspaceResourceName): SQLiteDb.BlobIO {\n return this.sqliteDb.withSqliteStatement(\"SELECT rowid from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n const blobWriter = SQLiteDb.createBlobIO();\n blobWriter.open(this.sqliteDb[_nativeDb], { tableName: \"blobs\", columnName: \"value\", row: stmt.getValueInteger(0), writeable: true });\n return blobWriter;\n });\n }\n public removeBlob(rscName: WorkspaceResourceName): void {\n this.performWriteSql(rscName, \"DELETE FROM blobs WHERE id=?\");\n }\n public addFile(rscName: WorkspaceResourceName, localFileName: LocalFileName, fileExt?: string): void {\n EditableDbImpl.validateResourceName(rscName);\n fileExt = fileExt ?? extname(localFileName);\n if (fileExt?.[0] === \".\")\n fileExt = fileExt.slice(1);\n this.sqliteDb[_nativeDb].embedFile({ name: rscName, localFileName, date: this.getFileModifiedTime(localFileName), fileExt });\n }\n public updateFile(rscName: WorkspaceResourceName, localFileName: LocalFileName): void {\n this.queryFileResource(rscName); // throws if not present\n this.sqliteDb[_nativeDb].replaceEmbeddedFile({ name: rscName, localFileName, date: this.getFileModifiedTime(localFileName) });\n }\n public removeFile(rscName: WorkspaceResourceName): void {\n const file = this.queryFileResource(rscName);\n if (undefined === file)\n WorkspaceError.throwError(\"does-not-exist\", { message: `file resource \"${rscName}\" does not exist` });\n if (file && fs.existsSync(file.localFileName))\n fs.unlinkSync(file.localFileName);\n this.sqliteDb[_nativeDb].removeEmbeddedFile(rscName);\n }\n}\n\nexport function constructWorkspaceDb(props: WorkspaceDbProps, container: WorkspaceContainer): WorkspaceDb {\n return new WorkspaceDbImpl(props, container);\n}\n\nexport function constructWorkspace(settings: Settings, opts?: WorkspaceOpts): OwnedWorkspace {\n return new WorkspaceImpl(settings, opts);\n}\n\nexport function constructWorkspaceEditor(): WorkspaceEditor {\n return new EditorImpl();\n}\n\n/**\n * Validate that a WorkspaceContainer.Id is valid.\n * The rules for ContainerIds (from Azure, see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata):\n * - may only contain lower case letters, numbers or dashes\n * - may not start or end with with a dash nor have more than one dash in a row\n * - may not be shorter than 3 or longer than 63 characters\n */\nexport function validateWorkspaceContainerId(id: WorkspaceContainerId) {\n if (!/^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$/g.test(id))\n WorkspaceError.throwError(\"invalid-name\", { message: `invalid containerId: [${id}]` });\n}\n\nexport const workspaceManifestProperty: FilePropertyProps = { namespace: \"workspace\", name: \"manifest\" };\n\n\nfunction throwWorkspaceDbLoadError(message: string, wsDbProps: WorkspaceDbProps | WorkspaceDbCloudProps, wsDb?: WorkspaceDb): never {\n WorkspaceError.throwError<WorkspaceDbLoadError>(\"load-error\", { message, wsDb, wsDbProps });\n}\n\nexport function throwWorkspaceDbLoadErrors(message: string, wsLoadErrors: WorkspaceDbLoadError[]): never {\n WorkspaceError.throwError<WorkspaceDbLoadErrors>(\"load-errors\", { message, wsLoadErrors });\n}\n\nexport interface OwnedWorkspace extends Workspace {\n /** Only the owner of a Workspace may close it. */\n close(): void;\n}\n"]}
1
+ {"version":3,"file":"WorkspaceImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/WorkspaceImpl.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAoxBH,oDAEC;AAED,gDAEC;AAED,4DAEC;AASD,oEAGC;AASD,gEAEC;AAnzBD,mCAAoC;AACpC,+BAA+B;AAC/B,+BAA8C;AAC9C,sDAAiH;AACjH,oDAAsH;AACtH,mDAAgD;AAChD,iDAA8D;AAC9D,iDAA8C;AAC9C,6CAA0C;AAE1C,uDAA+H;AAC/H,2DAAoF;AACpF,mEAAsE;AAEtE,yDAImC;AACnC,qEAA2N;AAC3N,2DAAwD;AACxD,iDAA8C;AAC9C,wCAAkE;AAClE,kDAAkD;AAClD,qEAA2D;AAG3D,SAAS,0BAA0B,CAAC,MAAwB;IAC1D,OAAO,MAAM,IAAI,cAAc,CAAC;AAClC,CAAC;AAED,4CAA4C;AAC/B,QAAA,kBAAkB,GAAG,iBAAiB,CAAC;AAYpD,SAAS,uBAAuB,CAAC,GAAoC;IACnE,MAAM,KAAK,GAAG,yBAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAwB,CAAC;IAC3E,IAAI,SAAS,KAAK,KAAK,CAAC,mBAAmB,EAAE,kDAAkD;QAC7F,yBAAW,CAAC,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,GAAG,EAAmC,CAAC,CAAC;IAC1G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA8B;IACxD,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAuC,EAAE,KAA0B;IACrG,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,cAAc,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvD,IAAI,SAAS,KAAK,cAAc;QAC9B,OAAO,cAAc,CAAC;IAExB,cAAc,GAAG,yBAAW,CAAC,oBAAoB,CAAC,KAAK,CAA4B,CAAC;IACpF,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAClD,cAAc,CAAC,YAAY,GAAG,CAAC,CAAC;IAChC,yBAAW,CAAC,iBAAiB,CAAC,cAAc,EAAE,eAAe,EAAE;QAC7D,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,yBAAW,CAAC,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,EAAE;QAChE,IAAI,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,sBAAsB;IACV,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IACxC,SAAS,CAAgB;IACzB,QAAQ,CAAe;IACvB,EAAE,CAAuB;IACzB,SAAS,CAA0B;IAClC,eAAe,CAAuC;IAEvE,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAES,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,IAAW,OAAO,KAAK,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3E,YAAmB,SAAwB,EAAE,KAA6D;QACxG,4BAA4B,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE;YACtB,IAAI,CAAC,eAAe,GAAG,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QAE3F,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE5C,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,SAAS,KAAK,cAAc;YAC9B,OAAO;QAET,mHAAmH;QACnH,IAAI,cAAc,CAAC,aAAa,EAAE,IAAI,KAAK,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;YACpE,IAAI,CAAC;gBACH,IAAI,8BAAe,CAAC,kBAAkB,IAAI,8BAAe,CAAC,oBAAoB,EAAE,CAAC;oBAC/E,mFAAmF;oBACnF,oFAAoF;oBACpF,wFAAwF;oBACxF,IAAI,CAAC,IAAA,8BAAe,GAAE,EAAE,CAAC;wBACvB,yEAAyE;wBACzE,6EAA6E;wBAC7E,WAAW;wBACX,OAAO;oBACT,CAAC;gBACH,CAAC;gBACD,cAAc,CAAC,eAAe,EAAE,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,kBAAkB;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAEM,iBAAiB,CAAC,KAAuB;QAC9C,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QACtC,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,IAAI,0BAAkB,EAAE,CAAC,CAAC,CAAC,mCAAmC;QAEnG,OAAO,yBAAW,CAAC,gBAAgB,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IAEM,cAAc,CAAC,KAAkB;QACtC,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;YACjD,4BAAc,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,gBAAgB,KAAK,CAAC,MAAM,+BAA+B,EAAE,CAAC,CAAC;QACxH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAEM,cAAc,CAAC,KAAwB;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,eAAe,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IAEM,gBAAgB,CAAC,MAAmB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAEM,KAAK;QACV,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM;YACnC,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC;IAC1C,CAAC;CACF;AAED,oCAAoC;AACpC,MAAM,eAAe;IACH,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IACxC,QAAQ,GAAG,IAAI,qCAAiB,EAAE,CAAC;IACnC,MAAM,CAAkB;IACrB,UAAU,CAAqB;IAClC,OAAO,GAAG,IAAI,sBAAO,EAAc,CAAC;IACpC,UAAU,CAAS;IACzB,SAAS,CAAuB;IAE1C,iDAAiD;IACjD,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,IAAW,SAAS,KAAyB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/D,iBAAiB,CAAC,OAA8B;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAS,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO,SAAS,CAAC;QAEnB,iIAAiI;QACjI,IAAI,aAAa,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7H,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,EAAE,8FAA8F;YACrH,aAAa,GAAG,GAAG,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACrD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,YAAmB,KAAuB,EAAE,SAA6B;QACvE,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvD,yBAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACrD,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,KAAK,CAAC,QAAQ;YACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3F,CAAC;IAEM,KAAK;QACV,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,IAAW,OAAO;QAChB,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;QACrD,IAAI,SAAS,KAAK,cAAc;YAC9B,OAAO,OAAO,CAAC,CAAC,4CAA4C;QAC9D,OAAO,yBAAW,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;IAC9D,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE;YAC/C,MAAM,YAAY,GAAG,EAAE,CAAC,mBAAS,CAAC,CAAC,iBAAiB,CAAC,iCAAyB,EAAE,IAAI,CAAuB,CAAC;YAC5G,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAI,SAAuC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC;IAEM,SAAS,CAAC,OAA8B;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE;YAC5B,OAAO,EAAE,CAAC,mBAAmB,CAAC,sCAAsC,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC7E,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC5B,OAAO,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,OAA8B;QACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,CAAC,IAAI,EAAE,EAAE;YACtF,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,mBAAQ,CAAC,YAAY,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAS,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrH,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,OAA8B;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE;YAC5B,OAAO,EAAE,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC3E,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC5B,OAAO,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,OAA8B,EAAE,cAA8B;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI;gBACP,OAAO,SAAS,CAAC;YAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,aAAa,GAAG,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC;YAE3D,gDAAgD;YAChD,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;gBAC3E,OAAO,aAAa,CAAC,CAAC,kBAAkB;YAE1C,kFAAkF;YAClF,IAAI,IAAI;gBACN,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;;gBAE7B,uBAAU,CAAC,kBAAkB,CAAC,IAAA,cAAO,EAAC,aAAa,CAAC,CAAC,CAAC;YAExD,EAAE,CAAC,mBAAS,CAAC,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,oEAAoE;YAC9G,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB;YACzD,OAAO,aAAa,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,QAAQ,CAAC,IAAgC;QAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QACtD,IAAI,cAAc,KAAK,SAAS;YAC9B,4BAAc,CAAC,UAAU,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAC;QACjG,OAAO,yBAAW,CAAC,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IAEM,cAAc,CAAC,IAAmC;QACvD,MAAM,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,EAAE,CAAC,mBAAmB,CAAC,kBAAkB,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;gBACjE,QAAQ,CAAC,CAAC,YAAY;oBACpB,OAAO,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;wBAC9C,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;gBAED,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvC,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,kCAAkC;AAClC,MAAM,aAAa;IACD,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IAChD,WAAW,GAAG,IAAI,GAAG,EAAgD,CAAC;IAC9D,YAAY,CAAe;IAC3B,QAAQ,CAAW;IACzB,WAAW,CAAuB;IACrC,aAAa;QAClB,OAAO,IAAI,CAAC,WAAW,KAAK,uBAAuB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,YAAmB,QAAkB,EAAE,IAAoB;QACzD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,IAAA,WAAI,EAAC,uBAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACjF,IAAI,aAAa,GAAG,IAAI,EAAE,aAAa,CAAC;QACxC,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,OAAO,aAAa,KAAK,QAAQ;gBACnC,aAAa,GAAG,CAAC,aAAa,CAAC,CAAC;YAClC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,2BAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAEM,YAAY,CAAC,KAA6B;QAC/C,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,4BAAc,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,aAAa,KAAK,CAAC,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAClH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAEM,aAAa,CAAC,WAAiC;QACpD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAEM,YAAY,CAAC,KAAgC;QAClD,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1F,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,KAA8B;QAC3D,IAAI,KAAK,CAAC,WAAW;YACnB,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzE,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC;YAC1D,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,MAAM,yBAAW,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,KAA4B;QACtD,IAAI,SAAS,GAAmC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAW,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;YACtI,SAAS,GAAG,IAAI,sBAAsB,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,KAA4D,EAAE,QAAiC;QACjI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QAElB,MAAM,wBAAwB,GAAG,CAAC,EAAe,EAAE,OAAiC,EAA2B,EAAE;YAC/G,IAAI,CAAC,IAAA,yBAAY,EAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,qCAAoB,CAAC,CAAC;YAExD,MAAM,GAAG,GAAG,IAAA,qCAAwB,EAAC,EAAE,CAAC,CAAC;YACzC,+FAA+F;YAC/F,OAAO,OAAO,CAAC,YAAY,KAAK,SAAS;gBACvC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;gBAChF,CAAC,CAAC,GAAG,CAAC;QACV,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3C,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEzD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;oBACzC,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;wBAC7B,MAAM,SAAS,GAA4B,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC5G,0GAA0G;wBAC1G,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;4BACzD,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;4BAChD,IAAI,SAAS,KAAK,YAAY;gCAC5B,yBAAyB,CAAC,+CAA+C,YAAY,YAAY,QAAQ,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;4BAExI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;4BAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;4BACpD,IAAI,IAAI,EAAE,CAAC;gCACT,qBAAS,CAAC,4BAA4B,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gCAC3D,gGAAgG;gCAChG,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAA6B,iCAAqB,CAAC,kBAAkB,CAAC,CAAC;gCACrG,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oCACzB,uBAAU,CAAC,eAAe,CAAC,eAAe,CAA6B,MAAM,EAAE,iCAAqB,CAAC,kBAAkB,CAAC,CAAC;oCACzH,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gCACtD,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,QAAQ,EAAE,IAAI,CAAC,CAAyB,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,CAAyB,CAAC,CAAC;YAC5C,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,WAAW;YAC7C,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEM,yBAAyB,CAAC,WAAwB,EAAE,MAA+B;QACxF,MAAM,UAAU,GAAG,uBAAU,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC;QAClD,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAA0B,WAAW,CAAC,EAAE,CAAC;YAC1F,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjC,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,IAA4G;QACvI,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3H,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,EAAE;YACvC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBACxB,qIAAqI;gBACrI,+FAA+F;gBAC/F,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,KAAK,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;oBACzH,OAAO,CAAC,uBAAuB;YACnC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,CAAyB,CAAC;gBAC1C,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;gBAC5B,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,CAAC,6CAA6C;AAC5F,MAAM,mBAAoB,SAAQ,aAAa;IAC7B,aAAa;QAC3B,OAAO,IAAI,CAAC,WAAW,KAAK,uBAAuB,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5G,CAAC;CACF;AAED,MAAM,UAAU;IACE,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IACjD,SAAS,GAAG,IAAI,mBAAmB,CAAC,IAAI,2BAAY,EAAE,EAAE,EAAE,YAAY,EAAE,IAAA,WAAI,EAAC,uBAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAE1H,KAAK,CAAC,mBAAmB,CAAC,IAAqC;QACpE,MAAM,WAAY,SAAQ,yBAAW,CAAC,QAA2B;YACrD,MAAM,CAAU,UAAU,GAAG,mBAAmB,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAqC;gBAC3E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,WAAW,EAAE,EAAE,CAAC,CAAC;gBACtJ,MAAM,UAAU,GAAG,yBAAW,CAAC,cAAc,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChG,MAAM,KAAK,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,qCAAiB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9G,OAAO,KAAK,CAAC;YACf,CAAC;;QAEH,OAAO,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,IAAqC;QACxE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,uBAAU,CAAC,mBAAmB,EAAE,cAAc,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,MAAM,yBAAW,CAAC,YAAY,CAAC,EAAE,GAAG,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3G,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACxH,CAAC;IAEM,YAAY,CAAC,KAAgC;QAClD,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAA2C,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACrJ,CAAC;IACM,KAAK,CAAC,iBAAiB,CAAC,KAA8B;QAC3D,IAAI,KAAK,CAAC,WAAW;YACnB,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzE,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,CAAC;YACxC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,MAAM,yBAAW,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,IAAoD;QAC9E,MAAM,UAAU,GAAG,MAAM,iCAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,MAAM,uBAAU,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,OAAO,GAAiC,EAAE,CAAC;QACjD,KAAK,MAAM,aAAa,IAAI,UAAU,EAAE,CAAC;YACvC,mHAAmH;YACnH,oEAAoE;YACpE,MAAM,UAAU,GAAG,MAAM,oCAAa,CAAC,OAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1I,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC7B,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,WAAW,EAAE,UAAU,CAAC,QAAQ;gBAChC,WAAW,EAAE,UAAU,CAAC,KAAK;gBAC7B,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF;AAED,MAAM,mBAAoB,SAAQ,sBAAsB;IACtD,IAAW,UAAU;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,SAAS,KAAK,cAAc;YAC9B,OAAO,SAAS,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,WAAW,EAAE,cAAc,CAAC,WAAiC;YAC7D,QAAQ,EAAE,cAAc,CAAC,QAAQ;SAClC,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,IAAqC;QAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QACtC,IAAI,SAAS,KAAK,SAAS;YACzB,4BAAc,CAAC,UAAU,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;QAEpG,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,0BAA0B,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;QACjG,OAAO,yBAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IAEe,cAAc,CAAC,KAAuB;QACpD,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEM,aAAa,CAAC,KAAuB;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAA+B,IAAI,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAExG,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,yBAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7F,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/B,8BAAgB,CAAC,UAAU,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,oEAAoE,EAAE,CAAC,CAAC;QACtJ,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,gBAAgB,CAAC,IAAY;QAClC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3C,yBAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACM,gBAAgB;QACrB,IAAI,IAAI,CAAC,cAAc;YACrB,yBAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;IAEM,cAAc;QACnB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;YACrC,yBAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,SAA4C,EAAE,KAAwB;QAC9G,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,IAAI,EAAuB,CAAC;YAC5B,IAAI,CAAC;gBACH,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,8BAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC;oBACvD,MAAM,KAAK,CAAC;gBAEd,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC;oBACxD,SAAS,EAAE,KAAK;oBAChB,WAAW,EAAE,YAAY;oBACzB,UAAU,EAAE,MAAM;iBACnB,CAAC,CAAC;gBACH,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YAED,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,SAAS,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,CAAC;YACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAsF;QAC1G,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,iCAAe,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1G,CAAC;aAAM,CAAC;YACN,0HAA0H;YAC1H,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,2BAAc,CAAC,MAAM,EAAE,SAAS,0BAAkB,EAAE,CAAC,CAAC;YAC9E,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC3B,uBAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAEpC,iCAAe,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtF,MAAM,yBAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,yBAAW,CAAC,cAAc,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1K,uBAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,cAAe,SAAQ,eAAe;IAC1C,IAAoB,SAAS;QAC3B,IAAA,qBAAM,EAAC,IAAI,CAAC,UAAU,YAAY,mBAAmB,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,IAA2B;QAC7D,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;YACtB,4BAAc,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC,CAAC;QAElH,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACvB,4BAAc,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,GAAwB;QACnD,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;QAClE,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,eAAe;YAC7C,4BAAc,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAW,UAAU;QACnB,MAAM,KAAK,GAAI,IAAI,CAAC,UAAkC,CAAC,UAA4C,CAAC;QACpG,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO,SAAS,CAAC;QAEnB,MAAM,MAAM,GAAG,yBAAW,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACtE,CAAC;IAEe,IAAI;QAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC5F,CAAC;IAEe,KAAK;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,sFAAsF;YACtF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;YACrD,MAAM,YAAY,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;YAC/G,IAAI,YAAY,KAAK,SAAS;gBAC5B,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAElG,mDAAmD;YACnD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,aAA4B;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,eAAe,CAAC,OAA8B,EAAE,GAAW,EAAE,IAAsC;QACzG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,uBAAQ,CAAC,cAAc,KAAK,EAAE,EAAE,CAAC;gBACnC,IAAI,uBAAQ,CAAC,+BAA+B,KAAK,EAAE;oBACjD,4BAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,aAAa,OAAO,kBAAkB,EAAE,CAAC,CAAC;gBAEpG,4BAAc,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAEM,cAAc,CAAC,QAA6B;QACjD,IAAI,CAAC,QAAQ,CAAC,mBAAS,CAAC,CAAC,gBAAgB,CAAC,iCAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IACM,sBAAsB,CAAC,QAA2B,EAAE,OAAgB;QACzE,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/E,CAAC;IACM,SAAS,CAAC,OAA8B,EAAE,GAAW;QAC1D,cAAc,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,2CAA2C,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAChH,CAAC;IACM,YAAY,CAAC,OAA8B,EAAE,GAAW;QAC7D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,0HAA0H,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/L,CAAC;IACM,YAAY,CAAC,OAA8B;QAChD,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;IAClE,CAAC;IACM,OAAO,CAAC,OAA8B,EAAE,GAAe;QAC5D,cAAc,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,yCAAyC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5G,CAAC;IACM,UAAU,CAAC,OAA8B,EAAE,GAAe;QAC/D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,wHAAwH,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3L,CAAC;IACM,aAAa,CAAC,OAA8B;QACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,CAAC,IAAI,EAAE,EAAE;YACtF,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,mBAAQ,CAAC,YAAY,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAS,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtI,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IACM,UAAU,CAAC,OAA8B;QAC9C,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;IAChE,CAAC;IACM,OAAO,CAAC,OAA8B,EAAE,aAA4B,EAAE,OAAgB;QAC3F,cAAc,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,GAAG,OAAO,IAAI,IAAA,cAAO,EAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG;YACtB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,mBAAS,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/H,CAAC;IACM,UAAU,CAAC,OAA8B,EAAE,aAA4B;QAC5E,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;QACzD,IAAI,CAAC,QAAQ,CAAC,mBAAS,CAAC,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;IACM,UAAU,CAAC,OAA8B;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,IAAI;YACpB,4BAAc,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,kBAAkB,OAAO,kBAAkB,EAAE,CAAC,CAAC;QACxG,IAAI,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;YAC3C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,mBAAS,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;CACF;AAED,SAAgB,oBAAoB,CAAC,KAAuB,EAAE,SAA6B;IACzF,OAAO,IAAI,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAkB,EAAE,IAAoB;IACzE,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,wBAAwB;IACtC,OAAO,IAAI,UAAU,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAAC,EAAwB;IACnE,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,4BAAc,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3F,CAAC;AAEY,QAAA,yBAAyB,GAAsB,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAGzG,SAAS,yBAAyB,CAAC,OAAe,EAAE,SAAmD,EAAE,IAAkB;IACzH,4BAAc,CAAC,UAAU,CAAuB,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,SAAgB,0BAA0B,CAAC,OAAe,EAAE,YAAoC;IAC9F,4BAAc,CAAC,UAAU,CAAwB,aAAa,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AAC7F,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { createHash } from \"crypto\";\nimport * as fs from \"fs-extra\";\nimport { dirname, extname, join } from \"path\";\nimport { AccessToken, assert, BeEvent, DbResult, Mutable, OpenMode, ProcessDetector } from \"@itwin/core-bentley\";\nimport { CloudSqliteError, FilePropertyProps, LocalDirName, LocalFileName, WorkspaceError } from \"@itwin/core-common\";\nimport { CloudSqlite } from \"../../CloudSqlite\";\nimport { IModelHost, KnownLocations } from \"../../IModelHost\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { SQLiteDb } from \"../../SQLiteDb\";\nimport { SqliteStatement } from \"../../SqliteStatement\";\nimport { SettingName, Settings, SettingsContainer, SettingsDictionaryProps, SettingsPriority } from \"../../workspace/Settings\";\nimport { isSettingsDb, queryStringResourceNames } from \"../../workspace/SettingsDb\";\nimport { settingsResourceName } from \"../../workspace/SettingsEditor\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport {\n GetWorkspaceContainerArgs, Workspace, WorkspaceContainer, WorkspaceContainerId, WorkspaceContainerProps, WorkspaceDb, WorkspaceDbCloudProps,\n WorkspaceDbFullName, WorkspaceDbLoadError, WorkspaceDbLoadErrors, WorkspaceDbManifest, WorkspaceDbName, WorkspaceDbNameAndVersion, WorkspaceDbProps,\n WorkspaceDbQueryResourcesArgs, WorkspaceDbSettingsProps, WorkspaceDbVersion, WorkspaceOpts, WorkspaceResourceName, WorkspaceSettingNames,\n} from \"../../workspace/Workspace\";\nimport { CreateNewWorkspaceContainerArgs, CreateNewWorkspaceDbVersionArgs, EditableWorkspaceContainer, EditableWorkspaceDb, WorkspaceEditor, WorkspaceEditor as WorkspaceEditorNs } from \"../../workspace/WorkspaceEditor\";\nimport { WorkspaceSqliteDb } from \"./WorkspaceSqliteDb\";\nimport { SettingsImpl } from \"./SettingsImpl\";\nimport { _implementationProhibited, _nativeDb } from \"../Symbols\";\nimport { getOnlineStatus } from \"../OnlineStatus\";\nimport { BlobContainer } from \"../../BlobContainerService\";\n\n\nfunction workspaceDbNameWithDefault(dbName?: WorkspaceDbName): WorkspaceDbName {\n return dbName ?? \"workspace-db\";\n}\n\n/** file extension for local WorkspaceDbs */\nexport const workspaceDbFileExt = \"itwin-workspace\";\n\ninterface WorkspaceCloudContainer extends CloudSqlite.CloudContainer {\n connectCount: number;\n sharedConnect(): boolean;\n sharedDisconnect(): void;\n}\n\ninterface WorkspaceCloudCache extends CloudSqlite.CloudCache {\n workspaceContainers: Map<string, WorkspaceCloudContainer>;\n}\n\nfunction makeWorkspaceCloudCache(arg: CloudSqlite.CreateCloudCacheArg): WorkspaceCloudCache {\n const cache = CloudSqlite.CloudCaches.getCache(arg) as WorkspaceCloudCache;\n if (undefined === cache.workspaceContainers) // if we just created this container, add the map.\n CloudSqlite.addHiddenProperty(cache, \"workspaceContainers\", new Map<string, WorkspaceCloudContainer>());\n return cache;\n}\n\nfunction getContainerFullId(props: WorkspaceContainerProps) {\n return `${props.baseUri}/${props.containerId}`;\n}\n\nfunction getWorkspaceCloudContainer(props: CloudSqlite.ContainerAccessProps, cache: WorkspaceCloudCache) {\n const id = getContainerFullId(props);\n let cloudContainer = cache.workspaceContainers.get(id);\n if (undefined !== cloudContainer)\n return cloudContainer;\n\n cloudContainer = CloudSqlite.createCloudContainer(props) as WorkspaceCloudContainer;\n cache.workspaceContainers.set(id, cloudContainer);\n cloudContainer.connectCount = 0;\n CloudSqlite.addHiddenProperty(cloudContainer, \"sharedConnect\", function (this: WorkspaceCloudContainer) {\n if (this.connectCount++ === 0) {\n this.connect(cache);\n return true;\n }\n\n return false;\n });\n\n CloudSqlite.addHiddenProperty(cloudContainer, \"sharedDisconnect\", function (this: WorkspaceCloudContainer) {\n if (--this.connectCount <= 0) {\n this.disconnect();\n cache.workspaceContainers.delete(id);\n this.connectCount = 0;\n }\n });\n\n return cloudContainer;\n}\n\nclass WorkspaceContainerImpl implements WorkspaceContainer {\n public readonly [_implementationProhibited] = undefined;\n public readonly workspace: WorkspaceImpl;\n public readonly filesDir: LocalDirName;\n public readonly id: WorkspaceContainerId;\n public readonly fromProps: WorkspaceContainerProps;\n private readonly _cloudContainer?: WorkspaceCloudContainer | undefined;\n\n public get cloudContainer(): WorkspaceCloudContainer | undefined {\n return this._cloudContainer;\n }\n\n protected _wsDbs = new Map<string, WorkspaceDb>();\n public get dirName() { return join(this.workspace.containerDir, this.id); }\n\n public constructor(workspace: WorkspaceImpl, props: WorkspaceContainerProps & { accessToken: AccessToken }) {\n validateWorkspaceContainerId(props.containerId);\n this.workspace = workspace;\n this.id = props.containerId;\n this.fromProps = props;\n\n if (props.baseUri !== \"\")\n this._cloudContainer = getWorkspaceCloudContainer(props, this.workspace.getCloudCache());\n\n workspace.addContainer(this);\n this.filesDir = join(this.dirName, \"Files\");\n\n const cloudContainer = this.cloudContainer;\n if (undefined === cloudContainer)\n return;\n\n // sharedConnect returns true if we just connected (if the container is shared, it may have already been connected)\n if (cloudContainer.sharedConnect() && false !== props.syncOnConnect) {\n try {\n if (ProcessDetector.isMobileAppBackend || ProcessDetector.isElectronAppBackend) {\n // Even though we've already confirmed that we are running in a native app backend,\n // having code here that references NativeHost causes a runtime exception. So we use\n // getOnlineStatus to determine whether we're online, which NativeHost keeps up to date.\n if (!getOnlineStatus()) {\n // If running in a native app and we're offline, don't check for changes.\n // Doing so will fail and be caught below, but it has to wait for the network\n // timeout.\n return;\n }\n }\n cloudContainer.checkForChanges();\n } catch {\n // must be offline\n }\n }\n }\n\n public resolveDbFileName(props: WorkspaceDbProps): WorkspaceDbFullName {\n const dbName = workspaceDbNameWithDefault(props.dbName);\n const container = this.cloudContainer;\n if (undefined === container)\n return join(this.dirName, `${dbName}.${workspaceDbFileExt}`); // local file, versions not allowed\n\n return CloudSqlite.querySemverMatch({ ...props, container, dbName });\n }\n\n public addWorkspaceDb(toAdd: WorkspaceDb) {\n if (undefined !== this._wsDbs.get(toAdd.dbFileName))\n WorkspaceError.throwError(\"already-exists\", { message: `workspaceDb '${toAdd.dbName}' already exists in workspace` });\n this._wsDbs.set(toAdd.dbFileName, toAdd);\n }\n\n public getWorkspaceDb(props?: WorkspaceDbProps): WorkspaceDb {\n const dbFileName = this.resolveDbFileName(props ?? {});\n return this._wsDbs.get(dbFileName) ?? new WorkspaceDbImpl(props ?? {}, this);\n }\n\n public closeWorkspaceDb(toDrop: WorkspaceDb) {\n const wsDb = this._wsDbs.get(toDrop.dbFileName);\n if (wsDb === toDrop) {\n this._wsDbs.delete(toDrop.dbFileName);\n wsDb.close();\n }\n }\n\n public close() {\n for (const [_name, db] of this._wsDbs)\n db.close();\n this._wsDbs.clear();\n this.cloudContainer?.sharedDisconnect();\n }\n}\n\n/** Implementation of WorkspaceDb */\nclass WorkspaceDbImpl implements WorkspaceDb {\n public readonly [_implementationProhibited] = undefined;\n public readonly sqliteDb = new WorkspaceSqliteDb();\n public readonly dbName: WorkspaceDbName;\n protected readonly _container: WorkspaceContainer;\n public readonly onClose = new BeEvent<() => void>();\n public readonly dbFileName: string;\n protected _manifest?: WorkspaceDbManifest;\n\n /** true if this WorkspaceDb is currently open */\n public get isOpen() { return this.sqliteDb.isOpen; }\n public get container(): WorkspaceContainer { return this._container; }\n public queryFileResource(rscName: WorkspaceResourceName): { localFileName: LocalFileName, info: IModelJsNative.EmbedFileQuery } | undefined {\n const info = this.sqliteDb[_nativeDb].queryEmbeddedFile(rscName);\n if (undefined === info)\n return undefined;\n\n // since resource names can contain illegal characters, path separators, etc., we make the local file name from its hash, in hex.\n let localFileName = join(this._container.filesDir, createHash(\"sha1\").update(this.dbFileName).update(rscName).digest(\"hex\"));\n if (info.fileExt !== \"\") // since some applications may expect to see the extension, append it here if it was supplied.\n localFileName = `${localFileName}.${info.fileExt}`;\n return { localFileName, info };\n }\n\n public constructor(props: WorkspaceDbProps, container: WorkspaceContainer) {\n this.dbName = workspaceDbNameWithDefault(props.dbName);\n CloudSqlite.validateDbName(this.dbName);\n this._container = container;\n this.dbFileName = container.resolveDbFileName(props);\n container.addWorkspaceDb(this);\n if (true === props.prefetch)\n this.prefetch();\n }\n\n public open() {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.Readonly, this._container.cloudContainer);\n }\n\n public close() {\n if (this.isOpen) {\n this.onClose.raiseEvent();\n this.sqliteDb.closeDb();\n this._container.closeWorkspaceDb(this);\n }\n }\n public get version() {\n const cloudContainer = this.container.cloudContainer;\n if (undefined === cloudContainer)\n return \"1.0.0\"; // local file, no versioning. return default\n return CloudSqlite.parseDbFileName(this.dbFileName).version;\n }\n\n public get manifest(): WorkspaceDbManifest {\n return this._manifest ??= this.withOpenDb((db) => {\n const manifestJson = db[_nativeDb].queryFileProperty(workspaceManifestProperty, true) as string | undefined;\n return manifestJson ? JSON.parse(manifestJson) : { workspaceName: this.dbName };\n });\n }\n\n private withOpenDb<T>(operation: (db: WorkspaceSqliteDb) => T): T {\n const done = this.isOpen ? () => { } : (this.open(), () => this.close());\n try {\n return operation(this.sqliteDb);\n } finally {\n done();\n }\n }\n\n public getString(rscName: WorkspaceResourceName): string | undefined {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value from strings WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getValueString(0) : undefined;\n });\n });\n }\n\n public getBlobReader(rscName: WorkspaceResourceName): SQLiteDb.BlobIO {\n return this.sqliteDb.withSqliteStatement(\"SELECT rowid from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n const blobReader = SQLiteDb.createBlobIO();\n blobReader.open(this.sqliteDb[_nativeDb], { tableName: \"blobs\", columnName: \"value\", row: stmt.getValueInteger(0) });\n return blobReader;\n });\n }\n\n public getBlob(rscName: WorkspaceResourceName): Uint8Array | undefined {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getValueBlob(0) : undefined;\n });\n });\n }\n\n public getFile(rscName: WorkspaceResourceName, targetFileName?: LocalFileName): LocalFileName | undefined {\n return this.withOpenDb((db) => {\n const file = this.queryFileResource(rscName);\n if (!file)\n return undefined;\n\n const info = file.info;\n const localFileName = targetFileName ?? file.localFileName;\n\n // check whether the file is already up to date.\n const stat = fs.existsSync(localFileName) && fs.statSync(localFileName);\n if (stat && Math.round(stat.mtimeMs) === info.date && stat.size === info.size)\n return localFileName; // yes, we're done\n\n // extractEmbeddedFile fails if the file exists or if the directory does not exist\n if (stat)\n fs.removeSync(localFileName);\n else\n IModelJsFs.recursiveMkDirSync(dirname(localFileName));\n\n db[_nativeDb].extractEmbeddedFile({ name: rscName, localFileName });\n const date = new Date(info.date);\n fs.utimesSync(localFileName, date, date); // set the last-modified date of the file to match date in container\n fs.chmodSync(localFileName, \"0444\"); // set file readonly\n return localFileName;\n });\n }\n\n public prefetch(opts?: CloudSqlite.PrefetchProps): CloudSqlite.CloudPrefetch {\n const cloudContainer = this._container.cloudContainer;\n if (cloudContainer === undefined)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"no cloud container to prefetch\" });\n return CloudSqlite.startCloudPrefetch(cloudContainer, this.dbFileName, opts);\n }\n\n public queryResources(args: WorkspaceDbQueryResourcesArgs): void {\n const table = \"blob\" !== args.type ? \"strings\" : \"blobs\";\n this.withOpenDb((db) => {\n const where = undefined !== args.namePattern ? ` WHERE id ${args.nameCompare ?? \"=\"} ?` : \"\";\n db.withSqliteStatement(`SELECT id from ${table}${where}`, (stmt) => {\n function* makeIterable() {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n yield stmt.getValueString(0);\n }\n }\n\n if (undefined !== args.namePattern) {\n stmt.bindString(1, args.namePattern);\n }\n\n args.callback(makeIterable());\n });\n });\n }\n}\n\n/** Implementation of Workspace */\nclass WorkspaceImpl implements Workspace {\n public readonly [_implementationProhibited] = undefined;\n private _containers = new Map<WorkspaceContainerId, WorkspaceContainerImpl>();\n public readonly containerDir: LocalDirName;\n public readonly settings: Settings;\n protected _cloudCache?: WorkspaceCloudCache;\n public getCloudCache(): WorkspaceCloudCache {\n return this._cloudCache ??= makeWorkspaceCloudCache({ cacheName: \"Workspace\", cacheSize: \"20G\" });\n }\n\n public constructor(settings: Settings, opts?: WorkspaceOpts) {\n this.settings = settings;\n this.containerDir = opts?.containerDir ?? join(IModelHost.cacheDir, \"Workspace\");\n let settingsFiles = opts?.settingsFiles;\n if (settingsFiles) {\n if (typeof settingsFiles === \"string\")\n settingsFiles = [settingsFiles];\n settingsFiles.forEach((file) => settings.addFile(file, SettingsPriority.application));\n }\n }\n\n public addContainer(toAdd: WorkspaceContainerImpl) {\n if (undefined !== this._containers.get(toAdd.id))\n WorkspaceError.throwError(\"container-exists\", { message: `container ${toAdd.id} already exists in workspace` });\n this._containers.set(toAdd.id, toAdd);\n }\n\n public findContainer(containerId: WorkspaceContainerId) {\n return this._containers.get(containerId);\n }\n\n public getContainer(props: GetWorkspaceContainerArgs): WorkspaceContainer {\n return this.findContainer(props.containerId) ?? new WorkspaceContainerImpl(this, props);\n }\n\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<WorkspaceContainer> {\n if (props.accessToken)\n return this.getContainer({ ...props, accessToken: props.accessToken });\n\n const accessToken = (props.baseUri === \"\" || props.isPublic)\n ? \"\"\n : await CloudSqlite.requestToken({ ...props, accessLevel: \"read\" });\n return this.getContainer({ ...props, accessToken });\n }\n\n public async getWorkspaceDb(props: WorkspaceDbCloudProps): Promise<WorkspaceDb> {\n let container: WorkspaceContainer | undefined = this.findContainer(props.containerId);\n if (undefined === container) {\n const accessToken = (props.baseUri === \"\" || props.isPublic) ? \"\" : await CloudSqlite.requestToken({ accessLevel: \"read\", ...props });\n container = new WorkspaceContainerImpl(this, { ...props, accessToken });\n }\n return container.getWorkspaceDb(props);\n }\n\n public async loadSettingsDictionary(props: WorkspaceDbSettingsProps | WorkspaceDbSettingsProps[], problems?: WorkspaceDbLoadError[]) {\n if (!Array.isArray(props))\n props = [props];\n\n const getSettingsResourceNames = (db: WorkspaceDb, dbProps: WorkspaceDbSettingsProps): WorkspaceResourceName[] => {\n if (!isSettingsDb(db))\n return [dbProps.resourceName ?? settingsResourceName];\n\n const all = queryStringResourceNames(db);\n // If resourceName is supplied, load it last so it has highest precedence at the same priority.\n return dbProps.resourceName !== undefined\n ? [...all.filter((name) => name !== dbProps.resourceName), dbProps.resourceName]\n : all;\n };\n\n for (const prop of props) {\n const db = await this.getWorkspaceDb(prop);\n db.open();\n try {\n const resourceNames = getSettingsResourceNames(db, prop);\n\n for (const resourceName of resourceNames) {\n try {\n const manifest = db.manifest;\n const dictProps: SettingsDictionaryProps = { name: resourceName, workspaceDb: db, priority: prop.priority };\n // don't load if we already have this dictionary. Happens if the same WorkspaceDb is in more than one list\n if (undefined === this.settings.getDictionary(dictProps)) {\n const settingsJson = db.getString(resourceName);\n if (undefined === settingsJson)\n throwWorkspaceDbLoadError(`could not load setting dictionary resource '${resourceName}' from: '${manifest.workspaceName}'`, prop, db);\n\n this.settings.addJson(dictProps, settingsJson);\n const dict = this.settings.getDictionary(dictProps);\n if (dict) {\n Workspace.onSettingsDictionaryLoadedFn({ dict, from: db });\n // if the dictionary we just loaded has a \"settingsWorkspaces\" entry, load them too, recursively\n const nested = dict.getSetting<WorkspaceDbSettingsProps[]>(WorkspaceSettingNames.settingsWorkspaces);\n if (nested !== undefined) {\n IModelHost.settingsSchemas.validateSetting<WorkspaceDbSettingsProps[]>(nested, WorkspaceSettingNames.settingsWorkspaces);\n await this.loadSettingsDictionary(nested, problems);\n }\n }\n }\n } catch (e) {\n problems?.push(e as WorkspaceDbLoadError);\n }\n }\n } catch (e) {\n problems?.push(e as WorkspaceDbLoadError);\n } finally {\n db.close();\n }\n }\n }\n\n public close() {\n this.settings.close();\n for (const [_id, container] of this._containers)\n container.close();\n this._containers.clear();\n }\n\n public resolveWorkspaceDbSetting(settingName: SettingName, filter?: Workspace.DbListFilter): WorkspaceDbCloudProps[] {\n const settingDef = IModelHost.settingsSchemas.settingDefs.get(settingName);\n const combine = settingDef?.combineArray === true;\n filter = filter ?? (() => true);\n const result: WorkspaceDbCloudProps[] = [];\n for (const entry of this.settings.getSettingEntries<WorkspaceDbCloudProps[]>(settingName)) {\n for (const dbProp of entry.value) {\n if (filter(dbProp, entry.dictionary)) {\n result.push(dbProp);\n }\n }\n\n if (!combine) {\n break;\n }\n }\n\n return result;\n }\n\n public async getWorkspaceDbs(args: Workspace.DbListOrSettingName & { filter?: Workspace.DbListFilter, problems?: WorkspaceDbLoadError[] }): Promise<WorkspaceDb[]> {\n const dbList = (args.settingName !== undefined) ? this.resolveWorkspaceDbSetting(args.settingName, args.filter) : args.dbs;\n const result: WorkspaceDb[] = [];\n const pushUnique = (wsDb: WorkspaceDb) => {\n for (const db of result) {\n // if we already have this db, skip it. The test below also has to consider that we create a separate WorkspaceDb object for the same\n // database from more than one Workspace (though then they must use a \"shared\" CloudContainer).\n if (db === wsDb || ((db.container.cloudContainer === wsDb.container.cloudContainer) && (db.dbFileName === wsDb.dbFileName)))\n return; // this db is redundant\n }\n result.push(wsDb);\n };\n\n for (const dbProps of dbList) {\n try {\n pushUnique(await this.getWorkspaceDb(dbProps));\n } catch (e) {\n const loadErr = e as WorkspaceDbLoadError;\n loadErr.wsDbProps = dbProps;\n args.problems?.push(loadErr);\n }\n }\n return result;\n }\n}\n\nconst workspaceEditorName = \"WorkspaceEditor\"; // name of the cache for the editor workspace\nclass EditorWorkspaceImpl extends WorkspaceImpl {\n public override getCloudCache(): WorkspaceCloudCache {\n return this._cloudCache ??= makeWorkspaceCloudCache({ cacheName: workspaceEditorName, cacheSize: \"20G\" });\n }\n}\n\nclass EditorImpl implements WorkspaceEditor {\n public readonly [_implementationProhibited] = undefined;\n public workspace = new EditorWorkspaceImpl(new SettingsImpl(), { containerDir: join(IModelHost.cacheDir, workspaceEditorName) });\n\n public async initializeContainer(args: CreateNewWorkspaceContainerArgs) {\n class CloudAccess extends CloudSqlite.DbAccess<WorkspaceSqliteDb> {\n protected static override _cacheName = workspaceEditorName;\n public static async initializeWorkspace(args: CreateNewWorkspaceContainerArgs) {\n const props = await this.createBlobContainer({ scope: args.scope, metadata: { ...args.metadata, containerType: args.containerType ?? \"workspace\" } });\n const dbFullName = CloudSqlite.makeSemverName(workspaceDbNameWithDefault(args.dbName), \"0.0.0\");\n await super._initializeDb({ ...args, props, dbName: dbFullName, dbType: WorkspaceSqliteDb, blockSize: \"4M\" });\n return props;\n }\n }\n return CloudAccess.initializeWorkspace(args);\n }\n\n public async createNewCloudContainer(args: CreateNewWorkspaceContainerArgs): Promise<EditableWorkspaceContainer> {\n const cloudContainer = await this.initializeContainer(args);\n const userToken = await IModelHost.authorizationClient?.getAccessToken();\n const accessToken = await CloudSqlite.requestToken({ ...cloudContainer, accessLevel: \"write\", userToken });\n return this.getContainer({ accessToken, ...cloudContainer, writeable: true, description: args.metadata.description });\n }\n\n public getContainer(props: GetWorkspaceContainerArgs): EditableWorkspaceContainer {\n return this.workspace.findContainer(props.containerId) as EditableWorkspaceContainer | undefined ?? new EditorContainerImpl(this.workspace, props);\n }\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<EditableWorkspaceContainer> {\n if (props.accessToken)\n return this.getContainer({ ...props, accessToken: props.accessToken });\n\n const accessToken = (props.baseUri === \"\")\n ? \"\"\n : await CloudSqlite.requestToken({ ...props, accessLevel: \"write\" });\n return this.getContainer({ ...props, accessToken });\n }\n\n public async findContainers(args: WorkspaceEditorNs.QueryWorkspaceContainersArgs): Promise<EditableWorkspaceContainer[]> {\n const containers = await WorkspaceEditorNs.queryContainers(args);\n const userToken = await IModelHost.getAccessToken();\n const results: EditableWorkspaceContainer[] = [];\n for (const containerMeta of containers) {\n // queryContainers already validates that BlobContainer.service is defined, so the non-null assertion is safe here.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tokenProps = await BlobContainer.service!.requestToken({ containerId: containerMeta.containerId, userToken, accessLevel: \"write\" });\n results.push(this.getContainer({\n containerId: containerMeta.containerId,\n baseUri: tokenProps.baseUri,\n storageType: tokenProps.provider,\n accessToken: tokenProps.token,\n writeable: true,\n }));\n }\n return results;\n }\n\n public close() {\n this.workspace.close();\n }\n}\n\nclass EditorContainerImpl extends WorkspaceContainerImpl implements EditableWorkspaceContainer {\n public get cloudProps(): WorkspaceContainerProps | undefined {\n const cloudContainer = this.cloudContainer;\n if (undefined === cloudContainer)\n return undefined;\n return {\n baseUri: cloudContainer.baseUri,\n containerId: cloudContainer.containerId,\n storageType: cloudContainer.storageType as \"azure\" | \"google\",\n isPublic: cloudContainer.isPublic,\n };\n }\n\n public async createNewWorkspaceDbVersion(args: CreateNewWorkspaceDbVersionArgs): Promise<{ oldDb: WorkspaceDbNameAndVersion, newDb: WorkspaceDbNameAndVersion }> {\n const container = this.cloudContainer;\n if (undefined === container)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"versions require cloud containers\" });\n\n const fromDb = { ...args.fromProps, dbName: workspaceDbNameWithDefault(args.fromProps?.dbName) };\n return CloudSqlite.createNewDbVersion(container, { ...args, fromDb });\n }\n\n public override getWorkspaceDb(props: WorkspaceDbProps): EditableWorkspaceDb {\n return this.getEditableDb(props);\n }\n\n public getEditableDb(props: WorkspaceDbProps): EditableWorkspaceDb {\n const dbFileName = this.resolveDbFileName(props);\n const db = this._wsDbs.get(dbFileName) as EditableDbImpl | undefined ?? new EditableDbImpl(props, this);\n\n if (this.cloudContainer && !CloudSqlite.isSemverEditable(db.dbFileName, this.cloudContainer)) {\n this._wsDbs.delete(dbFileName);\n CloudSqliteError.throwError(\"already-published\", { message: `${db.dbFileName} has been published and is not editable. Make a new version first.` });\n }\n\n return db;\n }\n\n public acquireWriteLock(user: string): void {\n if (this.cloudContainer) {\n this.cloudContainer.acquireWriteLock(user);\n CloudSqlite.addHiddenProperty(this.cloudContainer, \"writeLockHeldBy\", user);\n }\n }\n public releaseWriteLock() {\n if (this.cloudContainer)\n CloudSqlite.releaseWriteLock(this.cloudContainer);\n }\n\n public abandonChanges() {\n if (this.cloudContainer) {\n this.cloudContainer.abandonChanges();\n CloudSqlite.addHiddenProperty(this.cloudContainer, \"writeLockHeldBy\", undefined);\n }\n }\n\n public async withEditableDb(user: string, operation: (db: EditableWorkspaceDb) => void, props?: WorkspaceDbProps): Promise<void> {\n this.acquireWriteLock(user);\n try {\n let db: EditableWorkspaceDb;\n try {\n db = this.getEditableDb({ ...props, includePrerelease: true });\n } catch (error) {\n if (!CloudSqliteError.isError(error, \"already-published\"))\n throw error;\n\n const newVersion = await this.createNewWorkspaceDbVersion({\n fromProps: props,\n versionType: \"prerelease\",\n identifier: \"beta\",\n });\n db = this.getEditableDb(newVersion.newDb);\n }\n\n db.open();\n try {\n operation(db);\n } finally {\n db.close();\n }\n this.releaseWriteLock();\n } catch (error) {\n this.abandonChanges();\n throw error;\n }\n }\n\n public async createDb(args: { dbName?: string, version?: WorkspaceDbVersion, manifest: WorkspaceDbManifest }): Promise<EditableWorkspaceDb> {\n if (!this.cloudContainer) {\n WorkspaceEditor.createEmptyDb({ localFileName: this.resolveDbFileName(args), manifest: args.manifest });\n } else {\n // currently the only way to create a workspaceDb in a cloud container is to create a temporary workspaceDb and upload it.\n const tempDbFile = join(KnownLocations.tmpdir, `empty.${workspaceDbFileExt}`);\n if (fs.existsSync(tempDbFile))\n IModelJsFs.removeSync(tempDbFile);\n\n WorkspaceEditor.createEmptyDb({ localFileName: tempDbFile, manifest: args.manifest });\n await CloudSqlite.uploadDb(this.cloudContainer, { localFileName: tempDbFile, dbName: CloudSqlite.makeSemverName(workspaceDbNameWithDefault(args.dbName), args.version) });\n IModelJsFs.removeSync(tempDbFile);\n }\n\n return this.getWorkspaceDb(args);\n }\n}\n\nclass EditableDbImpl extends WorkspaceDbImpl implements EditableWorkspaceDb {\n public override get container(): EditableWorkspaceContainer {\n assert(this._container instanceof EditorContainerImpl);\n return this._container;\n }\n\n private static validateResourceName(name: WorkspaceResourceName) {\n if (name.trim() !== name)\n WorkspaceError.throwError(\"invalid-name\", { message: \"resource name may not have leading or trailing spaces\" });\n\n if (name.length > 1024) {\n WorkspaceError.throwError(\"invalid-name\", { message: \"resource name too long\" });\n }\n }\n\n private validateResourceSize(val: Uint8Array | string) {\n const len = typeof val === \"string\" ? val.length : val.byteLength;\n if (len > (1024 * 1024 * 1024)) // one gigabyte\n WorkspaceError.throwError(\"too-large\", { message: \"value is too large\" });\n }\n public get cloudProps(): WorkspaceDbCloudProps | undefined {\n const props = (this._container as EditorContainerImpl).cloudProps as Mutable<WorkspaceDbCloudProps>;\n if (props === undefined)\n return undefined;\n\n const parsed = CloudSqlite.parseDbFileName(this.dbFileName);\n return { ...props, dbName: parsed.dbName, version: parsed.version };\n }\n\n public override open() {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.ReadWrite, this._container.cloudContainer);\n }\n\n public override close() {\n if (this.isOpen) {\n // whenever we close an EditableDb, update the name of the last editor in the manifest\n const cloudContainer = this.container.cloudContainer;\n const lastEditedBy = cloudContainer === undefined ? undefined : CloudSqlite.getWriteLockHeldBy(cloudContainer);\n if (lastEditedBy !== undefined)\n this.updateManifest({ ...this.manifest, lastEditedBy, lastEditedAt: new Date().toISOString() });\n\n // make sure all changes were saved before we close\n this.sqliteDb.saveChanges();\n }\n super.close();\n }\n\n private getFileModifiedTime(localFileName: LocalFileName): number {\n return Math.round(fs.statSync(localFileName).mtimeMs);\n }\n\n private performWriteSql(rscName: WorkspaceResourceName, sql: string, bind?: (stmt: SqliteStatement) => void) {\n this.sqliteDb.withSqliteStatement(sql, (stmt) => {\n stmt.bindString(1, rscName);\n bind?.(stmt);\n const rc = stmt.step();\n if (DbResult.BE_SQLITE_DONE !== rc) {\n if (DbResult.BE_SQLITE_CONSTRAINT_PRIMARYKEY === rc)\n WorkspaceError.throwError(\"resource-exists\", { message: `resource \"${rscName}\" already exists` });\n\n WorkspaceError.throwError(\"write-error\", { message: `workspace [${sql}], rc=${rc}` });\n }\n });\n this.sqliteDb.saveChanges();\n }\n\n public updateManifest(manifest: WorkspaceDbManifest) {\n this.sqliteDb[_nativeDb].saveFileProperty(workspaceManifestProperty, JSON.stringify(manifest));\n this._manifest = undefined;\n }\n public updateSettingsResource(settings: SettingsContainer, rscName?: string) {\n this.updateString(rscName ?? \"settingsDictionary\", JSON.stringify(settings));\n }\n public addString(rscName: WorkspaceResourceName, val: string): void {\n EditableDbImpl.validateResourceName(rscName);\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO strings(id,value) VALUES(?,?)\", (stmt) => stmt.bindString(2, val));\n }\n public updateString(rscName: WorkspaceResourceName, val: string): void {\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO strings(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\", (stmt) => stmt.bindString(2, val));\n }\n public removeString(rscName: WorkspaceResourceName): void {\n this.performWriteSql(rscName, \"DELETE FROM strings WHERE id=?\");\n }\n public addBlob(rscName: WorkspaceResourceName, val: Uint8Array): void {\n EditableDbImpl.validateResourceName(rscName);\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO blobs(id,value) VALUES(?,?)\", (stmt) => stmt.bindBlob(2, val));\n }\n public updateBlob(rscName: WorkspaceResourceName, val: Uint8Array): void {\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO blobs(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\", (stmt) => stmt.bindBlob(2, val));\n }\n public getBlobWriter(rscName: WorkspaceResourceName): SQLiteDb.BlobIO {\n return this.sqliteDb.withSqliteStatement(\"SELECT rowid from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n const blobWriter = SQLiteDb.createBlobIO();\n blobWriter.open(this.sqliteDb[_nativeDb], { tableName: \"blobs\", columnName: \"value\", row: stmt.getValueInteger(0), writeable: true });\n return blobWriter;\n });\n }\n public removeBlob(rscName: WorkspaceResourceName): void {\n this.performWriteSql(rscName, \"DELETE FROM blobs WHERE id=?\");\n }\n public addFile(rscName: WorkspaceResourceName, localFileName: LocalFileName, fileExt?: string): void {\n EditableDbImpl.validateResourceName(rscName);\n fileExt = fileExt ?? extname(localFileName);\n if (fileExt?.[0] === \".\")\n fileExt = fileExt.slice(1);\n this.sqliteDb[_nativeDb].embedFile({ name: rscName, localFileName, date: this.getFileModifiedTime(localFileName), fileExt });\n }\n public updateFile(rscName: WorkspaceResourceName, localFileName: LocalFileName): void {\n this.queryFileResource(rscName); // throws if not present\n this.sqliteDb[_nativeDb].replaceEmbeddedFile({ name: rscName, localFileName, date: this.getFileModifiedTime(localFileName) });\n }\n public removeFile(rscName: WorkspaceResourceName): void {\n const file = this.queryFileResource(rscName);\n if (undefined === file)\n WorkspaceError.throwError(\"does-not-exist\", { message: `file resource \"${rscName}\" does not exist` });\n if (file && fs.existsSync(file.localFileName))\n fs.unlinkSync(file.localFileName);\n this.sqliteDb[_nativeDb].removeEmbeddedFile(rscName);\n }\n}\n\nexport function constructWorkspaceDb(props: WorkspaceDbProps, container: WorkspaceContainer): WorkspaceDb {\n return new WorkspaceDbImpl(props, container);\n}\n\nexport function constructWorkspace(settings: Settings, opts?: WorkspaceOpts): OwnedWorkspace {\n return new WorkspaceImpl(settings, opts);\n}\n\nexport function constructWorkspaceEditor(): WorkspaceEditor {\n return new EditorImpl();\n}\n\n/**\n * Validate that a WorkspaceContainer.Id is valid.\n * The rules for ContainerIds (from Azure, see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata):\n * - may only contain lower case letters, numbers or dashes\n * - may not start or end with with a dash nor have more than one dash in a row\n * - may not be shorter than 3 or longer than 63 characters\n */\nexport function validateWorkspaceContainerId(id: WorkspaceContainerId) {\n if (!/^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$/g.test(id))\n WorkspaceError.throwError(\"invalid-name\", { message: `invalid containerId: [${id}]` });\n}\n\nexport const workspaceManifestProperty: FilePropertyProps = { namespace: \"workspace\", name: \"manifest\" };\n\n\nfunction throwWorkspaceDbLoadError(message: string, wsDbProps: WorkspaceDbProps | WorkspaceDbCloudProps, wsDb?: WorkspaceDb): never {\n WorkspaceError.throwError<WorkspaceDbLoadError>(\"load-error\", { message, wsDb, wsDbProps });\n}\n\nexport function throwWorkspaceDbLoadErrors(message: string, wsLoadErrors: WorkspaceDbLoadError[]): never {\n WorkspaceError.throwError<WorkspaceDbLoadErrors>(\"load-errors\", { message, wsLoadErrors });\n}\n\nexport interface OwnedWorkspace extends Workspace {\n /** Only the owner of a Workspace may close it. */\n close(): void;\n}\n"]}
@@ -40,7 +40,7 @@ export interface SettingSchema extends Readonly<JSONSchema> {
40
40
  * remove them via [[SettingsSchemas.removeGroup]].
41
41
  *
42
42
  * All of the settings share the same [[schemaPrefix]], which must be unique amongst all other groups.
43
- * The prefix is combined with the name of each [[SettingSchema]] in the group to form the fully-qualified name used to refer
43
+ * The prefix is a stable identifier combined with the name of each [[SettingSchema]] in the group to form the fully-qualified name used to refer
44
44
  * to the setting outside of the group, e.g., when accessing [[SettingsSchemas.settingDefs]] or in [[SettingSchema.extends]].
45
45
  * In the following example, the fully-qualified name of the setting named "metric" is "format/units/metric".
46
46
  *
@@ -60,11 +60,12 @@ export interface SettingSchema extends Readonly<JSONSchema> {
60
60
  export interface SettingGroupSchema {
61
61
  /** Uniquely identifies this group amongst all other groups.
62
62
  * The prefix can use forward-slashes to define logical subgroups - for example, two related groups with the prefixes "units/metric" and "units/imperial".
63
- * The user interface may parse these prefixes to display both groups under a "units" tab or expandable tree view node.
64
63
  *
65
64
  * @note Schema prefixes beginning with "itwin" are reserved for use by iTwin.js.
66
65
  */
67
66
  readonly schemaPrefix: string;
67
+ /** A title of this group suitable for displaying to a user. */
68
+ readonly title?: string;
68
69
  /** Metadata for each [[Setting]] in this group. */
69
70
  readonly settingDefs?: {
70
71
  [name: string]: SettingSchema | undefined;
@@ -101,7 +102,12 @@ export interface SettingGroupSchema {
101
102
  export interface SettingsSchemas {
102
103
  /** @internal */
103
104
  readonly [_implementationProhibited]: unknown;
104
- /** The map of each individual registered [[SettingSchema]] defining a [[Setting]], accessed by its fully-qualified name (including its [[SettingGroupSchema.schemaPrefix]]). */
105
+ /** The map of each registered [[SettingGroupSchema]], accessed by its [[SettingGroupSchema.schemaPrefix]]. */
106
+ readonly groups: ReadonlyMap<string, SettingGroupSchema>;
107
+ /** The map of each individual registered [[SettingSchema]] defining a [[Setting]], accessed by its fully-qualified name (including its [[SettingGroupSchema.schemaPrefix]]).
108
+ * Schemas in this map may include an [[SettingSchema.extends]] property referring to a registered type definition.
109
+ * Use [[resolveSchema]] to obtain the fully expanded schema.
110
+ */
105
111
  readonly settingDefs: ReadonlyMap<SettingName, SettingSchema>;
106
112
  /** The map of each individual registered [[SettingSchema]] defining a type that can be extended by other [[SettingSchema]]s via [[SettingSchema.extends]],
107
113
  * accessed by its fully-qualified name (including its [[SettingGroupSchema.schemaPrefix]]).
@@ -131,5 +137,16 @@ export interface SettingsSchemas {
131
137
  addDirectory(dirName: LocalDirName): void;
132
138
  /** Unregisters all [[settingDefs]] and [[typeDefs]] with the specified [[SettingGroupSchema.schemaPrefix]]. */
133
139
  removeGroup(schemaPrefix: string): void;
140
+ /**
141
+ * Looks up a setting schema in [[settingDefs]] and returns its resolved form.
142
+ * Resolution uses the [[typeDefs]] currently registered with this [[SettingsSchemas]] instance.
143
+ * @returns The resolved schema for `settingName`, or `undefined` if no schema has been registered for that setting.
144
+ * @throws Error if a registered setting schema cannot be resolved because a referenced type definition is missing or circular.
145
+ * @example
146
+ * ```ts
147
+ * const resolved = IModelHost.settingsSchemas.getResolvedSettingDef("app/font");
148
+ * ```
149
+ */
150
+ getResolvedSettingDef(settingName: SettingName): SettingSchema | undefined;
134
151
  }
135
152
  //# sourceMappingURL=SettingsSchemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsSchemas.d.ts","sourceRoot":"","sources":["../../../src/workspace/SettingsSchemas.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;;;;IAQI;AACJ,MAAM,WAAW,aAAc,SAAQ,QAAQ,CAAC,UAAU,CAAC;IACzD,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,WAAW,GAAG,aAAa,CAAA;KAAE,CAAC;IAC7D;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;KAAE,CAAC;IACrE,mGAAmG;IACnG,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;KAAE,CAAC;IAClE,sJAAsJ;IACtJ,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AAEH;;;;;;;;;;;;;;IAcI;AACJ,MAAM,WAAW,eAAe;IAC9B,gBAAgB;IAChB,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAE9C,gLAAgL;IAChL,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAE9D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAE3D,6DAA6D;IAC7D,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAE9C;;;;;;;OAOG;IACH,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC;IAE1D;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,GAAG,IAAI,CAAC;IAEzE,uFAAuF;IACvF,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC,kFAAkF;IAClF,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAEvC,oFAAoF;IACpF,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAE1C,+GAA+G;IAC/G,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC"}
1
+ {"version":3,"file":"SettingsSchemas.d.ts","sourceRoot":"","sources":["../../../src/workspace/SettingsSchemas.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;;;;IAQI;AACJ,MAAM,WAAW,aAAc,SAAQ,QAAQ,CAAC,UAAU,CAAC;IACzD,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,WAAW,GAAG,aAAa,CAAA;KAAE,CAAC;IAC7D;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;KAAE,CAAC;IACrE,mGAAmG;IACnG,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;KAAE,CAAC;IAClE,sJAAsJ;IACtJ,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AAEH;;;;;;;;;;;;;;IAcI;AACJ,MAAM,WAAW,eAAe;IAC9B,gBAAgB;IAChB,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAE9C,8GAA8G;IAC9G,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAEzD;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAE9D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAE3D,6DAA6D;IAC7D,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAE9C;;;;;;;OAOG;IACH,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC;IAE1D;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,GAAG,IAAI,CAAC;IAEzE,uFAAuF;IACvF,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC,kFAAkF;IAClF,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAEvC,oFAAoF;IACpF,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAE1C,+GAA+G;IAC/G,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAExC;;;;;;;;;OASG;IACH,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;CAE5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsSchemas.js","sourceRoot":"","sources":["../../../src/workspace/SettingsSchemas.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AAIH,iDAAgE","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { BeEvent, JSONSchema, JSONSchemaTypeName } from \"@itwin/core-bentley\";\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\nimport { _implementationProhibited } from \"../internal/Symbols\";\nimport { SettingName } from \"./Settings\";\n\n/** Metadata describing a single [[Setting]] as part of a [[SettingGroupSchema]].\n * Every setting has a [[type]], which can be one of the following:\n * - A primitive type like `string` or `number`;\n * - An object containing any number of named properties, each with their own types; or\n * - An array of elements, all of the same type.\n * This metadata is used to validate setting values against the schema, and to enable user interfaces by which\n * users can view and modify their settings.\n * @beta\n */\nexport interface SettingSchema extends Readonly<JSONSchema> {\n /** For arrays only, the metadata describing every element in the array. */\n readonly items?: SettingSchema;\n /** The name of the [[Setting]]'s data type. */\n readonly type: JSONSchemaTypeName;\n /** For objects and arrays only, the name of a [[SettingSchema]] that provides a base definition for this type.\n * The name is expected to refer to a type definition registered with [[SettingsSchema.typeDefs]].\n * Therefore, it must be the full name, including the [[SettingGroupSchema.schemaPrefix]].\n */\n readonly extends?: string;\n /** For objects only, the name and metadata of each of the object's properties. */\n readonly properties?: { [name: SettingName]: SettingSchema };\n /** For arrays only, specifies how [[SettingsDictionary.getArray]] resolves the value of the setting.\n * By default, like other types of settings, the setting uses the value of the setting from the highest-priority dictionary.\n * If `combineArray` is `true`, then the value of the setting is computed by combining the elements of every array from every dictionary,\n * ordered by priority and eliminating duplicate elements.\n * Two elements are considered duplicates of one another if [[Setting.areEqual]] returns `true`.\n */\n readonly combineArray?: boolean;\n}\n\n/** Metadata describing a group of related [[SettingSchema]]s. You can register setting schema groups via [[SettingsSchemas.addGroup]] and\n * remove them via [[SettingsSchemas.removeGroup]].\n *\n * All of the settings share the same [[schemaPrefix]], which must be unique amongst all other groups.\n * The prefix is combined with the name of each [[SettingSchema]] in the group to form the fully-qualified name used to refer\n * to the setting outside of the group, e.g., when accessing [[SettingsSchemas.settingDefs]] or in [[SettingSchema.extends]].\n * In the following example, the fully-qualified name of the setting named \"metric\" is \"format/units/metric\".\n *\n * ```json\n * {\n * \"schemaPrefix\": \"format/units\",\n * \"settingDefs\": {\n * \"metric\": { \"type\": \"boolean\" }\n * }\n * }\n * ```\n *\n * A group can also define [[SettingSchema]]s that, rather than describing actual [[Setting]]s, instead describe types that can be extended by [[Setting]]s via\n * [[SettingSchema.extends]]. A [[SettingSchema]] can refer to type definitions defined in its own group or any other group.\n * @beta\n */\nexport interface SettingGroupSchema {\n /** Uniquely identifies this group amongst all other groups.\n * The prefix can use forward-slashes to define logical subgroups - for example, two related groups with the prefixes \"units/metric\" and \"units/imperial\".\n * The user interface may parse these prefixes to display both groups under a \"units\" tab or expandable tree view node.\n *\n * @note Schema prefixes beginning with \"itwin\" are reserved for use by iTwin.js.\n */\n readonly schemaPrefix: string;\n /** Metadata for each [[Setting]] in this group. */\n readonly settingDefs?: { [name: string]: SettingSchema | undefined };\n /** Metadata for types that can be extended by other [[Setting]]s via [[SettingSchema.extends]]. */\n readonly typeDefs?: { [name: string]: SettingSchema | undefined };\n /** An integer used when displaying a list of schemas in a user interface, to sort schemas with a lower `order` before those with a `higher` order. */\n readonly order?: number;\n /** A description of this group suitable for displaying to a user. */\n readonly description: string;\n}\n\n/**\n * The registry of available [[SettingGroupSchema]]s.\n * The registry is used for editing Settings files and for finding default values for settings.\n * @beta\n */\n\n/** The registry of metadata describing groups of [[SettingSchema]]s available to the current session.\n * The schemas are used to look up the default values of [[Setting]]s, validate that their values are of the type dictated by the schema, and\n * query metadata like [[SettingsSchema.combineArray]] that modify their behavior.\n * They can also be used to drive a user interface that enables end users to edit [[Settings]].\n *\n * When [[IModelHost.startup]] is invoked at the beginning of a session, schemas delivered with the application - like those describing\n * [[Workspace]]s - are automatically loaded.\n * The application can manually register additional schemas using methods like [[addGroup]], [[addFile]], [[addDirectory]], and [[addJson]].\n * When [[IModelHost.shutdown]] is invoked at the end of a session, all registered schemas are unregistered.\n *\n * See the [learning article]($docs/learning/backend/Workspace) for a detailed overiew and examples.\n *\n * @see [[IModelHost.settingsSchemas]] to access the registry for the current session.\n * @beta\n */\nexport interface SettingsSchemas {\n /** @internal */\n readonly [_implementationProhibited]: unknown;\n\n /** The map of each individual registered [[SettingSchema]] defining a [[Setting]], accessed by its fully-qualified name (including its [[SettingGroupSchema.schemaPrefix]]). */\n readonly settingDefs: ReadonlyMap<SettingName, SettingSchema>;\n\n /** The map of each individual registered [[SettingSchema]] defining a type that can be extended by other [[SettingSchema]]s via [[SettingSchema.extends]],\n * accessed by its fully-qualified name (including its [[SettingGroupSchema.schemaPrefix]]).\n */\n readonly typeDefs: ReadonlyMap<SettingName, SettingSchema>;\n\n /** An event raised whenever schemas are added or removed. */\n readonly onSchemaChanged: BeEvent<() => void>;\n\n /**\n * Ensure that the setting value supplied is valid according to its [[SettingSchema]].\n * If no schema has been registered for the setting, no validation is performed.\n * @param value The value of the setting to validate against the schema.\n * @param settingName The fully-qualified setting name.\n * @returns `value` if `value` matches the schema corresponding to `settingName`, or if no such schema has been registered.\n * @throws Error if `value` is invalid according to the schema.\n */\n validateSetting<T>(value: T, settingName: SettingName): T;\n\n /** Register one or more [[SettingGroupSchema]]s.\n * If a group with the same [[SettingGroupSchema.prefix]] was previously registered, it will be replaced.\n * Each [[SettingSchema]] in the group will be added to [[settingDefs]] or [[typeDefs]].\n */\n addGroup(settingsGroup: SettingGroupSchema | SettingGroupSchema[]): void;\n\n /** Invokes [[addGroup]] for a [[SettingGroupSchema]] supplied as stringified json5. */\n addJson(settingSchema: string): void;\n\n /** Invokes [[addGroup]] for a json5 file containiner a [[SettingGroupSchema]]. */\n addFile(fileName: LocalFileName): void;\n\n /** Invokes [[addFile]] for every json and json5 file in the specified directory. */\n addDirectory(dirName: LocalDirName): void;\n\n /** Unregisters all [[settingDefs]] and [[typeDefs]] with the specified [[SettingGroupSchema.schemaPrefix]]. */\n removeGroup(schemaPrefix: string): void;\n}\n"]}
1
+ {"version":3,"file":"SettingsSchemas.js","sourceRoot":"","sources":["../../../src/workspace/SettingsSchemas.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AAIH,iDAAgE","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { BeEvent, JSONSchema, JSONSchemaTypeName } from \"@itwin/core-bentley\";\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\nimport { _implementationProhibited } from \"../internal/Symbols\";\nimport { SettingName } from \"./Settings\";\n\n/** Metadata describing a single [[Setting]] as part of a [[SettingGroupSchema]].\n * Every setting has a [[type]], which can be one of the following:\n * - A primitive type like `string` or `number`;\n * - An object containing any number of named properties, each with their own types; or\n * - An array of elements, all of the same type.\n * This metadata is used to validate setting values against the schema, and to enable user interfaces by which\n * users can view and modify their settings.\n * @beta\n */\nexport interface SettingSchema extends Readonly<JSONSchema> {\n /** For arrays only, the metadata describing every element in the array. */\n readonly items?: SettingSchema;\n /** The name of the [[Setting]]'s data type. */\n readonly type: JSONSchemaTypeName;\n /** For objects and arrays only, the name of a [[SettingSchema]] that provides a base definition for this type.\n * The name is expected to refer to a type definition registered with [[SettingsSchema.typeDefs]].\n * Therefore, it must be the full name, including the [[SettingGroupSchema.schemaPrefix]].\n */\n readonly extends?: string;\n /** For objects only, the name and metadata of each of the object's properties. */\n readonly properties?: { [name: SettingName]: SettingSchema };\n /** For arrays only, specifies how [[SettingsDictionary.getArray]] resolves the value of the setting.\n * By default, like other types of settings, the setting uses the value of the setting from the highest-priority dictionary.\n * If `combineArray` is `true`, then the value of the setting is computed by combining the elements of every array from every dictionary,\n * ordered by priority and eliminating duplicate elements.\n * Two elements are considered duplicates of one another if [[Setting.areEqual]] returns `true`.\n */\n readonly combineArray?: boolean;\n}\n\n/** Metadata describing a group of related [[SettingSchema]]s. You can register setting schema groups via [[SettingsSchemas.addGroup]] and\n * remove them via [[SettingsSchemas.removeGroup]].\n *\n * All of the settings share the same [[schemaPrefix]], which must be unique amongst all other groups.\n * The prefix is a stable identifier combined with the name of each [[SettingSchema]] in the group to form the fully-qualified name used to refer\n * to the setting outside of the group, e.g., when accessing [[SettingsSchemas.settingDefs]] or in [[SettingSchema.extends]].\n * In the following example, the fully-qualified name of the setting named \"metric\" is \"format/units/metric\".\n *\n * ```json\n * {\n * \"schemaPrefix\": \"format/units\",\n * \"settingDefs\": {\n * \"metric\": { \"type\": \"boolean\" }\n * }\n * }\n * ```\n *\n * A group can also define [[SettingSchema]]s that, rather than describing actual [[Setting]]s, instead describe types that can be extended by [[Setting]]s via\n * [[SettingSchema.extends]]. A [[SettingSchema]] can refer to type definitions defined in its own group or any other group.\n * @beta\n */\nexport interface SettingGroupSchema {\n /** Uniquely identifies this group amongst all other groups.\n * The prefix can use forward-slashes to define logical subgroups - for example, two related groups with the prefixes \"units/metric\" and \"units/imperial\".\n *\n * @note Schema prefixes beginning with \"itwin\" are reserved for use by iTwin.js.\n */\n readonly schemaPrefix: string;\n /** A title of this group suitable for displaying to a user. */\n readonly title?: string;\n /** Metadata for each [[Setting]] in this group. */\n readonly settingDefs?: { [name: string]: SettingSchema | undefined };\n /** Metadata for types that can be extended by other [[Setting]]s via [[SettingSchema.extends]]. */\n readonly typeDefs?: { [name: string]: SettingSchema | undefined };\n /** An integer used when displaying a list of schemas in a user interface, to sort schemas with a lower `order` before those with a `higher` order. */\n readonly order?: number;\n /** A description of this group suitable for displaying to a user. */\n readonly description: string;\n}\n\n/**\n * The registry of available [[SettingGroupSchema]]s.\n * The registry is used for editing Settings files and for finding default values for settings.\n * @beta\n */\n\n/** The registry of metadata describing groups of [[SettingSchema]]s available to the current session.\n * The schemas are used to look up the default values of [[Setting]]s, validate that their values are of the type dictated by the schema, and\n * query metadata like [[SettingsSchema.combineArray]] that modify their behavior.\n * They can also be used to drive a user interface that enables end users to edit [[Settings]].\n *\n * When [[IModelHost.startup]] is invoked at the beginning of a session, schemas delivered with the application - like those describing\n * [[Workspace]]s - are automatically loaded.\n * The application can manually register additional schemas using methods like [[addGroup]], [[addFile]], [[addDirectory]], and [[addJson]].\n * When [[IModelHost.shutdown]] is invoked at the end of a session, all registered schemas are unregistered.\n *\n * See the [learning article]($docs/learning/backend/Workspace) for a detailed overiew and examples.\n *\n * @see [[IModelHost.settingsSchemas]] to access the registry for the current session.\n * @beta\n */\nexport interface SettingsSchemas {\n /** @internal */\n readonly [_implementationProhibited]: unknown;\n\n /** The map of each registered [[SettingGroupSchema]], accessed by its [[SettingGroupSchema.schemaPrefix]]. */\n readonly groups: ReadonlyMap<string, SettingGroupSchema>;\n\n /** The map of each individual registered [[SettingSchema]] defining a [[Setting]], accessed by its fully-qualified name (including its [[SettingGroupSchema.schemaPrefix]]).\n * Schemas in this map may include an [[SettingSchema.extends]] property referring to a registered type definition.\n * Use [[resolveSchema]] to obtain the fully expanded schema.\n */\n readonly settingDefs: ReadonlyMap<SettingName, SettingSchema>;\n\n /** The map of each individual registered [[SettingSchema]] defining a type that can be extended by other [[SettingSchema]]s via [[SettingSchema.extends]],\n * accessed by its fully-qualified name (including its [[SettingGroupSchema.schemaPrefix]]).\n */\n readonly typeDefs: ReadonlyMap<SettingName, SettingSchema>;\n\n /** An event raised whenever schemas are added or removed. */\n readonly onSchemaChanged: BeEvent<() => void>;\n\n /**\n * Ensure that the setting value supplied is valid according to its [[SettingSchema]].\n * If no schema has been registered for the setting, no validation is performed.\n * @param value The value of the setting to validate against the schema.\n * @param settingName The fully-qualified setting name.\n * @returns `value` if `value` matches the schema corresponding to `settingName`, or if no such schema has been registered.\n * @throws Error if `value` is invalid according to the schema.\n */\n validateSetting<T>(value: T, settingName: SettingName): T;\n\n /** Register one or more [[SettingGroupSchema]]s.\n * If a group with the same [[SettingGroupSchema.prefix]] was previously registered, it will be replaced.\n * Each [[SettingSchema]] in the group will be added to [[settingDefs]] or [[typeDefs]].\n */\n addGroup(settingsGroup: SettingGroupSchema | SettingGroupSchema[]): void;\n\n /** Invokes [[addGroup]] for a [[SettingGroupSchema]] supplied as stringified json5. */\n addJson(settingSchema: string): void;\n\n /** Invokes [[addGroup]] for a json5 file containiner a [[SettingGroupSchema]]. */\n addFile(fileName: LocalFileName): void;\n\n /** Invokes [[addFile]] for every json and json5 file in the specified directory. */\n addDirectory(dirName: LocalDirName): void;\n\n /** Unregisters all [[settingDefs]] and [[typeDefs]] with the specified [[SettingGroupSchema.schemaPrefix]]. */\n removeGroup(schemaPrefix: string): void;\n\n /**\n * Looks up a setting schema in [[settingDefs]] and returns its resolved form.\n * Resolution uses the [[typeDefs]] currently registered with this [[SettingsSchemas]] instance.\n * @returns The resolved schema for `settingName`, or `undefined` if no schema has been registered for that setting.\n * @throws Error if a registered setting schema cannot be resolved because a referenced type definition is missing or circular.\n * @example\n * ```ts\n * const resolved = IModelHost.settingsSchemas.getResolvedSettingDef(\"app/font\");\n * ```\n */\n getResolvedSettingDef(settingName: SettingName): SettingSchema | undefined;\n\n}\n"]}
@@ -112,8 +112,10 @@ export interface WorkspaceDbManifest {
112
112
  readonly description?: string;
113
113
  /** The name of the person to contact with questions about this [[WorkspaceDb]]. */
114
114
  readonly contactName?: string;
115
- /** The name of the person who last modified this [[WorkspaceDb]]. */
115
+ /** The user who held the write lock during the most recent edit session that closed this [[WorkspaceDb]]. */
116
116
  readonly lastEditedBy?: string;
117
+ /** The UTC ISO-8601 time of the most recent edit session close for this [[WorkspaceDb]]. */
118
+ readonly lastEditedAt?: string;
117
119
  }
118
120
  /**
119
121
  * An exception thrown when attempting to load a [[WorkspaceDb]] or some of its data; for example, if the [[WorkspaceDb]] could not be found or the user
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/workspace/Workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/workspace/Workspace.ts"],"names":[],"mappings":"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"}