@itwin/core-backend 4.8.0-dev.3 → 4.8.0-dev.31

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 (284) hide show
  1. package/CHANGELOG.md +57 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +18 -16
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js +16 -15
  5. package/lib/cjs/BackendHubAccess.js.map +1 -1
  6. package/lib/cjs/BackendLoggerCategory.d.ts +3 -1
  7. package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
  8. package/lib/cjs/BackendLoggerCategory.js +2 -0
  9. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  10. package/lib/cjs/BisCoreSchema.js.map +1 -1
  11. package/lib/cjs/BlobContainerService.d.ts +3 -3
  12. package/lib/cjs/BlobContainerService.d.ts.map +1 -1
  13. package/lib/cjs/BlobContainerService.js.map +1 -1
  14. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  15. package/lib/cjs/BriefcaseManager.js +19 -11
  16. package/lib/cjs/BriefcaseManager.js.map +1 -1
  17. package/lib/cjs/Category.d.ts +0 -6
  18. package/lib/cjs/Category.d.ts.map +1 -1
  19. package/lib/cjs/Category.js +0 -6
  20. package/lib/cjs/Category.js.map +1 -1
  21. package/lib/cjs/ChangeSummaryManager.d.ts.map +1 -1
  22. package/lib/cjs/ChangeSummaryManager.js +13 -11
  23. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  24. package/lib/cjs/ChangedElementsDb.d.ts +1 -0
  25. package/lib/cjs/ChangedElementsDb.d.ts.map +1 -1
  26. package/lib/cjs/ChangedElementsDb.js +6 -4
  27. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  28. package/lib/cjs/ChangedElementsManager.js.map +1 -1
  29. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  30. package/lib/cjs/ChangesetECAdaptor.js +242 -237
  31. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  32. package/lib/cjs/ChannelControl.d.ts +4 -26
  33. package/lib/cjs/ChannelControl.d.ts.map +1 -1
  34. package/lib/cjs/ChannelControl.js +2 -101
  35. package/lib/cjs/ChannelControl.js.map +1 -1
  36. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  37. package/lib/cjs/CheckpointManager.js +5 -3
  38. package/lib/cjs/CheckpointManager.js.map +1 -1
  39. package/lib/cjs/ClassRegistry.d.ts.map +1 -1
  40. package/lib/cjs/ClassRegistry.js +8 -7
  41. package/lib/cjs/ClassRegistry.js.map +1 -1
  42. package/lib/cjs/CloudSqlite.d.ts +49 -24
  43. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  44. package/lib/cjs/CloudSqlite.js +66 -7
  45. package/lib/cjs/CloudSqlite.js.map +1 -1
  46. package/lib/cjs/CodeService.d.ts +4 -4
  47. package/lib/cjs/CodeService.d.ts.map +1 -1
  48. package/lib/cjs/CodeService.js.map +1 -1
  49. package/lib/cjs/CodeSpecs.js.map +1 -1
  50. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  51. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  52. package/lib/cjs/DevTools.d.ts.map +1 -1
  53. package/lib/cjs/DevTools.js +2 -1
  54. package/lib/cjs/DevTools.js.map +1 -1
  55. package/lib/cjs/DisplayStyle.d.ts +0 -3
  56. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  57. package/lib/cjs/DisplayStyle.js +0 -3
  58. package/lib/cjs/DisplayStyle.js.map +1 -1
  59. package/lib/cjs/ECDb.d.ts +6 -1
  60. package/lib/cjs/ECDb.d.ts.map +1 -1
  61. package/lib/cjs/ECDb.js +19 -14
  62. package/lib/cjs/ECDb.js.map +1 -1
  63. package/lib/cjs/ECSchemaXmlContext.js +2 -2
  64. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  65. package/lib/cjs/ECSqlStatement.d.ts +6 -3
  66. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  67. package/lib/cjs/ECSqlStatement.js +3 -3
  68. package/lib/cjs/ECSqlStatement.js.map +1 -1
  69. package/lib/cjs/Element.d.ts +3 -60
  70. package/lib/cjs/Element.d.ts.map +1 -1
  71. package/lib/cjs/Element.js +8 -64
  72. package/lib/cjs/Element.js.map +1 -1
  73. package/lib/cjs/ElementAspect.d.ts +0 -5
  74. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  75. package/lib/cjs/ElementAspect.js +4 -8
  76. package/lib/cjs/ElementAspect.js.map +1 -1
  77. package/lib/cjs/ElementGraphics.d.ts.map +1 -1
  78. package/lib/cjs/ElementGraphics.js +2 -1
  79. package/lib/cjs/ElementGraphics.js.map +1 -1
  80. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  81. package/lib/cjs/Entity.js.map +1 -1
  82. package/lib/cjs/EntityReferences.js.map +1 -1
  83. package/lib/cjs/ExportGraphics.js.map +1 -1
  84. package/lib/cjs/ExternalSource.js.map +1 -1
  85. package/lib/cjs/GeoCoordConfig.d.ts +10 -0
  86. package/lib/cjs/GeoCoordConfig.d.ts.map +1 -1
  87. package/lib/cjs/GeoCoordConfig.js +22 -24
  88. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  89. package/lib/cjs/GeographicCRSServices.js +2 -2
  90. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  91. package/lib/cjs/GeometrySummary.d.ts.map +1 -1
  92. package/lib/cjs/GeometrySummary.js +49 -48
  93. package/lib/cjs/GeometrySummary.js.map +1 -1
  94. package/lib/cjs/HubMock.js.map +1 -1
  95. package/lib/cjs/IModelCloneContext.js.map +1 -1
  96. package/lib/cjs/IModelDb.d.ts +33 -98
  97. package/lib/cjs/IModelDb.d.ts.map +1 -1
  98. package/lib/cjs/IModelDb.js +250 -164
  99. package/lib/cjs/IModelDb.js.map +1 -1
  100. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  101. package/lib/cjs/IModelElementCloneContext.js +5 -4
  102. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  103. package/lib/cjs/IModelHost.d.ts +13 -4
  104. package/lib/cjs/IModelHost.d.ts.map +1 -1
  105. package/lib/cjs/IModelHost.js +39 -32
  106. package/lib/cjs/IModelHost.js.map +1 -1
  107. package/lib/cjs/IModelJsFs.js.map +1 -1
  108. package/lib/cjs/IpcHost.d.ts.map +1 -1
  109. package/lib/cjs/IpcHost.js +15 -13
  110. package/lib/cjs/IpcHost.js.map +1 -1
  111. package/lib/cjs/LineStyle.js.map +1 -1
  112. package/lib/cjs/LocalHub.d.ts +2 -2
  113. package/lib/cjs/LocalHub.d.ts.map +1 -1
  114. package/lib/cjs/LocalHub.js +18 -18
  115. package/lib/cjs/LocalHub.js.map +1 -1
  116. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  117. package/lib/cjs/LockControl.d.ts +73 -0
  118. package/lib/cjs/LockControl.d.ts.map +1 -0
  119. package/lib/cjs/LockControl.js +11 -0
  120. package/lib/cjs/LockControl.js.map +1 -0
  121. package/lib/cjs/Material.d.ts +2 -5
  122. package/lib/cjs/Material.d.ts.map +1 -1
  123. package/lib/cjs/Material.js +6 -4
  124. package/lib/cjs/Material.js.map +1 -1
  125. package/lib/cjs/Model.d.ts +0 -22
  126. package/lib/cjs/Model.d.ts.map +1 -1
  127. package/lib/cjs/Model.js +5 -26
  128. package/lib/cjs/Model.js.map +1 -1
  129. package/lib/cjs/NativeAppStorage.js.map +1 -1
  130. package/lib/cjs/NativeHost.js.map +1 -1
  131. package/lib/cjs/NavigationRelationship.js.map +1 -1
  132. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  133. package/lib/cjs/PropertyStore.d.ts +17 -7
  134. package/lib/cjs/PropertyStore.d.ts.map +1 -1
  135. package/lib/cjs/PropertyStore.js +11 -5
  136. package/lib/cjs/PropertyStore.js.map +1 -1
  137. package/lib/cjs/Relationship.d.ts +0 -12
  138. package/lib/cjs/Relationship.d.ts.map +1 -1
  139. package/lib/cjs/Relationship.js +5 -16
  140. package/lib/cjs/Relationship.js.map +1 -1
  141. package/lib/cjs/RpcBackend.js.map +1 -1
  142. package/lib/cjs/SQLiteDb.d.ts +8 -4
  143. package/lib/cjs/SQLiteDb.d.ts.map +1 -1
  144. package/lib/cjs/SQLiteDb.js +25 -19
  145. package/lib/cjs/SQLiteDb.js.map +1 -1
  146. package/lib/cjs/Schema.js.map +1 -1
  147. package/lib/cjs/SchemaSync.d.ts +4 -1
  148. package/lib/cjs/SchemaSync.d.ts.map +1 -1
  149. package/lib/cjs/SchemaSync.js +24 -11
  150. package/lib/cjs/SchemaSync.js.map +1 -1
  151. package/lib/cjs/SchemaUtils.js +3 -3
  152. package/lib/cjs/SchemaUtils.js.map +1 -1
  153. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  154. package/lib/cjs/SqliteChangesetReader.js +2 -2
  155. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  156. package/lib/cjs/SqliteStatement.js +2 -2
  157. package/lib/cjs/SqliteStatement.js.map +1 -1
  158. package/lib/cjs/TextAnnotationElement.js.map +1 -1
  159. package/lib/cjs/TextAnnotationGeometry.d.ts +5 -1
  160. package/lib/cjs/TextAnnotationGeometry.d.ts.map +1 -1
  161. package/lib/cjs/TextAnnotationGeometry.js +11 -8
  162. package/lib/cjs/TextAnnotationGeometry.js.map +1 -1
  163. package/lib/cjs/TextAnnotationLayout.d.ts +21 -13
  164. package/lib/cjs/TextAnnotationLayout.d.ts.map +1 -1
  165. package/lib/cjs/TextAnnotationLayout.js +134 -92
  166. package/lib/cjs/TextAnnotationLayout.js.map +1 -1
  167. package/lib/cjs/Texture.js.map +1 -1
  168. package/lib/cjs/TileStorage.js.map +1 -1
  169. package/lib/cjs/TxnManager.d.ts +2 -1
  170. package/lib/cjs/TxnManager.d.ts.map +1 -1
  171. package/lib/cjs/TxnManager.js +4 -2
  172. package/lib/cjs/TxnManager.js.map +1 -1
  173. package/lib/cjs/ViewDefinition.d.ts +1 -18
  174. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  175. package/lib/cjs/ViewDefinition.js +1 -18
  176. package/lib/cjs/ViewDefinition.js.map +1 -1
  177. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  178. package/lib/cjs/ViewStore.d.ts +16 -2
  179. package/lib/cjs/ViewStore.d.ts.map +1 -1
  180. package/lib/cjs/ViewStore.js +20 -6
  181. package/lib/cjs/ViewStore.js.map +1 -1
  182. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  183. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +33 -0
  184. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -31
  185. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -52
  186. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -132
  187. package/lib/cjs/core-backend.d.ts +4 -2
  188. package/lib/cjs/core-backend.d.ts.map +1 -1
  189. package/lib/cjs/core-backend.js +5 -6
  190. package/lib/cjs/core-backend.js.map +1 -1
  191. package/lib/cjs/domains/FunctionalElements.d.ts +0 -10
  192. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  193. package/lib/cjs/domains/FunctionalElements.js +0 -10
  194. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  195. package/lib/cjs/domains/FunctionalSchema.d.ts.map +1 -1
  196. package/lib/cjs/domains/FunctionalSchema.js +2 -1
  197. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  198. package/lib/cjs/domains/GenericElements.d.ts +0 -18
  199. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  200. package/lib/cjs/domains/GenericElements.js +0 -18
  201. package/lib/cjs/domains/GenericElements.js.map +1 -1
  202. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  203. package/lib/cjs/internal/ChangesetConflictArgs.d.ts +24 -0
  204. package/lib/cjs/internal/ChangesetConflictArgs.d.ts.map +1 -0
  205. package/lib/cjs/internal/ChangesetConflictArgs.js +7 -0
  206. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -0
  207. package/lib/cjs/internal/ChannelAdmin.d.ts +34 -0
  208. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -0
  209. package/lib/cjs/internal/ChannelAdmin.js +117 -0
  210. package/lib/cjs/internal/ChannelAdmin.js.map +1 -0
  211. package/lib/cjs/internal/NativePlatform.d.ts +15 -0
  212. package/lib/cjs/internal/NativePlatform.d.ts.map +1 -0
  213. package/lib/cjs/internal/NativePlatform.js +49 -0
  214. package/lib/cjs/internal/NativePlatform.js.map +1 -0
  215. package/lib/cjs/internal/NoLocks.d.ts +6 -0
  216. package/lib/cjs/internal/NoLocks.d.ts.map +1 -0
  217. package/lib/cjs/internal/NoLocks.js +31 -0
  218. package/lib/cjs/internal/NoLocks.js.map +1 -0
  219. package/lib/cjs/{ServerBasedLocks.d.ts → internal/ServerBasedLocks.d.ts} +10 -16
  220. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -0
  221. package/lib/cjs/{ServerBasedLocks.js → internal/ServerBasedLocks.js} +29 -18
  222. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -0
  223. package/lib/cjs/internal/Symbols.d.ts +11 -0
  224. package/lib/cjs/internal/Symbols.d.ts.map +1 -0
  225. package/lib/cjs/internal/Symbols.js +21 -0
  226. package/lib/cjs/internal/Symbols.js.map +1 -0
  227. package/lib/cjs/internal/cross-package.d.ts +4 -0
  228. package/lib/cjs/internal/cross-package.d.ts.map +1 -0
  229. package/lib/cjs/internal/cross-package.js +16 -0
  230. package/lib/cjs/internal/cross-package.js.map +1 -0
  231. package/lib/cjs/internal/workspace/SettingsImpl.d.ts +43 -0
  232. package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -0
  233. package/lib/cjs/internal/workspace/SettingsImpl.js +161 -0
  234. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -0
  235. package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts +6 -0
  236. package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -0
  237. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +276 -0
  238. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -0
  239. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +41 -0
  240. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -0
  241. package/lib/cjs/internal/workspace/WorkspaceImpl.js +696 -0
  242. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -0
  243. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.d.ts +10 -0
  244. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.d.ts.map +1 -0
  245. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js +42 -0
  246. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -0
  247. package/lib/cjs/rpc/multipart.js.map +1 -1
  248. package/lib/cjs/rpc/tracing.d.ts.map +1 -1
  249. package/lib/cjs/rpc/tracing.js +5 -2
  250. package/lib/cjs/rpc/tracing.js.map +1 -1
  251. package/lib/cjs/rpc/web/logging.js.map +1 -1
  252. package/lib/cjs/rpc/web/request.js.map +1 -1
  253. package/lib/cjs/rpc/web/response.js.map +1 -1
  254. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  255. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +1 -0
  256. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  257. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +10 -6
  258. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  259. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts.map +1 -1
  260. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +5 -3
  261. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  262. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  263. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  264. package/lib/cjs/rpc-impl/WipRpcImpl.js.map +1 -1
  265. package/lib/cjs/workspace/Settings.d.ts +167 -138
  266. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  267. package/lib/cjs/workspace/Settings.js +68 -138
  268. package/lib/cjs/workspace/Settings.js.map +1 -1
  269. package/lib/cjs/workspace/SettingsSchemas.d.ts +112 -48
  270. package/lib/cjs/workspace/SettingsSchemas.d.ts.map +1 -1
  271. package/lib/cjs/workspace/SettingsSchemas.js +1 -172
  272. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  273. package/lib/cjs/workspace/Workspace.d.ts +411 -277
  274. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  275. package/lib/cjs/workspace/Workspace.js +76 -457
  276. package/lib/cjs/workspace/Workspace.js.map +1 -1
  277. package/lib/cjs/workspace/WorkspaceEditor.d.ts +245 -0
  278. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -0
  279. package/lib/cjs/workspace/WorkspaceEditor.js +34 -0
  280. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -0
  281. package/package.json +15 -14
  282. package/lib/cjs/ServerBasedLocks.d.ts.map +0 -1
  283. package/lib/cjs/ServerBasedLocks.js.map +0 -1
  284. package/lib/cjs/assets/Settings/Schemas/Cloud.Schema.json +0 -45
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module Workspace
8
+ */
9
+ var _a;
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.constructSettingsSchemas = void 0;
12
+ const fs = require("fs-extra");
13
+ const json5_1 = require("json5");
14
+ const path_1 = require("path");
15
+ const core_bentley_1 = require("@itwin/core-bentley");
16
+ const IModelJsFs_1 = require("../../IModelJsFs");
17
+ const Symbols_1 = require("../Symbols");
18
+ const makeSettingKey = (prefix, key) => `${prefix}/${key}`;
19
+ class SettingsSchemasImpl {
20
+ constructor() {
21
+ this[_a] = undefined;
22
+ this._allGroups = new Map();
23
+ /** a map of all registered Setting Definitions */
24
+ this.settingDefs = new Map();
25
+ /** a map of all registered TypeDefs */
26
+ this.typeDefs = new Map();
27
+ /** event that signals that the values in [[allSchemas]] have changed in some way. */
28
+ this.onSchemaChanged = new core_bentley_1.BeEvent();
29
+ }
30
+ verifyType(val, expectedType, path) {
31
+ if (expectedType === "integer") {
32
+ if (Number.isInteger(val))
33
+ return;
34
+ }
35
+ else if (expectedType === "null") {
36
+ if (val === null || val === undefined)
37
+ return;
38
+ }
39
+ else if (typeof val === expectedType)
40
+ return;
41
+ throw new Error(`value for ${path}: "${val}" is wrong type, expected ${expectedType}`);
42
+ }
43
+ validateSetting(value, settingName) {
44
+ const settingDef = this.settingDefs.get(settingName);
45
+ if (undefined !== settingDef) // if there's no setting definition, there's no rules so just return ok
46
+ this.validateProperty(value, settingDef, settingName);
47
+ return value;
48
+ }
49
+ /** @internal */
50
+ getObjectProperties(propDef, scope) {
51
+ let required = propDef.required;
52
+ let properties = propDef.properties;
53
+ // if this object extends a typeDef, add typeDef's properties and required values, recursively
54
+ if (propDef.extends !== undefined) {
55
+ const typeDef = this.typeDefs.get(propDef.extends);
56
+ if (undefined === typeDef)
57
+ throw new Error(`typeDef ${propDef.extends} does not exist for ${scope}`);
58
+ const expanded = this.getObjectProperties(typeDef, `${scope}.${propDef.extends}`);
59
+ if (expanded.required)
60
+ required = required ? [...required, ...expanded.required] : expanded.required;
61
+ if (expanded.properties) {
62
+ properties = properties ? { ...expanded.properties, ...properties } : expanded.properties;
63
+ }
64
+ }
65
+ properties = properties ?? {};
66
+ return { required, properties };
67
+ }
68
+ /** @internal */
69
+ getArrayItems(propDef, scope) {
70
+ let items = propDef.items;
71
+ if (undefined === items && propDef.extends) {
72
+ const typeDef = this.typeDefs.get(propDef.extends);
73
+ if (undefined === typeDef)
74
+ throw new Error(`typeDef ${propDef.extends} does not exist for ${scope}`);
75
+ items = typeDef.items;
76
+ }
77
+ if (undefined === items)
78
+ throw new Error(`array ${scope} has no items definition`);
79
+ return items;
80
+ }
81
+ validateProperty(val, propDef, path) {
82
+ switch (propDef.type) {
83
+ case "boolean":
84
+ case "number":
85
+ case "string":
86
+ case "integer":
87
+ case "null":
88
+ return this.verifyType(val, propDef.type, path);
89
+ case "array":
90
+ if (!Array.isArray(val))
91
+ throw new Error(`Property ${path} must be an array`);
92
+ const items = this.getArrayItems(propDef, path);
93
+ for (let i = 0; i < val.length; ++i)
94
+ this.validateProperty(val[i], items, `${path}[${i}]`);
95
+ return;
96
+ }
97
+ if (!val || typeof val !== "object")
98
+ throw new Error(`${path} must be an object`);
99
+ const { required, properties } = this.getObjectProperties(propDef, path);
100
+ // first ensure all required properties are present
101
+ if (undefined !== required) {
102
+ for (const entry of required) {
103
+ const value = val[entry];
104
+ if (undefined === value)
105
+ throw new Error(`required value for "${entry}" is missing in "${path}"`);
106
+ }
107
+ }
108
+ // you can supply default values in typeDefs. See if any members are undefined that have a default.
109
+ if (undefined !== properties) {
110
+ for (const [key, prop] of Object.entries(properties)) {
111
+ if (val[key] === undefined && prop.default)
112
+ val[key] = prop.default;
113
+ }
114
+ }
115
+ // then validate all values in the supplied object are valid
116
+ for (const key of Object.keys(val)) {
117
+ const prop = properties[key];
118
+ if (prop !== undefined) { // note: extra values are ignored.
119
+ this.validateProperty(val[key], prop, `${path}.${key}`);
120
+ }
121
+ }
122
+ }
123
+ /**
124
+ * Add one or more [[SettingSchemaGroup]]s. `SettingSchemaGroup`s must include a `schemaPrefix` member that is used
125
+ * to identify the group. If a group with the same name is already registered, the old values are first removed and then the new group is added.
126
+ */
127
+ addGroup(settingsGroup) {
128
+ if (!Array.isArray(settingsGroup))
129
+ settingsGroup = [settingsGroup];
130
+ this.doAdd(settingsGroup);
131
+ this.onSchemaChanged.raiseEvent();
132
+ }
133
+ /** Add a [[SettingSchemaGroup]] from stringified json5. */
134
+ addJson(settingSchema) {
135
+ this.addGroup((0, json5_1.parse)(settingSchema));
136
+ }
137
+ /** Add a [[SettingSchemaGroup]] from a json5 file. */
138
+ addFile(fileName) {
139
+ try {
140
+ this.addJson(fs.readFileSync(fileName, "utf-8"));
141
+ }
142
+ catch (e) {
143
+ throw new Error(`parsing SettingSchema file "${fileName}": ${e.message}"`);
144
+ }
145
+ }
146
+ /** Add all files with a either ".json" or ".json5" extension from a supplied directory. */
147
+ addDirectory(dirName) {
148
+ for (const fileName of IModelJsFs_1.IModelJsFs.readdirSync(dirName)) {
149
+ const ext = (0, path_1.extname)(fileName);
150
+ if (ext === ".json5" || ext === ".json")
151
+ this.addFile((0, path_1.join)(dirName, fileName));
152
+ }
153
+ }
154
+ /** Remove a previously added [[SettingSchemaGroup]] by schemaPrefix */
155
+ removeGroup(schemaPrefix) {
156
+ this.doRemove(schemaPrefix);
157
+ this.onSchemaChanged.raiseEvent();
158
+ }
159
+ doAdd(settingsGroup) {
160
+ settingsGroup.forEach((group) => {
161
+ if (undefined === group.schemaPrefix)
162
+ throw new Error(`settings group has no "schemaPrefix" member`);
163
+ this.doRemove(group.schemaPrefix);
164
+ this.validateAndAdd(group);
165
+ this._allGroups.set(group.schemaPrefix, group);
166
+ });
167
+ }
168
+ doRemove(schemaPrefix) {
169
+ const group = this._allGroups.get(schemaPrefix);
170
+ if (undefined !== group?.settingDefs) {
171
+ for (const key of Object.keys(group.settingDefs))
172
+ this.settingDefs.delete(makeSettingKey(schemaPrefix, key));
173
+ }
174
+ if (undefined !== group?.typeDefs) {
175
+ for (const key of Object.keys(group.typeDefs))
176
+ this.settingDefs.delete(makeSettingKey(schemaPrefix, key));
177
+ }
178
+ this._allGroups.delete(schemaPrefix);
179
+ }
180
+ validateName(name) {
181
+ if (!name.trim())
182
+ throw new Error(`empty property name`);
183
+ }
184
+ verifyPropertyDef(name, property) {
185
+ if (!property)
186
+ throw new Error(`missing required property ${name}`);
187
+ if (!property.type)
188
+ throw new Error(`property ${name} has no type`);
189
+ switch (property.type) {
190
+ case "boolean":
191
+ case "integer":
192
+ case "null":
193
+ case "number":
194
+ case "string":
195
+ return;
196
+ case "object":
197
+ const required = property.required;
198
+ const props = property.properties;
199
+ if (required && props) {
200
+ for (const entry of required) {
201
+ if (undefined === props[entry])
202
+ throw new Error(`missing required property of ${name}: "${entry}"`);
203
+ }
204
+ }
205
+ if (props) {
206
+ for (const key of Object.keys(props))
207
+ try {
208
+ this.verifyPropertyDef(key, props[key]);
209
+ }
210
+ catch (e) {
211
+ throw new Error(`property ${key} of ${name}: ${e.message}`);
212
+ }
213
+ }
214
+ return;
215
+ case "array":
216
+ if (typeof property.extends === "string")
217
+ return;
218
+ if (typeof property.items !== "object")
219
+ throw new Error(`array property ${name} has no items member`);
220
+ try {
221
+ this.verifyPropertyDef("items", property.items);
222
+ }
223
+ catch (e) {
224
+ throw new Error(`array property ${name}: ${e.message}`);
225
+ }
226
+ return;
227
+ default:
228
+ throw new Error(`property ${name} has illegal type "${property.type}"`);
229
+ }
230
+ }
231
+ validateAndAdd(group) {
232
+ const settingDefs = group.settingDefs;
233
+ if (undefined !== settingDefs) {
234
+ for (const key of Object.keys(settingDefs)) {
235
+ this.validateName(key);
236
+ this.verifyPropertyDef(key, settingDefs[key]);
237
+ const property = settingDefs[key];
238
+ (0, core_bentley_1.assert)(undefined !== property);
239
+ property.default = property.default ?? this.getDefaultValue(property.type);
240
+ this.settingDefs.set(makeSettingKey(group.schemaPrefix, key), property);
241
+ }
242
+ }
243
+ const typeDefs = group.typeDefs ?? {};
244
+ for (const key of Object.keys(typeDefs)) {
245
+ this.validateName(key);
246
+ this.verifyPropertyDef(key, typeDefs[key]);
247
+ const typeDef = typeDefs[key];
248
+ (0, core_bentley_1.assert)(undefined !== typeDef);
249
+ this.typeDefs.set(makeSettingKey(group.schemaPrefix, key), typeDef);
250
+ }
251
+ }
252
+ getDefaultValue(type) {
253
+ type = Array.isArray(type) ? type[0] : type;
254
+ switch (type) {
255
+ case "boolean":
256
+ return false;
257
+ case "integer":
258
+ case "number":
259
+ return 0;
260
+ case "string":
261
+ return "";
262
+ case "array":
263
+ return [];
264
+ case "object":
265
+ return {};
266
+ default:
267
+ return undefined;
268
+ }
269
+ }
270
+ }
271
+ _a = Symbols_1._implementationProhibited;
272
+ function constructSettingsSchemas() {
273
+ return new SettingsSchemasImpl();
274
+ }
275
+ exports.constructSettingsSchemas = constructSettingsSchemas;
276
+ //# sourceMappingURL=SettingsSchemasImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsSchemasImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsSchemasImpl.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 * as fs from \"fs-extra\";\nimport { parse } from \"json5\";\nimport { extname, join } from \"path\";\nimport { assert, BeEvent, JSONSchemaType, JSONSchemaTypeName, Mutable } from \"@itwin/core-bentley\";\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { SettingGroupSchema, SettingSchema, SettingsSchemas } from \"../../workspace/SettingsSchemas\";\nimport { _implementationProhibited } from \"../Symbols\";\n\nconst makeSettingKey = (prefix: string, key: string) => `${prefix}/${key}`;\n\nclass SettingsSchemasImpl implements SettingsSchemas {\n public readonly [_implementationProhibited] = undefined;\n private readonly _allGroups = new Map<string, SettingGroupSchema>();\n /** a map of all registered Setting Definitions */\n public readonly settingDefs = new Map<string, SettingSchema>();\n /** a map of all registered TypeDefs */\n public readonly typeDefs = new Map<string, SettingSchema>();\n /** event that signals that the values in [[allSchemas]] have changed in some way. */\n public readonly onSchemaChanged = new BeEvent<() => void>();\n\n private verifyType<T>(val: T, expectedType: JSONSchemaTypeName, path: string) {\n if (expectedType === \"integer\") {\n if (Number.isInteger(val))\n return;\n } else if (expectedType === \"null\") {\n if (val === null || val === undefined)\n return;\n } else if (typeof val === expectedType)\n return;\n\n throw new Error(`value for ${path}: \"${val}\" is wrong type, expected ${expectedType}`);\n }\n\n public validateSetting<T>(value: T, settingName: string): T {\n const settingDef = this.settingDefs.get(settingName);\n if (undefined !== settingDef) // if there's no setting definition, there's no rules so just return ok\n this.validateProperty(value, settingDef, settingName);\n return value;\n }\n\n /** @internal */\n public getObjectProperties(propDef: Readonly<SettingSchema>, scope: string): { required?: string[], properties: { [name: string]: SettingSchema } } {\n let required = propDef.required;\n let properties = propDef.properties;\n\n // if this object extends a typeDef, add typeDef's properties and required values, recursively\n if (propDef.extends !== undefined) {\n const typeDef = this.typeDefs.get(propDef.extends);\n if (undefined === typeDef)\n throw new Error(`typeDef ${propDef.extends} does not exist for ${scope}`);\n const expanded = this.getObjectProperties(typeDef, `${scope}.${propDef.extends}`);\n if (expanded.required)\n required = required ? [...required, ...expanded.required] : expanded.required;\n if (expanded.properties) {\n properties = properties ? { ...expanded.properties, ...properties } : expanded.properties;\n }\n }\n properties = properties ?? {};\n return { required, properties };\n }\n\n /** @internal */\n public getArrayItems(propDef: Readonly<SettingSchema>, scope: string): SettingSchema {\n let items = propDef.items;\n if (undefined === items && propDef.extends) {\n const typeDef = this.typeDefs.get(propDef.extends);\n if (undefined === typeDef)\n throw new Error(`typeDef ${propDef.extends} does not exist for ${scope}`);\n items = typeDef.items;\n }\n if (undefined === items)\n throw new Error(`array ${scope} has no items definition`);\n return items;\n }\n\n private validateProperty<T>(val: T, propDef: Readonly<SettingSchema>, path: string) {\n switch (propDef.type) {\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"integer\":\n case \"null\":\n return this.verifyType(val, propDef.type, path);\n\n case \"array\":\n if (!Array.isArray(val))\n throw new Error(`Property ${path} must be an array`);\n const items = this.getArrayItems(propDef, path);\n for (let i = 0; i < val.length; ++i)\n this.validateProperty(val[i], items, `${path}[${i}]`);\n return;\n }\n if (!val || typeof val !== \"object\")\n throw new Error(`${path} must be an object`);\n\n const { required, properties } = this.getObjectProperties(propDef, path);\n\n // first ensure all required properties are present\n if (undefined !== required) {\n for (const entry of required) {\n const value = (val as any)[entry];\n if (undefined === value)\n throw new Error(`required value for \"${entry}\" is missing in \"${path}\"`);\n }\n }\n\n // you can supply default values in typeDefs. See if any members are undefined that have a default.\n if (undefined !== properties) {\n for (const [key, prop] of Object.entries(properties)) {\n if ((val as any)[key] === undefined && prop.default)\n (val as any)[key] = prop.default;\n }\n }\n\n // then validate all values in the supplied object are valid\n for (const key of Object.keys(val)) {\n const prop = properties[key];\n if (prop !== undefined) { // note: extra values are ignored.\n this.validateProperty((val as any)[key], prop, `${path}.${key}`);\n }\n }\n }\n\n /**\n * Add one or more [[SettingSchemaGroup]]s. `SettingSchemaGroup`s must include a `schemaPrefix` member that is used\n * to identify the group. If a group with the same name is already registered, the old values are first removed and then the new group is added.\n */\n public addGroup(settingsGroup: SettingGroupSchema | SettingGroupSchema[]): void {\n if (!Array.isArray(settingsGroup))\n settingsGroup = [settingsGroup];\n\n this.doAdd(settingsGroup);\n this.onSchemaChanged.raiseEvent();\n }\n\n /** Add a [[SettingSchemaGroup]] from stringified json5. */\n public addJson(settingSchema: string): void {\n this.addGroup(parse(settingSchema));\n }\n\n /** Add a [[SettingSchemaGroup]] from a json5 file. */\n public addFile(fileName: LocalFileName): void {\n try {\n this.addJson(fs.readFileSync(fileName, \"utf-8\"));\n } catch (e: any) {\n throw new Error(`parsing SettingSchema file \"${fileName}\": ${e.message}\"`);\n }\n }\n\n /** Add all files with a either \".json\" or \".json5\" extension from a supplied directory. */\n public addDirectory(dirName: LocalDirName) {\n for (const fileName of IModelJsFs.readdirSync(dirName)) {\n const ext = extname(fileName);\n if (ext === \".json5\" || ext === \".json\")\n this.addFile(join(dirName, fileName));\n }\n }\n\n /** Remove a previously added [[SettingSchemaGroup]] by schemaPrefix */\n public removeGroup(schemaPrefix: string): void {\n this.doRemove(schemaPrefix);\n this.onSchemaChanged.raiseEvent();\n }\n\n private doAdd(settingsGroup: SettingGroupSchema[]) {\n settingsGroup.forEach((group) => {\n if (undefined === group.schemaPrefix)\n throw new Error(`settings group has no \"schemaPrefix\" member`);\n\n this.doRemove(group.schemaPrefix);\n this.validateAndAdd(group);\n this._allGroups.set(group.schemaPrefix, group);\n });\n }\n\n private doRemove(schemaPrefix: string) {\n const group = this._allGroups.get(schemaPrefix);\n if (undefined !== group?.settingDefs) {\n for (const key of Object.keys(group.settingDefs))\n this.settingDefs.delete(makeSettingKey(schemaPrefix, key));\n }\n if (undefined !== group?.typeDefs) {\n for (const key of Object.keys(group.typeDefs))\n this.settingDefs.delete(makeSettingKey(schemaPrefix, key));\n }\n this._allGroups.delete(schemaPrefix);\n }\n\n private validateName(name: string) {\n if (!name.trim())\n throw new Error(`empty property name`);\n }\n\n private verifyPropertyDef(name: string, property: SettingSchema | undefined) {\n if (!property)\n throw new Error(`missing required property ${name}`);\n\n if (!property.type)\n throw new Error(`property ${name} has no type`);\n\n switch (property.type) {\n case \"boolean\":\n case \"integer\":\n case \"null\":\n case \"number\":\n case \"string\":\n return;\n\n case \"object\":\n const required = property.required;\n const props = property.properties;\n if (required && props) {\n for (const entry of required) {\n if (undefined === props[entry])\n throw new Error(`missing required property of ${name}: \"${entry}\"`);\n }\n }\n if (props) {\n for (const key of Object.keys(props))\n try {\n this.verifyPropertyDef(key, props[key]);\n } catch (e: any) {\n throw new Error(`property ${key} of ${name}: ${e.message}`);\n }\n }\n return;\n\n case \"array\":\n if (typeof property.extends === \"string\")\n return;\n if (typeof property.items !== \"object\")\n throw new Error(`array property ${name} has no items member`);\n try {\n this.verifyPropertyDef(\"items\", property.items);\n } catch (e: any) {\n throw new Error(`array property ${name}: ${e.message}`);\n }\n return;\n\n default:\n throw new Error(`property ${name} has illegal type \"${property.type}\"`);\n }\n }\n\n private validateAndAdd(group: SettingGroupSchema) {\n const settingDefs = group.settingDefs;\n if (undefined !== settingDefs) {\n for (const key of Object.keys(settingDefs)) {\n this.validateName(key);\n this.verifyPropertyDef(key, settingDefs[key]);\n const property: Mutable<SettingSchema> | undefined = settingDefs[key];\n assert(undefined !== property);\n property.default = property.default ?? this.getDefaultValue(property.type);\n this.settingDefs.set(makeSettingKey(group.schemaPrefix, key), property);\n }\n }\n const typeDefs = group.typeDefs ?? {};\n for (const key of Object.keys(typeDefs)) {\n this.validateName(key);\n this.verifyPropertyDef(key, typeDefs[key]);\n const typeDef = typeDefs[key];\n assert(undefined !== typeDef);\n this.typeDefs.set(makeSettingKey(group.schemaPrefix, key), typeDef);\n }\n }\n\n private getDefaultValue(type: JSONSchemaTypeName | JSONSchemaTypeName[]): JSONSchemaType | undefined {\n type = Array.isArray(type) ? type[0] : type;\n switch (type) {\n case \"boolean\":\n return false;\n case \"integer\":\n case \"number\":\n return 0;\n case \"string\":\n return \"\";\n case \"array\":\n return [];\n case \"object\":\n return {};\n default:\n return undefined;\n }\n }\n}\n\nexport function constructSettingsSchemas(): SettingsSchemas {\n return new SettingsSchemasImpl();\n}\n"]}
@@ -0,0 +1,41 @@
1
+ /** @packageDocumentation
2
+ * @module Workspace
3
+ */
4
+ import { FilePropertyProps } from "@itwin/core-common";
5
+ import { Settings } from "../../workspace/Settings";
6
+ import { Workspace, WorkspaceContainer, WorkspaceContainerId, WorkspaceDb, WorkspaceDbFullName, WorkspaceDbLoadError, WorkspaceDbName, WorkspaceDbProps, WorkspaceDbVersion, WorkspaceOpts } from "../../workspace/Workspace";
7
+ import { WorkspaceEditor } from "../../workspace/WorkspaceEditor";
8
+ /** file extension for local WorkspaceDbs */
9
+ export declare const workspaceDbFileExt = "itwin-workspace";
10
+ export declare function constructWorkspaceDb(props: WorkspaceDbProps, container: WorkspaceContainer): WorkspaceDb;
11
+ export declare function constructWorkspace(settings: Settings, opts?: WorkspaceOpts): OwnedWorkspace;
12
+ export declare function constructWorkspaceEditor(): WorkspaceEditor;
13
+ export declare function noLeadingOrTrailingSpaces(name: string, msg: string): void;
14
+ export declare function validateWorkspaceDbName(dbName: WorkspaceDbName): void;
15
+ /**
16
+ * Validate that a WorkspaceContainer.Id is valid.
17
+ * The rules for ContainerIds (from Azure, see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata):
18
+ * - may only contain lower case letters, numbers or dashes
19
+ * - may not start or end with with a dash nor have more than one dash in a row
20
+ * - may not be shorter than 3 or longer than 63 characters
21
+ */
22
+ export declare function validateWorkspaceContainerId(id: WorkspaceContainerId): void;
23
+ export declare function validateWorkspaceDbVersion(version?: WorkspaceDbVersion): string;
24
+ /**
25
+ * Parse the name stored in a WorkspaceContainer into the dbName and version number. A single WorkspaceContainer may hold
26
+ * many versions of the same WorkspaceDb. The name of the Db in the WorkspaceContainer is in the format "name:version". This
27
+ * function splits them into separate strings.
28
+ */
29
+ export declare function parseWorkspaceDbFileName(dbFileName: WorkspaceDbFullName): {
30
+ dbName: WorkspaceDbName;
31
+ version: WorkspaceDbVersion;
32
+ };
33
+ /** Create a dbName for a WorkspaceDb from its base name and version. This will be in the format "name:version" */
34
+ export declare function makeWorkspaceDbFileName(dbName: WorkspaceDbName, version?: WorkspaceDbVersion): WorkspaceDbName;
35
+ export declare const workspaceManifestProperty: FilePropertyProps;
36
+ export declare function throwWorkspaceDbLoadErrors(msg: string, errors: WorkspaceDbLoadError[]): never;
37
+ export interface OwnedWorkspace extends Workspace {
38
+ /** Only the owner of a Workspace may close it. */
39
+ close(): void;
40
+ }
41
+ //# sourceMappingURL=WorkspaceImpl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceImpl.d.ts","sourceRoot":"","sources":["../../../../src/internal/workspace/WorkspaceImpl.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,iBAAiB,EAA4C,MAAM,oBAAoB,CAAC;AAMjG,OAAO,EAAe,QAAQ,EAAgE,MAAM,0BAA0B,CAAC;AAE/H,OAAO,EACsB,SAAS,EAAE,kBAAkB,EAAE,oBAAoB,EAA2B,WAAW,EACpH,mBAAmB,EAAE,oBAAoB,EAA8C,eAAe,EAA6B,gBAAgB,EAC1F,kBAAkB,EAAE,aAAa,EAC3F,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAqH,eAAe,EAAE,MAAM,iCAAiC,CAAC;AASrL,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAorBpD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,kBAAkB,GAAG,WAAW,CAExG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,cAAc,CAE3F;AAED,wBAAgB,wBAAwB,IAAI,eAAe,CAE1D;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAGlE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,QAK9D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,oBAAoB,QAGpE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,kBAAkB,UAWtE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAGlI;AAED,kHAAkH;AAClH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAE9G;AAED,eAAO,MAAM,yBAAyB,EAAE,iBAAgE,CAAC;AASzG,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAI7F;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;CACf"}