@itwin/core-backend 5.10.0-dev.8 → 5.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -1
- package/lib/cjs/BriefcaseManager.d.ts +8 -1
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/Category.d.ts +4 -4
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts +6 -6
- package/lib/cjs/ChangesetECAdaptor.js +4 -4
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChangesetReader.d.ts +84 -1
- package/lib/cjs/ChangesetReader.d.ts.map +1 -1
- package/lib/cjs/ChangesetReader.js +108 -12
- package/lib/cjs/ChangesetReader.js.map +1 -1
- package/lib/cjs/ClassRegistry.d.ts +3 -3
- package/lib/cjs/ClassRegistry.js +3 -3
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +3 -3
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +2 -2
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +4 -0
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js +1 -0
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/Element.d.ts +16 -13
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +8 -5
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +5 -5
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.d.ts +13 -5
- package/lib/cjs/Entity.d.ts.map +1 -1
- package/lib/cjs/Entity.js +13 -5
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/ExternalSource.d.ts +2 -2
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +112 -40
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +215 -42
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +6 -6
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.d.ts +6 -0
- package/lib/cjs/LocalHub.d.ts.map +1 -1
- package/lib/cjs/LocalHub.js +23 -0
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/Material.d.ts +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +6 -6
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +13 -11
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +9 -7
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/SheetIndex.d.ts +4 -4
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/Texture.d.ts +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +7 -0
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +6 -6
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js +2 -3
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +6 -2
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +1 -0
- package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/GenericElements.d.ts +2 -2
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js +23 -4
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/HubMock.d.ts +24 -1
- package/lib/cjs/internal/HubMock.d.ts.map +1 -1
- package/lib/cjs/internal/HubMock.js +60 -39
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.d.ts +19 -1
- package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js +55 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +1 -2
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +55 -9
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +7 -11
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.d.ts +20 -3
- package/lib/cjs/workspace/SettingsSchemas.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +3 -1
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +8 -1
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/Category.d.ts +4 -4
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts +6 -6
- package/lib/esm/ChangesetECAdaptor.js +4 -4
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChangesetReader.d.ts +84 -1
- package/lib/esm/ChangesetReader.d.ts.map +1 -1
- package/lib/esm/ChangesetReader.js +108 -12
- package/lib/esm/ChangesetReader.js.map +1 -1
- package/lib/esm/ClassRegistry.d.ts +3 -3
- package/lib/esm/ClassRegistry.js +3 -3
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +3 -3
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +2 -2
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +4 -0
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.d.ts.map +1 -1
- package/lib/esm/ECSqlSyncReader.js +1 -0
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/Element.d.ts +16 -13
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +8 -5
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementTreeWalker.d.ts +5 -5
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.d.ts +13 -5
- package/lib/esm/Entity.d.ts.map +1 -1
- package/lib/esm/Entity.js +13 -5
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/ExternalSource.d.ts +2 -2
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +112 -40
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +216 -43
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/LineStyle.d.ts +6 -6
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.d.ts +6 -0
- package/lib/esm/LocalHub.d.ts.map +1 -1
- package/lib/esm/LocalHub.js +23 -0
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/Material.d.ts +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +6 -6
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/Relationship.d.ts +13 -11
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +9 -7
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/SheetIndex.d.ts +4 -4
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/Texture.d.ts +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +7 -0
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +6 -6
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js +2 -3
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.d.ts +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/GenericElements.d.ts +2 -2
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js +23 -4
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/HubMock.d.ts +24 -1
- package/lib/esm/internal/HubMock.d.ts.map +1 -1
- package/lib/esm/internal/HubMock.js +61 -40
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.d.ts +19 -1
- package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js +55 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js +55 -9
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +7 -11
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js +60 -0
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts +2 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts.map +1 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +239 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -0
- package/lib/esm/test/annotations/FrameGeometry.test.js +2 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +1 -0
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +10 -2
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +10 -0
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +1 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +13 -0
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +1 -0
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js +6 -2
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +5 -0
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js +1 -0
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +10 -0
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +1 -0
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +31 -0
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +3 -0
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +2 -0
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewHidden.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.js +275 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.js +184 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js +141 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.js +475 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -0
- package/lib/esm/test/standalone/ChangesetReader.test.js +945 -337
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DeleteElements.test.js +45 -0
- package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +6 -0
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js +62 -0
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js +2 -0
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js +397 -0
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +23 -0
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.d.ts +20 -3
- package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +3 -1
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsSchemas.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SettingsSchemas.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAE/B,2FAA2F;IAC3F,kIAAkI;IAClI,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC;IACF,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC;QAC3C,iCAAiC;QACjC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAS,CAAC,CAAC,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAEjF,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,uBAAuB,CAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,uBAAuB,CAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACxF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,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\nimport { expect } from \"chai\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { IModelHost } from \"../../IModelHost\";\nimport { TestUtils } from \"../TestUtils\";\n\ndescribe(\"SettingsSchemas\", () => {\n\n // SettingsSchema tests change the state of the IModelHost object. They should always clear\n // the current state before and after they run so they're not affected by, nor influence, other tests running in the same process.\n const restartSession = async () => {\n await IModelHost.shutdown();\n await TestUtils.startBackend();\n };\n before(async () => {\n await restartSession();\n });\n after(async () => {\n await restartSession();\n });\n\n it(\"add groups\", async () => {\n const schemas = IModelHost.settingsSchemas;\n // can't add a group with no name\n expect(() => schemas.addGroup({} as any)).throws(`has no \"schemaPrefix\" member`);\n\n schemas.addFile(IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\"));\n expect(schemas.settingDefs.get(\"testApp/list/openMode\")!.type).equals(\"string\");\n expect(schemas.settingDefs.get(\"testApp/list/openMode\")!.default).equals(\"singleClick\");\n expect(schemas.settingDefs.get(\"testApp/tree/blah\")!.default).equals(true);\n });\n\n});\n"]}
|
|
1
|
+
{"version":3,"file":"SettingsSchemas.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SettingsSchemas.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { IModelHost } from \"../../IModelHost\";\nimport { TestUtils } from \"../TestUtils\";\n\ndescribe(\"SettingsSchemas\", () => {\n\n // SettingsSchema tests change the state of the IModelHost object. They should always clear\n // the current state before and after they run so they're not affected by, nor influence, other tests running in the same process.\n const restartSession = async () => {\n await IModelHost.shutdown();\n await TestUtils.startBackend();\n };\n before(async () => {\n await restartSession();\n });\n after(async () => {\n await restartSession();\n });\n\n it(\"add groups\", async () => {\n const schemas = IModelHost.settingsSchemas;\n // can't add a group with no name\n expect(() => schemas.addGroup({} as any)).throws(`has no \"schemaPrefix\" member`);\n\n schemas.addGroup({\n schemaPrefix: \"title-test\",\n title: \"Title Test\",\n description: \"schema with a user-facing title\",\n settingDefs: {\n setting: {\n type: \"string\",\n },\n },\n });\n expect(schemas.groups.get(\"title-test\")?.title).equals(\"Title Test\");\n expect(schemas.groups.get(\"title-test\")?.description).equals(\"schema with a user-facing title\");\n expect(schemas.settingDefs.get(\"title-test/setting\")!.type).equals(\"string\");\n\n schemas.addFile(IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\"));\n expect(schemas.groups.get(\"testApp\")?.title).equals(\"Test App\");\n expect(schemas.groups.get(\"testApp\")?.description).equals(\"the settings for test application 1\");\n expect(schemas.settingDefs.get(\"testApp/list/openMode\")!.type).equals(\"string\");\n expect(schemas.settingDefs.get(\"testApp/list/openMode\")!.default).equals(\"singleClick\");\n expect(schemas.settingDefs.get(\"testApp/tree/blah\")!.default).equals(true);\n });\n\n it(\"resolveSchema resolves object extends chains recursively\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-object\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test object resolution\",\n typeDefs: {\n nestedBase: {\n type: \"object\",\n required: [\"nestedReq\"],\n properties: {\n nestedReq: { type: \"integer\" },\n nestedBaseOnly: { type: \"string\" },\n },\n },\n baseThing: {\n type: \"object\",\n required: [\"baseReq\"],\n properties: {\n baseReq: { type: \"string\" },\n overridden: { type: \"string\" },\n baseOnly: { type: \"number\" },\n nested: {\n type: \"object\",\n extends: `${prefix}/nestedBase`,\n properties: {\n nestedChildOnly: { type: \"boolean\" },\n },\n },\n },\n },\n },\n settingDefs: {\n thing: {\n type: \"object\",\n extends: `${prefix}/baseThing`,\n required: [\"derivedReq\"],\n properties: {\n derivedReq: { type: \"boolean\" },\n overridden: { type: \"number\" },\n },\n },\n },\n });\n\n try {\n const resolved = schemas.getResolvedSettingDef(`${prefix}/thing`)!;\n expect(resolved.type).to.equal(\"object\");\n expect(resolved).to.not.have.property(\"extends\");\n expect(resolved.required).to.have.members([\"baseReq\", \"derivedReq\"]);\n expect(resolved.properties).to.include.keys(\"baseReq\", \"baseOnly\", \"derivedReq\", \"overridden\", \"nested\");\n expect(resolved.properties?.overridden.type).to.equal(\"number\");\n expect(resolved.properties?.baseOnly.type).to.equal(\"number\");\n\n const nested = resolved.properties?.nested;\n expect(nested?.type).to.equal(\"object\");\n expect(nested).to.not.have.property(\"extends\");\n expect(nested?.required).to.have.members([\"nestedReq\"]);\n expect(nested?.properties).to.include.keys(\"nestedReq\", \"nestedBaseOnly\", \"nestedChildOnly\");\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"resolveSchema includes inherited properties from object typedefs\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-object-inherited-props\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test inherited object properties\",\n typeDefs: {\n baseThing: {\n type: \"object\",\n properties: {\n inheritedName: { type: \"string\" },\n inheritedEnabled: { type: \"boolean\" },\n },\n },\n },\n settingDefs: {\n thing: {\n type: \"object\",\n extends: `${prefix}/baseThing`,\n properties: {\n localCount: { type: \"integer\" },\n },\n },\n },\n });\n\n try {\n const resolved = schemas.getResolvedSettingDef(`${prefix}/thing`)!;\n expect(resolved.properties).to.include.keys(\"inheritedName\", \"inheritedEnabled\", \"localCount\");\n expect(resolved.properties?.inheritedName.type).to.equal(\"string\");\n expect(resolved.properties?.inheritedEnabled.type).to.equal(\"boolean\");\n expect(resolved.properties?.localCount.type).to.equal(\"integer\");\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"resolveSchema deduplicates required properties inherited from object typedefs\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-object-required\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test required property deduplication\",\n typeDefs: {\n baseThing: {\n type: \"object\",\n required: [\"sharedReq\", \"baseReq\"],\n properties: {\n sharedReq: { type: \"string\" },\n baseReq: { type: \"boolean\" },\n derivedReq: { type: \"integer\" },\n },\n },\n },\n settingDefs: {\n thing: {\n type: \"object\",\n extends: `${prefix}/baseThing`,\n required: [\"sharedReq\", \"derivedReq\"],\n properties: {\n sharedReq: { type: \"string\" },\n derivedReq: { type: \"integer\" },\n },\n },\n },\n });\n\n try {\n const resolved = schemas.getResolvedSettingDef(`${prefix}/thing`)!;\n expect(resolved.required).to.have.members([\"sharedReq\", \"baseReq\", \"derivedReq\"]);\n expect(resolved.required?.filter((name) => name === \"sharedReq\")).to.have.lengthOf(1);\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"resolveSchema resolves array items through extends\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-array\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test array resolution\",\n typeDefs: {\n stringList: {\n type: \"array\",\n combineArray: true,\n minItems: 1,\n description: \"base array typedef\",\n items: { type: \"string\" },\n },\n },\n settingDefs: {\n names: {\n type: \"array\",\n extends: `${prefix}/stringList`,\n },\n },\n });\n\n try {\n const resolved = schemas.getResolvedSettingDef(`${prefix}/names`)!;\n expect(resolved.type).to.equal(\"array\");\n expect(resolved).to.not.have.property(\"extends\");\n expect(resolved.combineArray).to.equal(true);\n expect(resolved.minItems).to.equal(1);\n expect(resolved.description).to.equal(\"base array typedef\");\n expect(resolved.items?.type).to.equal(\"string\");\n expect(resolved.items).to.not.have.property(\"extends\");\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"resolveSchema lets derived array schema properties override inherited typedef properties\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-array-overrides\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test array override precedence\",\n typeDefs: {\n stringList: {\n type: \"array\",\n combineArray: true,\n minItems: 1,\n description: \"base array typedef\",\n items: { type: \"string\" },\n },\n },\n settingDefs: {\n names: {\n type: \"array\",\n extends: `${prefix}/stringList`,\n combineArray: false,\n minItems: 3,\n description: \"derived array schema\",\n },\n },\n });\n\n try {\n const resolved = schemas.getResolvedSettingDef(`${prefix}/names`)!;\n expect(resolved.combineArray).to.equal(false);\n expect(resolved.minItems).to.equal(3);\n expect(resolved.description).to.equal(\"derived array schema\");\n expect(resolved.items?.type).to.equal(\"string\");\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"resolveSchema resolves array items through multi-level typedef inheritance\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-array-multilevel\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test multi-level array typedef inheritance\",\n typeDefs: {\n c: {\n type: \"array\",\n combineArray: true,\n items: { type: \"string\" },\n },\n b: {\n type: \"array\",\n extends: `${prefix}/c`,\n },\n },\n settingDefs: {\n names: {\n type: \"array\",\n extends: `${prefix}/b`,\n },\n },\n });\n\n try {\n const resolved = schemas.getResolvedSettingDef(`${prefix}/names`)!;\n expect(resolved.combineArray).to.equal(true);\n expect(resolved.items?.type).to.equal(\"string\");\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"getResolvedSettingDef returns a resolved setting schema by name\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-setting-schema\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test resolved setting schema lookup\",\n typeDefs: {\n stringList: {\n type: \"array\",\n combineArray: true,\n items: { type: \"string\" },\n },\n },\n settingDefs: {\n names: {\n type: \"array\",\n extends: `${prefix}/stringList`,\n },\n },\n });\n\n try {\n const resolved = schemas.getResolvedSettingDef(`${prefix}/names`);\n expect(resolved).to.not.be.undefined;\n expect(resolved?.type).to.equal(\"array\");\n expect(resolved).to.not.have.property(\"extends\");\n expect(resolved?.combineArray).to.equal(true);\n expect(resolved?.items?.type).to.equal(\"string\");\n expect(schemas.getResolvedSettingDef(`${prefix}/missing`)).to.be.undefined;\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"getResolvedSettingDef resolves built-in workspace settings schemas\", () => {\n const schemas = IModelHost.settingsSchemas;\n\n const resolved = schemas.getResolvedSettingDef(\"itwin/core/workspace/settingsWorkspaces\");\n expect(resolved).to.not.be.undefined;\n expect(resolved?.type).to.equal(\"array\");\n expect(resolved?.items?.type).to.equal(\"object\");\n expect(resolved?.items).to.not.have.property(\"extends\");\n expect(resolved?.items?.required).to.have.members([\"containerId\", \"baseUri\"]);\n expect(resolved?.items?.properties).to.include.keys(\"dbName\", \"baseUri\", \"containerId\", \"storageType\", \"resourceName\", \"priority\");\n expect(resolved?.items?.properties?.storageType.default).to.equal(\"azure\");\n });\n\n it(\"getResolvedSettingDef throws on circular typedef references\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-cycle\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test circular typedef resolution\",\n typeDefs: {\n a: {\n type: \"object\",\n extends: `${prefix}/b`,\n properties: {\n aOnly: { type: \"string\" },\n },\n },\n b: {\n type: \"object\",\n extends: `${prefix}/a`,\n properties: {\n bOnly: { type: \"string\" },\n },\n },\n },\n settingDefs: {\n thing: {\n type: \"object\",\n extends: `${prefix}/a`,\n },\n },\n });\n\n try {\n expect(() => schemas.getResolvedSettingDef(`${prefix}/thing`)).to.throw(\"circular typeDef reference detected\");\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"getResolvedSettingDef throws on nested recursive typedef references\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-nested-cycle\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test nested recursive typedef resolution\",\n typeDefs: {\n node: {\n type: \"object\",\n properties: {\n child: {\n type: \"object\",\n extends: `${prefix}/node`,\n },\n },\n },\n },\n settingDefs: {\n root: {\n type: \"object\",\n extends: `${prefix}/node`,\n },\n },\n });\n\n try {\n expect(() => schemas.getResolvedSettingDef(`${prefix}/root`)).to.throw(\"circular typeDef reference detected\");\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n it(\"getResolvedSettingDef throws when an extends target cannot be found\", () => {\n const schemas = IModelHost.settingsSchemas;\n const prefix = \"resolve-schema-missing-typedef\";\n schemas.removeGroup(prefix);\n schemas.addGroup({\n schemaPrefix: prefix,\n description: \"schema used to test missing typedef resolution\",\n settingDefs: {\n thing: {\n type: \"object\",\n extends: `${prefix}/missingType`,\n },\n },\n });\n\n try {\n expect(() => schemas.getResolvedSettingDef(`${prefix}/thing`)).to.throw(`typeDef ${prefix}/missingType does not exist`);\n } finally {\n schemas.removeGroup(prefix);\n }\n });\n\n});\n"]}
|
|
@@ -151,6 +151,29 @@ describe("WorkspaceFile", () => {
|
|
|
151
151
|
expect(outFile).eq(outFile2);
|
|
152
152
|
compareFiles(inFile2, outFile);
|
|
153
153
|
});
|
|
154
|
+
it("stamps lastEditedAt and lastEditedBy when closing an editable WorkspaceDb during a write-lock session", async () => {
|
|
155
|
+
const clock = sinon.useFakeTimers(Date.parse("2026-05-12T16:05:00.000Z"));
|
|
156
|
+
const wsFile = await makeEditableDb({ containerId: "last-edited-at-test", dbName: "db1", baseUri: "", storageType: "azure" }, { workspaceName: "last edited at test" });
|
|
157
|
+
try {
|
|
158
|
+
// Local (`baseUri: ""`) workspaces have no real cloud container. Inject a fake carrying the
|
|
159
|
+
// hidden `writeLockHeldBy` that `acquireWriteLock` would normally set on a real container;
|
|
160
|
+
// the close path reads it via `CloudSqlite.getWriteLockHeldBy`.
|
|
161
|
+
const fakeCloudContainer = {};
|
|
162
|
+
CloudSqlite.addHiddenProperty(fakeCloudContainer, "writeLockHeldBy", "Unit Test User");
|
|
163
|
+
Object.defineProperty(wsFile.container, "cloudContainer", { configurable: true, get: () => fakeCloudContainer });
|
|
164
|
+
wsFile.close();
|
|
165
|
+
// Drop the override so the lazy manifest reload below opens the local file normally
|
|
166
|
+
// (with no cloud container) and does not re-stamp on its internal close.
|
|
167
|
+
Reflect.deleteProperty(wsFile.container, "cloudContainer");
|
|
168
|
+
expect(wsFile.manifest.lastEditedBy).equals("Unit Test User");
|
|
169
|
+
expect(wsFile.manifest.lastEditedAt).equals("2026-05-12T16:05:00.000Z");
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
if (wsFile.isOpen)
|
|
173
|
+
wsFile.close();
|
|
174
|
+
clock.restore();
|
|
175
|
+
}
|
|
176
|
+
});
|
|
154
177
|
it("load workspace settings", async () => {
|
|
155
178
|
const settingsFile = IModelTestUtils.resolveAssetFile("test.setting.json5");
|
|
156
179
|
const defaultDb = await makeEditableDb({ containerId: "default", dbName: "db1", baseUri: "", storageType: "azure" }, { workspaceName: "default resources", contactName: "contact 123" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workspace.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/Workspace.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport * as fs from \"fs-extra\";\nimport { extname } from \"path\";\nimport * as sinon from \"sinon\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport { SettingsPriority } from \"../../workspace/Settings\";\nimport { settingsWorkspaceDbName } from \"../../workspace/SettingsDb\";\nimport { Workspace, WorkspaceContainer, WorkspaceContainerProps, WorkspaceDbLoadError, WorkspaceDbManifest, WorkspaceDbProps } from \"../../workspace/Workspace\";\nimport { EditableWorkspaceDb, WorkspaceEditor } from \"../../workspace/WorkspaceEditor\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { validateWorkspaceContainerId } from \"../../internal/workspace/WorkspaceImpl\";\nimport { _nativeDb } from \"../../internal/Symbols\";\nimport { CloudSqlite } from \"../../CloudSqlite\";\nimport { BlobContainer } from \"../../BlobContainerService\";\n\ndescribe(\"WorkspaceFile\", () => {\n\n let editor: WorkspaceEditor;\n let workspace: Workspace;\n\n before(() => {\n editor = WorkspaceEditor.construct();\n workspace = editor.workspace;\n });\n after(() => {\n editor.close();\n });\n\n async function makeEditableDb(props: WorkspaceDbProps & WorkspaceContainerProps, manifest: WorkspaceDbManifest): Promise<EditableWorkspaceDb> {\n const container = editor.getContainer({ ...props, accessToken: \"\" });\n const wsFile = await container.createDb({ ...props, manifest });\n wsFile.open();\n return wsFile;\n }\n\n function compareFiles(file1: string, file2: string) {\n expect(fs.lstatSync(file1).size).equal(fs.lstatSync(file2).size);\n expect(fs.readFileSync(file1)).to.deep.equal(fs.readFileSync(file2));\n }\n\n it(\"WorkspaceContainer names\", () => {\n const expectBadName = (names: string[]) => {\n names.forEach((containerId) => {\n expect(() => validateWorkspaceContainerId(containerId), containerId).to.throw(\"containerId\");\n });\n };\n\n expectBadName([\n \"\",\n \" \",\n \"12\", // too short\n \"a\\\\b\",\n `a\"b`,\n \"a:b\",\n \"a.b\",\n \"a?b\",\n \"a*b\",\n \"a|b\",\n \"123--4\",\n \"Abc\",\n \"return\\r\",\n \"newline\\n\",\n \"a\".repeat(64), // too long\n \"-leading-dash\",\n \"trailing-dash-\"]);\n\n validateWorkspaceContainerId(Guid.createValue()); // guids should be valid\n });\n\n it(\"WorkspaceDbNames\", () => {\n const expectBadName = (names: string[]) => {\n names.forEach((dbName) => {\n expect(() => CloudSqlite.validateDbName(dbName)).to.throw(\"dbName\");\n });\n };\n\n expectBadName([\n \"\",\n \" \",\n \"1/2\",\n \"a\\\\b\",\n `a\"b`,\n \"base:1.2.3\",\n \"a:b\",\n \"a.b\",\n \"a?b\",\n \"a*b\",\n \"a|b\",\n \"con\",\n \"prn\",\n \"return\\r\",\n \"newline\\n\",\n \"a\".repeat(256), // too long\n \" leading space\",\n \"trailing space \",\n \"per.iod\",\n \"hash#tag\",\n \"back`tick\",\n \"single'quote\",\n ]);\n\n CloudSqlite.validateDbName(Guid.createValue()); // guids should be valid\n });\n\n it(\"WorkspaceDb version fallback\", () => {\n expect(CloudSqlite.validateDbVersion(\"\")).equals(\"0.0.0\");\n expect(CloudSqlite.makeSemverName(\"db1\", \"\")).equals(\"db1:0.0.0\");\n expect(() => CloudSqlite.validateDbVersion(\" \")).to.throw(\"invalid version specification\");\n });\n\n it(\"create new WorkspaceDb\", async () => {\n const manifest: WorkspaceDbManifest = { workspaceName: \"resources for acme users\", contactName: \"contact me\" };\n const wsFile = await makeEditableDb({ containerId: \"acme-engineering-inc-2\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, manifest);\n const inFile = IModelTestUtils.resolveAssetFile(\"test.setting.json5\");\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\n let blobVal = new Uint8Array(testRange.toFloat64Array().buffer);\n let strVal = \"this is test1\";\n const strRscName = \"string-resource/1\";\n const blobRscName = \"blob.resource:1\";\n const fileRscName = \"settings files/my settings/a.json5\";\n\n let testManifest = wsFile.manifest;\n expect(testManifest.workspaceName).equals(manifest.workspaceName);\n expect(testManifest.contactName).equals(manifest.contactName);\n\n wsFile.updateManifest({ ...testManifest, contactName: \"new contact\" });\n testManifest = wsFile.manifest;\n expect(testManifest.workspaceName).equals(manifest.workspaceName);\n expect(testManifest.contactName).equals(\"new contact\");\n\n expect(() => wsFile.addFile(fileRscName, \"bad file name\")).to.throw(\"no such file\");\n expect(() => wsFile.updateFile(fileRscName, inFile)).to.throw(\"error replacing\");\n expect(() => wsFile.removeFile(fileRscName)).to.throw(\"does not exist\");\n\n wsFile.addBlob(blobRscName, blobVal);\n wsFile.addString(strRscName, strVal);\n expect(wsFile.getString(strRscName)).equals(strVal);\n expect(wsFile.getBlob(blobRscName)).to.deep.equal(blobVal);\n strVal = \"updated string\";\n blobVal = Uint8Array.from([0, 1, 2, 3]);\n wsFile.updateString(strRscName, strVal);\n wsFile.updateBlob(blobRscName, blobVal);\n expect(wsFile.getString(strRscName)).equals(strVal);\n expect(wsFile.getBlob(blobRscName)).to.deep.equal(blobVal);\n\n wsFile.removeBlob(blobRscName);\n wsFile.removeString(strRscName);\n expect(wsFile.getString(strRscName)).to.be.undefined;\n expect(wsFile.getBlob(blobRscName)).to.be.undefined;\n\n wsFile.addFile(fileRscName, inFile);\n const writeFile = sinon.spy(wsFile.sqliteDb[_nativeDb], \"extractEmbeddedFile\");\n expect(writeFile.callCount).eq(0);\n const outFile = wsFile.getFile(fileRscName)!;\n expect(writeFile.callCount).eq(1);\n expect(extname(outFile)).equals(\".json5\");\n compareFiles(inFile, outFile);\n\n let outFile2 = wsFile.getFile(fileRscName)!;\n expect(writeFile.callCount).eq(1);\n expect(outFile).eq(outFile2);\n\n const inFile2 = IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\");\n wsFile.updateFile(fileRscName, inFile2);\n outFile2 = wsFile.getFile(fileRscName)!;\n expect(writeFile.callCount).eq(2);\n expect(outFile).eq(outFile2);\n compareFiles(inFile2, outFile);\n });\n\n it(\"load workspace settings\", async () => {\n const settingsFile = IModelTestUtils.resolveAssetFile(\"test.setting.json5\");\n const defaultDb = await makeEditableDb({ containerId: \"default\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, { workspaceName: \"default resources\", contactName: \"contact 123\" });\n defaultDb.addString(\"default-settings\", fs.readFileSync(settingsFile, \"utf-8\"));\n defaultDb.close();\n\n const settings = workspace.settings;\n await workspace.loadSettingsDictionary(\n { dbName: \"db1\", containerId: \"default\", baseUri: \"\", storageType: \"azure\", resourceName: \"default-settings\", priority: SettingsPriority.defaults });\n expect(settings.getSetting(\"editor/renderWhitespace\")).equals(\"selection\");\n\n const workspaceName = \"all fonts workspace\";\n const schemaFile = IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\");\n const fontsDb = await makeEditableDb({ containerId: \"fonts\", dbName: \"fonts\", baseUri: \"\", storageType: \"azure\" }, { workspaceName, contactName: \"font guy\" });\n\n fontsDb.addFile(\"Helvetica.ttf\", schemaFile, \"ttf\");\n fontsDb.close();\n });\n\n it(\"settingsWorkspaceDbName discovers all string resources as dictionaries\", async () => {\n const containerProps = { containerId: \"load-all-test\", baseUri: \"\", storageType: \"azure\" as const };\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all workspace\" });\n db.addString(\"dict-a\", JSON.stringify({ \"editor/renderWhitespace\": \"all\" }));\n db.addString(\"dict-b\", JSON.stringify({ \"editor/fontSize\": 14 }));\n db.close();\n\n\n const settings = workspace.settings;\n await workspace.loadSettingsDictionary({\n ...containerProps,\n priority: SettingsPriority.iTwin,\n dbName: settingsWorkspaceDbName,\n });\n expect(settings.getSetting(\"editor/renderWhitespace\")).equals(\"all\");\n expect(settings.getSetting(\"editor/fontSize\")).equals(14);\n });\n\n it(\"settingsWorkspaceDbName loads resourceName last when set\", async () => {\n const containerProps = { containerId: \"load-all-ignore-rsc\", baseUri: \"\", storageType: \"azure\" as const };\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all-priority\" });\n db.addString(\"first\", JSON.stringify({ \"editor/tabSize\": 2, \"editor/shared\": \"first\" }));\n db.addString(\"second\", JSON.stringify({ \"editor/wordWrap\": \"on\", \"editor/shared\": \"second\" }));\n db.close();\n\n const settings = workspace.settings;\n await workspace.loadSettingsDictionary({\n ...containerProps,\n priority: SettingsPriority.defaults,\n dbName: settingsWorkspaceDbName,\n resourceName: \"second\",\n });\n // All dictionaries are loaded, with resourceName loaded last.\n expect(settings.getSetting(\"editor/tabSize\")).equals(2);\n expect(settings.getSetting(\"editor/wordWrap\")).equals(\"on\");\n expect(settings.getSetting(\"editor/shared\")).equals(\"second\");\n });\n\n it(\"settingsWorkspaceDbName continues loading sibling dictionaries after a resource fails\", async () => {\n const containerProps = { containerId: \"load-all-continue-on-error\", baseUri: \"\", storageType: \"azure\" as const };\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all-continue-on-error\" });\n db.addString(\"dict-valid\", JSON.stringify({ \"editor/continueAfterError\": true }));\n db.addString(\"dict-invalid\", \"not valid json\");\n db.close();\n\n const problems: WorkspaceDbLoadError[] = [];\n await workspace.loadSettingsDictionary({\n ...containerProps,\n priority: SettingsPriority.defaults,\n dbName: settingsWorkspaceDbName,\n // Force this valid resource to be evaluated last.\n resourceName: \"dict-valid\",\n }, problems);\n\n expect(workspace.settings.getSetting(\"editor/continueAfterError\")).to.equal(true);\n expect(problems.length).to.equal(1);\n });\n\n\n\n describe(\"workspace db version cache key\", () => {\n afterEach(() => sinon.restore());\n\n function getContainer(containerId: string, props?: Partial<WorkspaceContainerProps>) {\n return editor.getContainer({ containerId, baseUri: \"\", storageType: \"azure\", accessToken: \"\", ...props });\n }\n\n function createFakeCloudContainer(containerId: string): CloudSqlite.CloudContainer {\n return {\n connect: () => { },\n disconnect: () => { },\n checkForChanges: () => { },\n queryDatabase: () => undefined,\n queryDatabases: () => [],\n acquireWriteLock: () => { },\n releaseWriteLock: () => { },\n abandonChanges: () => { },\n containerId,\n baseUri: \"https://example.invalid\",\n storageType: \"azure\",\n isPublic: false,\n } as unknown as CloudSqlite.CloudContainer;\n }\n\n function stubCloudLookup(containerId: string, resolveVersion: (props: WorkspaceDbProps) => string) {\n sinon.stub(CloudSqlite, \"createCloudContainer\").returns(createFakeCloudContainer(containerId));\n sinon.stub(CloudSqlite, \"querySemverMatch\").callsFake((props) => CloudSqlite.makeSemverName(props.dbName, resolveVersion(props)));\n sinon.stub(CloudSqlite, \"isSemverEditable\").returns(true);\n }\n\n it(\"local getWorkspaceDb ignores version selectors for cache identity\", async () => {\n const container = getContainer(\"workspace-cache-local\");\n await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-cache-local\" } });\n\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\" });\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\", includePrerelease: true });\n expect(db1).to.equal(db2);\n });\n\n it(\"local createDb with omitted dbName matches an explicit default-name lookup\", async () => {\n const container = getContainer(\"workspace-cache-local-default-name\");\n const db1 = await container.createDb({ manifest: { workspaceName: \"workspace-cache-local-default-name\" } });\n\n const db2 = container.getEditableDb({ dbName: \"workspace-db\" });\n expect(db1).to.equal(db2);\n });\n\n it(\"cloud getWorkspaceDb reuses the same instance for semver-equivalent selectors\", () => {\n const containerId = \"workspace-cache-cloud-equivalent\";\n stubCloudLookup(containerId, (props) => props.version === \"1\" ? \"1.0.0\" : (props.version ?? \"1.0.0\"));\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1\" });\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\" });\n expect(db1).to.equal(db2);\n });\n\n it(\"cloud getWorkspaceDb returns different instances for different resolved versions\", () => {\n const containerId = \"workspace-cache-cloud-different\";\n stubCloudLookup(containerId, (props) => props.version ?? \"1.0.0\");\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\" });\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"2.0.0\" });\n expect(db1).to.not.equal(db2);\n });\n\n it(\"cloud getWorkspaceDb respects includePrerelease only when it resolves differently\", () => {\n const containerId = \"workspace-cache-cloud-prerelease\";\n stubCloudLookup(containerId, (props) => props.includePrerelease ? \"1.1.0-beta.1\" : \"1.0.0\");\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const stable = container.getWorkspaceDb({ dbName: \"test-db\", version: \"*\" });\n const prerelease = container.getWorkspaceDb({ dbName: \"test-db\", version: \"*\", includePrerelease: true });\n expect(stable).to.not.equal(prerelease);\n });\n\n it(\"createDb with explicit version returns the cached editable db for that resolved version\", async () => {\n const containerId = \"workspace-create-version\";\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\n sinon.stub(CloudSqlite, \"uploadDb\").resolves();\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const db = await container.createDb({ dbName: \"test-db\", version: \"1.0.0\", manifest: { workspaceName: \"workspace-create-version\" } });\n\n const dbAgain = container.getEditableDb({ dbName: \"test-db\", version: \"1.0.0\" });\n expect(db).to.equal(dbAgain);\n });\n\n it(\"createDb without an explicit version returns the cached editable db for version 0.0.0\", async () => {\n const containerId = \"workspace-create-default-version\";\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\n sinon.stub(CloudSqlite, \"uploadDb\").resolves();\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const db = await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-create-default-version\" } });\n\n const dbAgain = container.getEditableDb({ dbName: \"test-db\", version: \"0.0.0\" });\n expect(db).to.equal(dbAgain);\n });\n\n it(\"cloud createDb uploads using the requested version\", async () => {\n const containerId = \"workspace-cloud-explicit-version\";\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\n const uploadDb = sinon.stub(CloudSqlite, \"uploadDb\").resolves();\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n await container.createDb({ dbName: \"test-db\", version: \"1.2.3\", manifest: { workspaceName: \"workspace-cloud-explicit-version\" } });\n\n expect(uploadDb.calledOnce).to.be.true;\n expect(uploadDb.firstCall.args[1].dbName).to.equal(\"test-db:1.2.3\");\n });\n\n it(\"cloud createDb defaults omitted version to 0.0.0\", async () => {\n const containerId = \"workspace-cloud-default-version\";\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\n const uploadDb = sinon.stub(CloudSqlite, \"uploadDb\").resolves();\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-cloud-default-version\" } });\n\n expect(uploadDb.calledOnce).to.be.true;\n expect(uploadDb.firstCall.args[1].dbName).to.equal(\"test-db:0.0.0\");\n });\n });\n\n\n describe(\"getContainerAsync token resolution\", () => {\n afterEach(() => sinon.restore());\n\n it(\"preserves an explicitly-provided accessToken\", async () => {\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").rejects(new Error(\"should not be called\"));\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\n return { fromProps: args } as WorkspaceContainer;\n });\n const props: WorkspaceContainerProps = {\n containerId: \"explicit-token-test\",\n baseUri: \"https://some-cloud-uri\",\n storageType: \"azure\",\n accessToken: \"my-explicit-token\",\n };\n\n const container = await workspace.getContainerAsync(props);\n\n expect(requestTokenStub.called).to.be.false;\n expect(getContainerStub.calledOnce).to.be.true;\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"my-explicit-token\");\n expect(container.fromProps.accessToken).to.equal(\"my-explicit-token\");\n });\n\n it(\"uses empty token for local containers with empty baseUri\", async () => {\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").rejects(new Error(\"should not be called\"));\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\n return { fromProps: args } as WorkspaceContainer;\n });\n const props: WorkspaceContainerProps = {\n containerId: \"local-token-test\",\n baseUri: \"\",\n storageType: \"azure\",\n };\n\n const container = await workspace.getContainerAsync(props);\n expect(requestTokenStub.called).to.be.false;\n expect(getContainerStub.calledOnce).to.be.true;\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"\");\n expect(container.fromProps.accessToken).to.equal(\"\");\n });\n\n it(\"calls requestToken when no accessToken is provided for a cloud container\", async () => {\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").resolves(\"resolved-token\");\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\n return { fromProps: args } as WorkspaceContainer;\n });\n const props: WorkspaceContainerProps = {\n containerId: \"cloud-no-token-test\",\n baseUri: \"https://some-cloud-uri\",\n storageType: \"azure\",\n };\n\n const container = await workspace.getContainerAsync(props);\n expect(requestTokenStub.calledOnce).to.be.true;\n expect(getContainerStub.calledOnce).to.be.true;\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"resolved-token\");\n expect(container.fromProps.accessToken).to.equal(\"resolved-token\");\n });\n });\n\n describe(\"findContainers\", () => {\n const testContainerId = \"mock-workspace-container-id\";\n const testITwinId = \"mock-itwin-id\";\n const testIModelId = \"mock-imodel-id\";\n let savedService: BlobContainer.ContainerService | undefined;\n\n function createMockService(containers: BlobContainer.MetadataResponse[]): BlobContainer.ContainerService {\n return {\n create: async () => ({ containerId: testContainerId, baseUri: \"https://mock.blob.core/\", provider: \"azure\" as const }),\n delete: async () => { },\n queryScope: async () => ({ iTwinId: testITwinId }),\n queryMetadata: async () => ({ containerType: \"workspace\", label: \"mock\" }),\n queryContainersMetadata: async (_userToken, args) => {\n return containers.filter((c) =>\n (args.containerType === undefined || c.containerType === args.containerType) &&\n (args.iTwinId === testITwinId || args.iTwinId === undefined),\n );\n },\n updateJson: async () => { },\n requestToken: async (_props) => ({\n token: \"\",\n scope: { iTwinId: testITwinId },\n provider: \"azure\" as const,\n expiration: new Date(Date.now() + 3600000),\n metadata: { containerType: \"workspace\", label: \"mock\" },\n baseUri: \"\",\n }),\n };\n }\n\n before(() => {\n savedService = BlobContainer.service;\n });\n\n afterEach(() => {\n BlobContainer.service = savedService;\n });\n\n it(\"finds containers by iTwinId\", async () => {\n BlobContainer.service = createMockService([\n { containerId: testContainerId, containerType: \"workspace\", label: \"Test Workspace\" },\n ]);\n\n const containers = await editor.findContainers({ iTwinId: testITwinId });\n expect(containers).to.have.length(1);\n expect(containers[0].fromProps.containerId).to.equal(testContainerId);\n });\n\n it(\"finds a container by iTwinId and iModelId\", async () => {\n BlobContainer.service = createMockService([\n { containerId: \"imodel-scoped-container\", containerType: \"workspace\", label: \"iModel Workspace\" },\n ]);\n\n const containers = await editor.findContainers({ iTwinId: testITwinId, iModelId: testIModelId });\n expect(containers).to.have.length(1);\n expect(containers[0].fromProps.containerId).to.equal(\"imodel-scoped-container\");\n });\n\n it(\"returns empty array when no workspace containers are found\", async () => {\n BlobContainer.service = createMockService([]);\n\n const containers = await editor.findContainers({ iTwinId: \"nonexistent-itwin\" });\n expect(containers).to.have.length(0);\n });\n\n it(\"throws when BlobContainer.service is not available\", async () => {\n BlobContainer.service = undefined;\n\n await expect(editor.findContainers({ iTwinId: testITwinId }))\n .to.be.rejectedWith(/BlobContainer.service is not available/);\n });\n });\n\n});\n"]}
|
|
1
|
+
{"version":3,"file":"Workspace.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/Workspace.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport * as fs from \"fs-extra\";\nimport { extname } from \"path\";\nimport * as sinon from \"sinon\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport { SettingsPriority } from \"../../workspace/Settings\";\nimport { settingsWorkspaceDbName } from \"../../workspace/SettingsDb\";\nimport { Workspace, WorkspaceContainer, WorkspaceContainerProps, WorkspaceDbLoadError, WorkspaceDbManifest, WorkspaceDbProps } from \"../../workspace/Workspace\";\nimport { EditableWorkspaceDb, WorkspaceEditor } from \"../../workspace/WorkspaceEditor\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { validateWorkspaceContainerId } from \"../../internal/workspace/WorkspaceImpl\";\nimport { _nativeDb } from \"../../internal/Symbols\";\nimport { CloudSqlite } from \"../../CloudSqlite\";\nimport { BlobContainer } from \"../../BlobContainerService\";\n\ndescribe(\"WorkspaceFile\", () => {\n\n let editor: WorkspaceEditor;\n let workspace: Workspace;\n\n before(() => {\n editor = WorkspaceEditor.construct();\n workspace = editor.workspace;\n });\n after(() => {\n editor.close();\n });\n\n async function makeEditableDb(props: WorkspaceDbProps & WorkspaceContainerProps, manifest: WorkspaceDbManifest): Promise<EditableWorkspaceDb> {\n const container = editor.getContainer({ ...props, accessToken: \"\" });\n const wsFile = await container.createDb({ ...props, manifest });\n wsFile.open();\n return wsFile;\n }\n\n function compareFiles(file1: string, file2: string) {\n expect(fs.lstatSync(file1).size).equal(fs.lstatSync(file2).size);\n expect(fs.readFileSync(file1)).to.deep.equal(fs.readFileSync(file2));\n }\n\n it(\"WorkspaceContainer names\", () => {\n const expectBadName = (names: string[]) => {\n names.forEach((containerId) => {\n expect(() => validateWorkspaceContainerId(containerId), containerId).to.throw(\"containerId\");\n });\n };\n\n expectBadName([\n \"\",\n \" \",\n \"12\", // too short\n \"a\\\\b\",\n `a\"b`,\n \"a:b\",\n \"a.b\",\n \"a?b\",\n \"a*b\",\n \"a|b\",\n \"123--4\",\n \"Abc\",\n \"return\\r\",\n \"newline\\n\",\n \"a\".repeat(64), // too long\n \"-leading-dash\",\n \"trailing-dash-\"]);\n\n validateWorkspaceContainerId(Guid.createValue()); // guids should be valid\n });\n\n it(\"WorkspaceDbNames\", () => {\n const expectBadName = (names: string[]) => {\n names.forEach((dbName) => {\n expect(() => CloudSqlite.validateDbName(dbName)).to.throw(\"dbName\");\n });\n };\n\n expectBadName([\n \"\",\n \" \",\n \"1/2\",\n \"a\\\\b\",\n `a\"b`,\n \"base:1.2.3\",\n \"a:b\",\n \"a.b\",\n \"a?b\",\n \"a*b\",\n \"a|b\",\n \"con\",\n \"prn\",\n \"return\\r\",\n \"newline\\n\",\n \"a\".repeat(256), // too long\n \" leading space\",\n \"trailing space \",\n \"per.iod\",\n \"hash#tag\",\n \"back`tick\",\n \"single'quote\",\n ]);\n\n CloudSqlite.validateDbName(Guid.createValue()); // guids should be valid\n });\n\n it(\"WorkspaceDb version fallback\", () => {\n expect(CloudSqlite.validateDbVersion(\"\")).equals(\"0.0.0\");\n expect(CloudSqlite.makeSemverName(\"db1\", \"\")).equals(\"db1:0.0.0\");\n expect(() => CloudSqlite.validateDbVersion(\" \")).to.throw(\"invalid version specification\");\n });\n\n it(\"create new WorkspaceDb\", async () => {\n const manifest: WorkspaceDbManifest = { workspaceName: \"resources for acme users\", contactName: \"contact me\" };\n const wsFile = await makeEditableDb({ containerId: \"acme-engineering-inc-2\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, manifest);\n const inFile = IModelTestUtils.resolveAssetFile(\"test.setting.json5\");\n const testRange = new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7);\n let blobVal = new Uint8Array(testRange.toFloat64Array().buffer);\n let strVal = \"this is test1\";\n const strRscName = \"string-resource/1\";\n const blobRscName = \"blob.resource:1\";\n const fileRscName = \"settings files/my settings/a.json5\";\n\n let testManifest = wsFile.manifest;\n expect(testManifest.workspaceName).equals(manifest.workspaceName);\n expect(testManifest.contactName).equals(manifest.contactName);\n\n wsFile.updateManifest({ ...testManifest, contactName: \"new contact\" });\n testManifest = wsFile.manifest;\n expect(testManifest.workspaceName).equals(manifest.workspaceName);\n expect(testManifest.contactName).equals(\"new contact\");\n\n expect(() => wsFile.addFile(fileRscName, \"bad file name\")).to.throw(\"no such file\");\n expect(() => wsFile.updateFile(fileRscName, inFile)).to.throw(\"error replacing\");\n expect(() => wsFile.removeFile(fileRscName)).to.throw(\"does not exist\");\n\n wsFile.addBlob(blobRscName, blobVal);\n wsFile.addString(strRscName, strVal);\n expect(wsFile.getString(strRscName)).equals(strVal);\n expect(wsFile.getBlob(blobRscName)).to.deep.equal(blobVal);\n strVal = \"updated string\";\n blobVal = Uint8Array.from([0, 1, 2, 3]);\n wsFile.updateString(strRscName, strVal);\n wsFile.updateBlob(blobRscName, blobVal);\n expect(wsFile.getString(strRscName)).equals(strVal);\n expect(wsFile.getBlob(blobRscName)).to.deep.equal(blobVal);\n\n wsFile.removeBlob(blobRscName);\n wsFile.removeString(strRscName);\n expect(wsFile.getString(strRscName)).to.be.undefined;\n expect(wsFile.getBlob(blobRscName)).to.be.undefined;\n\n wsFile.addFile(fileRscName, inFile);\n const writeFile = sinon.spy(wsFile.sqliteDb[_nativeDb], \"extractEmbeddedFile\");\n expect(writeFile.callCount).eq(0);\n const outFile = wsFile.getFile(fileRscName)!;\n expect(writeFile.callCount).eq(1);\n expect(extname(outFile)).equals(\".json5\");\n compareFiles(inFile, outFile);\n\n let outFile2 = wsFile.getFile(fileRscName)!;\n expect(writeFile.callCount).eq(1);\n expect(outFile).eq(outFile2);\n\n const inFile2 = IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\");\n wsFile.updateFile(fileRscName, inFile2);\n outFile2 = wsFile.getFile(fileRscName)!;\n expect(writeFile.callCount).eq(2);\n expect(outFile).eq(outFile2);\n compareFiles(inFile2, outFile);\n });\n\n it(\"stamps lastEditedAt and lastEditedBy when closing an editable WorkspaceDb during a write-lock session\", async () => {\n const clock = sinon.useFakeTimers(Date.parse(\"2026-05-12T16:05:00.000Z\"));\n const wsFile = await makeEditableDb({ containerId: \"last-edited-at-test\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, { workspaceName: \"last edited at test\" });\n try {\n // Local (`baseUri: \"\"`) workspaces have no real cloud container. Inject a fake carrying the\n // hidden `writeLockHeldBy` that `acquireWriteLock` would normally set on a real container;\n // the close path reads it via `CloudSqlite.getWriteLockHeldBy`.\n const fakeCloudContainer: { writeLockHeldBy?: string } = {};\n CloudSqlite.addHiddenProperty(fakeCloudContainer, \"writeLockHeldBy\", \"Unit Test User\");\n Object.defineProperty(wsFile.container, \"cloudContainer\", { configurable: true, get: () => fakeCloudContainer });\n\n wsFile.close();\n\n // Drop the override so the lazy manifest reload below opens the local file normally\n // (with no cloud container) and does not re-stamp on its internal close.\n Reflect.deleteProperty(wsFile.container, \"cloudContainer\");\n\n expect(wsFile.manifest.lastEditedBy).equals(\"Unit Test User\");\n expect(wsFile.manifest.lastEditedAt).equals(\"2026-05-12T16:05:00.000Z\");\n } finally {\n if (wsFile.isOpen)\n wsFile.close();\n clock.restore();\n }\n });\n\n it(\"load workspace settings\", async () => {\n const settingsFile = IModelTestUtils.resolveAssetFile(\"test.setting.json5\");\n const defaultDb = await makeEditableDb({ containerId: \"default\", dbName: \"db1\", baseUri: \"\", storageType: \"azure\" }, { workspaceName: \"default resources\", contactName: \"contact 123\" });\n defaultDb.addString(\"default-settings\", fs.readFileSync(settingsFile, \"utf-8\"));\n defaultDb.close();\n\n const settings = workspace.settings;\n await workspace.loadSettingsDictionary(\n { dbName: \"db1\", containerId: \"default\", baseUri: \"\", storageType: \"azure\", resourceName: \"default-settings\", priority: SettingsPriority.defaults });\n expect(settings.getSetting(\"editor/renderWhitespace\")).equals(\"selection\");\n\n const workspaceName = \"all fonts workspace\";\n const schemaFile = IModelTestUtils.resolveAssetFile(\"TestSettings.schema.json\");\n const fontsDb = await makeEditableDb({ containerId: \"fonts\", dbName: \"fonts\", baseUri: \"\", storageType: \"azure\" }, { workspaceName, contactName: \"font guy\" });\n\n fontsDb.addFile(\"Helvetica.ttf\", schemaFile, \"ttf\");\n fontsDb.close();\n });\n\n it(\"settingsWorkspaceDbName discovers all string resources as dictionaries\", async () => {\n const containerProps = { containerId: \"load-all-test\", baseUri: \"\", storageType: \"azure\" as const };\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all workspace\" });\n db.addString(\"dict-a\", JSON.stringify({ \"editor/renderWhitespace\": \"all\" }));\n db.addString(\"dict-b\", JSON.stringify({ \"editor/fontSize\": 14 }));\n db.close();\n\n\n const settings = workspace.settings;\n await workspace.loadSettingsDictionary({\n ...containerProps,\n priority: SettingsPriority.iTwin,\n dbName: settingsWorkspaceDbName,\n });\n expect(settings.getSetting(\"editor/renderWhitespace\")).equals(\"all\");\n expect(settings.getSetting(\"editor/fontSize\")).equals(14);\n });\n\n it(\"settingsWorkspaceDbName loads resourceName last when set\", async () => {\n const containerProps = { containerId: \"load-all-ignore-rsc\", baseUri: \"\", storageType: \"azure\" as const };\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all-priority\" });\n db.addString(\"first\", JSON.stringify({ \"editor/tabSize\": 2, \"editor/shared\": \"first\" }));\n db.addString(\"second\", JSON.stringify({ \"editor/wordWrap\": \"on\", \"editor/shared\": \"second\" }));\n db.close();\n\n const settings = workspace.settings;\n await workspace.loadSettingsDictionary({\n ...containerProps,\n priority: SettingsPriority.defaults,\n dbName: settingsWorkspaceDbName,\n resourceName: \"second\",\n });\n // All dictionaries are loaded, with resourceName loaded last.\n expect(settings.getSetting(\"editor/tabSize\")).equals(2);\n expect(settings.getSetting(\"editor/wordWrap\")).equals(\"on\");\n expect(settings.getSetting(\"editor/shared\")).equals(\"second\");\n });\n\n it(\"settingsWorkspaceDbName continues loading sibling dictionaries after a resource fails\", async () => {\n const containerProps = { containerId: \"load-all-continue-on-error\", baseUri: \"\", storageType: \"azure\" as const };\n const db = await makeEditableDb({ ...containerProps, dbName: settingsWorkspaceDbName }, { workspaceName: \"load-all-continue-on-error\" });\n db.addString(\"dict-valid\", JSON.stringify({ \"editor/continueAfterError\": true }));\n db.addString(\"dict-invalid\", \"not valid json\");\n db.close();\n\n const problems: WorkspaceDbLoadError[] = [];\n await workspace.loadSettingsDictionary({\n ...containerProps,\n priority: SettingsPriority.defaults,\n dbName: settingsWorkspaceDbName,\n // Force this valid resource to be evaluated last.\n resourceName: \"dict-valid\",\n }, problems);\n\n expect(workspace.settings.getSetting(\"editor/continueAfterError\")).to.equal(true);\n expect(problems.length).to.equal(1);\n });\n\n\n\n describe(\"workspace db version cache key\", () => {\n afterEach(() => sinon.restore());\n\n function getContainer(containerId: string, props?: Partial<WorkspaceContainerProps>) {\n return editor.getContainer({ containerId, baseUri: \"\", storageType: \"azure\", accessToken: \"\", ...props });\n }\n\n function createFakeCloudContainer(containerId: string): CloudSqlite.CloudContainer {\n return {\n connect: () => { },\n disconnect: () => { },\n checkForChanges: () => { },\n queryDatabase: () => undefined,\n queryDatabases: () => [],\n acquireWriteLock: () => { },\n releaseWriteLock: () => { },\n abandonChanges: () => { },\n containerId,\n baseUri: \"https://example.invalid\",\n storageType: \"azure\",\n isPublic: false,\n } as unknown as CloudSqlite.CloudContainer;\n }\n\n function stubCloudLookup(containerId: string, resolveVersion: (props: WorkspaceDbProps) => string) {\n sinon.stub(CloudSqlite, \"createCloudContainer\").returns(createFakeCloudContainer(containerId));\n sinon.stub(CloudSqlite, \"querySemverMatch\").callsFake((props) => CloudSqlite.makeSemverName(props.dbName, resolveVersion(props)));\n sinon.stub(CloudSqlite, \"isSemverEditable\").returns(true);\n }\n\n it(\"local getWorkspaceDb ignores version selectors for cache identity\", async () => {\n const container = getContainer(\"workspace-cache-local\");\n await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-cache-local\" } });\n\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\" });\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\", includePrerelease: true });\n expect(db1).to.equal(db2);\n });\n\n it(\"local createDb with omitted dbName matches an explicit default-name lookup\", async () => {\n const container = getContainer(\"workspace-cache-local-default-name\");\n const db1 = await container.createDb({ manifest: { workspaceName: \"workspace-cache-local-default-name\" } });\n\n const db2 = container.getEditableDb({ dbName: \"workspace-db\" });\n expect(db1).to.equal(db2);\n });\n\n it(\"cloud getWorkspaceDb reuses the same instance for semver-equivalent selectors\", () => {\n const containerId = \"workspace-cache-cloud-equivalent\";\n stubCloudLookup(containerId, (props) => props.version === \"1\" ? \"1.0.0\" : (props.version ?? \"1.0.0\"));\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1\" });\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\" });\n expect(db1).to.equal(db2);\n });\n\n it(\"cloud getWorkspaceDb returns different instances for different resolved versions\", () => {\n const containerId = \"workspace-cache-cloud-different\";\n stubCloudLookup(containerId, (props) => props.version ?? \"1.0.0\");\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const db1 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"1.0.0\" });\n const db2 = container.getWorkspaceDb({ dbName: \"test-db\", version: \"2.0.0\" });\n expect(db1).to.not.equal(db2);\n });\n\n it(\"cloud getWorkspaceDb respects includePrerelease only when it resolves differently\", () => {\n const containerId = \"workspace-cache-cloud-prerelease\";\n stubCloudLookup(containerId, (props) => props.includePrerelease ? \"1.1.0-beta.1\" : \"1.0.0\");\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const stable = container.getWorkspaceDb({ dbName: \"test-db\", version: \"*\" });\n const prerelease = container.getWorkspaceDb({ dbName: \"test-db\", version: \"*\", includePrerelease: true });\n expect(stable).to.not.equal(prerelease);\n });\n\n it(\"createDb with explicit version returns the cached editable db for that resolved version\", async () => {\n const containerId = \"workspace-create-version\";\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\n sinon.stub(CloudSqlite, \"uploadDb\").resolves();\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const db = await container.createDb({ dbName: \"test-db\", version: \"1.0.0\", manifest: { workspaceName: \"workspace-create-version\" } });\n\n const dbAgain = container.getEditableDb({ dbName: \"test-db\", version: \"1.0.0\" });\n expect(db).to.equal(dbAgain);\n });\n\n it(\"createDb without an explicit version returns the cached editable db for version 0.0.0\", async () => {\n const containerId = \"workspace-create-default-version\";\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\n sinon.stub(CloudSqlite, \"uploadDb\").resolves();\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n const db = await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-create-default-version\" } });\n\n const dbAgain = container.getEditableDb({ dbName: \"test-db\", version: \"0.0.0\" });\n expect(db).to.equal(dbAgain);\n });\n\n it(\"cloud createDb uploads using the requested version\", async () => {\n const containerId = \"workspace-cloud-explicit-version\";\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\n const uploadDb = sinon.stub(CloudSqlite, \"uploadDb\").resolves();\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n await container.createDb({ dbName: \"test-db\", version: \"1.2.3\", manifest: { workspaceName: \"workspace-cloud-explicit-version\" } });\n\n expect(uploadDb.calledOnce).to.be.true;\n expect(uploadDb.firstCall.args[1].dbName).to.equal(\"test-db:1.2.3\");\n });\n\n it(\"cloud createDb defaults omitted version to 0.0.0\", async () => {\n const containerId = \"workspace-cloud-default-version\";\n stubCloudLookup(containerId, (props) => props.version ?? \"0.0.0\");\n const uploadDb = sinon.stub(CloudSqlite, \"uploadDb\").resolves();\n\n const container = getContainer(containerId, { baseUri: \"https://example.invalid\" });\n await container.createDb({ dbName: \"test-db\", manifest: { workspaceName: \"workspace-cloud-default-version\" } });\n\n expect(uploadDb.calledOnce).to.be.true;\n expect(uploadDb.firstCall.args[1].dbName).to.equal(\"test-db:0.0.0\");\n });\n });\n\n\n describe(\"getContainerAsync token resolution\", () => {\n afterEach(() => sinon.restore());\n\n it(\"preserves an explicitly-provided accessToken\", async () => {\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").rejects(new Error(\"should not be called\"));\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\n return { fromProps: args } as WorkspaceContainer;\n });\n const props: WorkspaceContainerProps = {\n containerId: \"explicit-token-test\",\n baseUri: \"https://some-cloud-uri\",\n storageType: \"azure\",\n accessToken: \"my-explicit-token\",\n };\n\n const container = await workspace.getContainerAsync(props);\n\n expect(requestTokenStub.called).to.be.false;\n expect(getContainerStub.calledOnce).to.be.true;\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"my-explicit-token\");\n expect(container.fromProps.accessToken).to.equal(\"my-explicit-token\");\n });\n\n it(\"uses empty token for local containers with empty baseUri\", async () => {\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").rejects(new Error(\"should not be called\"));\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\n return { fromProps: args } as WorkspaceContainer;\n });\n const props: WorkspaceContainerProps = {\n containerId: \"local-token-test\",\n baseUri: \"\",\n storageType: \"azure\",\n };\n\n const container = await workspace.getContainerAsync(props);\n expect(requestTokenStub.called).to.be.false;\n expect(getContainerStub.calledOnce).to.be.true;\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"\");\n expect(container.fromProps.accessToken).to.equal(\"\");\n });\n\n it(\"calls requestToken when no accessToken is provided for a cloud container\", async () => {\n const requestTokenStub = sinon.stub(CloudSqlite, \"requestToken\").resolves(\"resolved-token\");\n const getContainerStub = sinon.stub(workspace, \"getContainer\").callsFake((args) => {\n return { fromProps: args } as WorkspaceContainer;\n });\n const props: WorkspaceContainerProps = {\n containerId: \"cloud-no-token-test\",\n baseUri: \"https://some-cloud-uri\",\n storageType: \"azure\",\n };\n\n const container = await workspace.getContainerAsync(props);\n expect(requestTokenStub.calledOnce).to.be.true;\n expect(getContainerStub.calledOnce).to.be.true;\n expect(getContainerStub.firstCall.args[0].accessToken).to.equal(\"resolved-token\");\n expect(container.fromProps.accessToken).to.equal(\"resolved-token\");\n });\n });\n\n describe(\"findContainers\", () => {\n const testContainerId = \"mock-workspace-container-id\";\n const testITwinId = \"mock-itwin-id\";\n const testIModelId = \"mock-imodel-id\";\n let savedService: BlobContainer.ContainerService | undefined;\n\n function createMockService(containers: BlobContainer.MetadataResponse[]): BlobContainer.ContainerService {\n return {\n create: async () => ({ containerId: testContainerId, baseUri: \"https://mock.blob.core/\", provider: \"azure\" as const }),\n delete: async () => { },\n queryScope: async () => ({ iTwinId: testITwinId }),\n queryMetadata: async () => ({ containerType: \"workspace\", label: \"mock\" }),\n queryContainersMetadata: async (_userToken, args) => {\n return containers.filter((c) =>\n (args.containerType === undefined || c.containerType === args.containerType) &&\n (args.iTwinId === testITwinId || args.iTwinId === undefined),\n );\n },\n updateJson: async () => { },\n requestToken: async (_props) => ({\n token: \"\",\n scope: { iTwinId: testITwinId },\n provider: \"azure\" as const,\n expiration: new Date(Date.now() + 3600000),\n metadata: { containerType: \"workspace\", label: \"mock\" },\n baseUri: \"\",\n }),\n };\n }\n\n before(() => {\n savedService = BlobContainer.service;\n });\n\n afterEach(() => {\n BlobContainer.service = savedService;\n });\n\n it(\"finds containers by iTwinId\", async () => {\n BlobContainer.service = createMockService([\n { containerId: testContainerId, containerType: \"workspace\", label: \"Test Workspace\" },\n ]);\n\n const containers = await editor.findContainers({ iTwinId: testITwinId });\n expect(containers).to.have.length(1);\n expect(containers[0].fromProps.containerId).to.equal(testContainerId);\n });\n\n it(\"finds a container by iTwinId and iModelId\", async () => {\n BlobContainer.service = createMockService([\n { containerId: \"imodel-scoped-container\", containerType: \"workspace\", label: \"iModel Workspace\" },\n ]);\n\n const containers = await editor.findContainers({ iTwinId: testITwinId, iModelId: testIModelId });\n expect(containers).to.have.length(1);\n expect(containers[0].fromProps.containerId).to.equal(\"imodel-scoped-container\");\n });\n\n it(\"returns empty array when no workspace containers are found\", async () => {\n BlobContainer.service = createMockService([]);\n\n const containers = await editor.findContainers({ iTwinId: \"nonexistent-itwin\" });\n expect(containers).to.have.length(0);\n });\n\n it(\"throws when BlobContainer.service is not available\", async () => {\n BlobContainer.service = undefined;\n\n await expect(editor.findContainers({ iTwinId: testITwinId }))\n .to.be.rejectedWith(/BlobContainer.service is not available/);\n });\n });\n\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
|
|
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
|
|
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,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,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 { 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
|
|
1
|
+
{"version":3,"file":"SettingsSchemas.js","sourceRoot":"","sources":["../../../src/workspace/SettingsSchemas.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,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 { 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
|
|
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":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAU,QAAQ,EAAoB,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,QAAQ,CAAC,WAAW,CAAC,oBAAoB,EAAE,aAAa,CAAC;IACxG;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,SAAS,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,cAAc,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,yBAAyB;IACjE;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,sJAAsJ;IACtJ,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB,EAAE,uBAAuB,EAAE,oBAAoB;CAAI;AAElH;;GAEG;AACH,MAAM,MAAM,iCAAiC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,qCAAqC;IACrC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1E,kFAAkF;IAClF,QAAQ,EAAE,iCAAiC,CAAC;CAC7C;AAED;;;;;IAKI;AACJ,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wHAAwH;IACxH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,
|
|
1
|
+
{"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/workspace/Workspace.ts"],"names":[],"mappings":"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"}
|