@itwin/core-backend 5.9.0-dev.4 → 5.9.0-dev.5
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/lib/cjs/BriefcaseManager.js +3 -3
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/Category.d.ts +37 -7
- package/lib/cjs/Category.d.ts.map +1 -1
- package/lib/cjs/Category.js +33 -42
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +5 -2
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.d.ts +29 -0
- package/lib/cjs/ChannelControl.d.ts.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +32 -3
- package/lib/cjs/CodeSpecs.d.ts.map +1 -1
- package/lib/cjs/CodeSpecs.js +48 -20
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +18 -3
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +10 -21
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/EditTxn.d.ts +262 -0
- package/lib/cjs/EditTxn.d.ts.map +1 -0
- package/lib/cjs/EditTxn.js +548 -0
- package/lib/cjs/EditTxn.js.map +1 -0
- package/lib/cjs/Element.d.ts +74 -5
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +63 -75
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +10 -0
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +21 -12
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +56 -3
- package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
- package/lib/cjs/ElementTreeWalker.js +53 -40
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/ExternalSource.d.ts +11 -2
- package/lib/cjs/ExternalSource.d.ts.map +1 -1
- package/lib/cjs/ExternalSource.js +10 -8
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +66 -22
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +174 -288
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +22 -0
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +9 -0
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IpcHost.js +2 -2
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +47 -7
- package/lib/cjs/LineStyle.d.ts.map +1 -1
- package/lib/cjs/LineStyle.js +38 -33
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/Material.d.ts +8 -1
- package/lib/cjs/Material.d.ts.map +1 -1
- package/lib/cjs/Material.js +6 -12
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +59 -20
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +38 -80
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +72 -7
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +39 -21
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/SchemaSync.js +4 -4
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SheetIndex.d.ts +9 -0
- package/lib/cjs/SheetIndex.d.ts.map +1 -1
- package/lib/cjs/SheetIndex.js +38 -35
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/StashManager.js +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.d.ts +6 -0
- package/lib/cjs/Texture.d.ts.map +1 -1
- package/lib/cjs/Texture.js +6 -14
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +5 -5
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +23 -7
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +21 -1
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +27 -66
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +33 -27
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +6 -5
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +1 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +1 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.d.ts +6 -2
- package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js +8 -13
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/GenericElements.d.ts +11 -4
- package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
- package/lib/cjs/domains/GenericElements.js +13 -24
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.d.ts +15 -0
- package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js +5 -3
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/Symbols.d.ts +4 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +5 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.d.ts +3 -2
- package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
- package/lib/cjs/internal/annotations/fields.js +7 -6
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/BriefcaseManager.js +3 -3
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/Category.d.ts +37 -7
- package/lib/esm/Category.d.ts.map +1 -1
- package/lib/esm/Category.js +33 -42
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +5 -2
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.d.ts +29 -0
- package/lib/esm/ChannelControl.d.ts.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +32 -3
- package/lib/esm/CodeSpecs.d.ts.map +1 -1
- package/lib/esm/CodeSpecs.js +49 -21
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +18 -3
- package/lib/esm/DisplayStyle.d.ts.map +1 -1
- package/lib/esm/DisplayStyle.js +10 -21
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/EditTxn.d.ts +262 -0
- package/lib/esm/EditTxn.d.ts.map +1 -0
- package/lib/esm/EditTxn.js +543 -0
- package/lib/esm/EditTxn.js.map +1 -0
- package/lib/esm/Element.d.ts +74 -5
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +64 -76
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +10 -0
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +22 -13
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementTreeWalker.d.ts +56 -3
- package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
- package/lib/esm/ElementTreeWalker.js +53 -40
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/ExternalSource.d.ts +11 -2
- package/lib/esm/ExternalSource.d.ts.map +1 -1
- package/lib/esm/ExternalSource.js +10 -8
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +66 -22
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +176 -290
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +22 -0
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +9 -0
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IpcHost.js +3 -3
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.d.ts +47 -7
- package/lib/esm/LineStyle.d.ts.map +1 -1
- package/lib/esm/LineStyle.js +38 -33
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/Material.d.ts +8 -1
- package/lib/esm/Material.d.ts.map +1 -1
- package/lib/esm/Material.js +6 -12
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +59 -20
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js +39 -81
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/Relationship.d.ts +72 -7
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +40 -22
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/SchemaSync.js +5 -5
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SheetIndex.d.ts +9 -0
- package/lib/esm/SheetIndex.d.ts.map +1 -1
- package/lib/esm/SheetIndex.js +38 -35
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/StashManager.js +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.d.ts +6 -0
- package/lib/esm/Texture.d.ts.map +1 -1
- package/lib/esm/Texture.js +6 -14
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +5 -5
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +23 -7
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +21 -1
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +27 -66
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +33 -27
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +6 -5
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/core-backend.d.ts +1 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +1 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.d.ts +6 -2
- package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
- package/lib/esm/domains/FunctionalElements.js +8 -13
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/GenericElements.d.ts +11 -4
- package/lib/esm/domains/GenericElements.d.ts.map +1 -1
- package/lib/esm/domains/GenericElements.js +13 -24
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.d.ts +15 -0
- package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js +6 -4
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/Symbols.d.ts +4 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +4 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.d.ts +3 -2
- package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
- package/lib/esm/internal/annotations/fields.js +7 -6
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.d.ts +20 -19
- package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +111 -96
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js +56 -2
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts +23 -23
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +466 -449
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js +2 -2
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js +27 -18
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js +11 -7
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestEditTxn.d.ts +8 -0
- package/lib/esm/test/TestEditTxn.d.ts.map +1 -0
- package/lib/esm/test/TestEditTxn.js +34 -0
- package/lib/esm/test/TestEditTxn.js.map +1 -0
- package/lib/esm/test/TestUtils.d.ts +1 -0
- package/lib/esm/test/TestUtils.d.ts.map +1 -1
- package/lib/esm/test/TestUtils.js +8 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +82 -90
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +156 -99
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js +5 -3
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js +63 -3
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js +88 -5
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +3 -2
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +2 -2
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +0 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +17 -14
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -2
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +30 -28
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js +159 -143
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +68 -60
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js +51 -43
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +37 -38
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js +2 -2
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js +40 -38
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +10 -9
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js +5 -2
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js +43 -11
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js +2 -2
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js +87 -73
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +164 -125
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js +2 -4
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +313 -247
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +322 -247
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js +31 -31
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js +57 -48
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +419 -344
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js +2 -2
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js +2 -2
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
- package/lib/esm/test/index.d.ts +1 -0
- package/lib/esm/test/index.d.ts.map +1 -1
- package/lib/esm/test/index.js +1 -0
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +23 -22
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js +36 -34
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js +114 -94
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +2 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +207 -192
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +1 -3
- package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -247
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js +101 -82
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +114 -85
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js +43 -40
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js +4 -3
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/EditTxn.test.d.ts +2 -0
- package/lib/esm/test/standalone/EditTxn.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/EditTxn.test.js +219 -0
- package/lib/esm/test/standalone/EditTxn.test.js.map +1 -0
- package/lib/esm/test/standalone/ElementMesh.test.js +16 -13
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +26 -20
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js +11 -15
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js +212 -165
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js +31 -25
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js +11 -8
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.d.ts +2 -2
- package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +184 -142
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +25 -22
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js +20 -18
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.d.ts +2 -2
- package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js +49 -33
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js +5 -5
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js +3 -2
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js +7 -7
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js +21 -19
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js +7 -4
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js +2 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js +3 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/StandaloneDb.test.js +7 -6
- package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js +5 -4
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js +5 -3
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js +35 -31
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +700 -653
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js +295 -229
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +25 -23
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewDefinition.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ViewDefinition.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 { assert, expect } from \"chai\";\nimport { join } from \"path\";\nimport { CompressedId64Set, Guid, GuidString, Id64, Id64String, OpenMode } from \"@itwin/core-bentley\";\nimport {\n Camera, Code, ColorByName, ColorDef, DisplayStyle3dProps, ElementProps, IModel, IModelError, PlanProjectionSettings, SpatialViewDefinitionProps,\n SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport { Matrix3d, Range2d, Range3d, StandardViewIndex, Transform, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport {\n CategorySelector, DefinitionModel, DictionaryModel, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, IModelDb, ModelSelector, SpatialCategory, SpatialViewDefinition, StandaloneDb, Subject, ViewStore,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\n\nfunction createNewModelAndCategory(rwIModel: IModelDb) {\n const modelId = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"))[1];\n const modelId2 = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, \"PhysicalModel2\"), true)[1];\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"TestSpatialCategory\");\n const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);\n const spatialCategoryId = category.insert();\n category.setDefaultAppearance(new SubCategoryAppearance({ color: 0xff0000 }));\n\n newCategoryCode.value = \"spatial category 2\";\n SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value).insert();\n\n rwIModel.elements.insertElement(IModelTestUtils.createPhysicalObject(rwIModel, modelId2, spatialCategoryId).toJSON());\n\n return { modelId, modelId2, spatialCategoryId };\n}\n\n// cspell:disable\n\nlet vs1: ViewStore.ViewDb;\n\ndescribe(\"ViewDefinition\", () => {\n // to simulate elements with guids without having to add elements to the iModel\n class FakeGuids {\n private _ids = new Map<Id64String, GuidString>();\n private _guids = new Map<GuidString, Id64String>();\n private add(id: Id64String, guid: GuidString) {\n this._ids.set(id, guid);\n this._guids.set(guid, id);\n return guid;\n }\n public getFederationGuidFromId(id: Id64String): GuidString | undefined {\n return this._ids.get(id) ?? this.add(id, Guid.createValue());\n }\n public getIdFromFederationGuid(guid?: GuidString): Id64String | undefined {\n return guid ? this._guids.get(guid) : undefined;\n }\n }\n\n let iModel: StandaloneDb;\n before(() => {\n iModel = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ViewDefinition\", \"ViewDefinition.bim\"), {\n rootSubject: { name: \"ViewDefinition tests\", description: \"ViewDefinition tests\" },\n client: \"ViewDefinition\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n\n const dbName = join(KnownTestLocations.outputDir, \"viewDefTest.db\");\n ViewStore.ViewDb.createNewDb(dbName);\n vs1 = new ViewStore.ViewDb({ iModel, guidMap: new FakeGuids() });\n vs1.openDb(dbName, OpenMode.ReadWrite);\n });\n\n after(() => {\n iModel.abandonChanges();\n iModel.close();\n vs1.closeDb(true);\n });\n\n it(\"SpatialViewDefinition\", async () => {\n const { modelId, modelId2, spatialCategoryId } = createNewModelAndCategory(iModel);\n const displayStyleId = DisplayStyle3d.insert(iModel, IModel.dictionaryId, \"default\", { backgroundColor: ColorDef.fromString(\"rgb(255,0,0)\") });\n const modelSelectorId = ModelSelector.insert(iModel, IModel.dictionaryId, \"default\", [modelId, modelId2]);\n const categorySelectorId = CategorySelector.insert(iModel, IModel.dictionaryId, \"default\", [spatialCategoryId]);\n iModel.saveChanges(\"Basic setup\");\n\n const standardView = StandardViewIndex.Iso;\n const rotation = Matrix3d.createStandardWorldToView(standardView);\n const angles = YawPitchRollAngles.createFromMatrix3d(rotation);\n const rotationTransform = Transform.createOriginAndMatrix(undefined, rotation);\n const range = new Range3d(1, 1, 1, 8, 8, 8);\n const rotatedRange = rotationTransform.multiplyRange(range);\n const basicProps = {\n code: Code.createEmpty(),\n model: IModel.dictionaryId,\n classFullName: \"BisCore:SpatialViewDefinition\",\n cameraOn: false,\n origin: rotation.multiplyTransposeXYZ(rotatedRange.low.x, rotatedRange.low.y, rotatedRange.low.z),\n extents: rotatedRange.diagonal(),\n angles,\n camera: new Camera(),\n };\n\n const ms1 = iModel.elements.getElement<ModelSelector>(modelSelectorId);\n const ms1Row = await vs1.addModelSelector({ name: ms1.code.value, selector: { ids: ms1.models } });\n expect(ms1Row).equal(\"@1\");\n let ms1out = vs1.getModelSelectorSync({ id: ms1Row });\n expect(ms1out.classFullName).equal(\"BisCore:ModelSelector\");\n expect(ms1out.models.length).equal(2);\n expect(ms1out.models[0]).equal(modelId);\n expect(ms1out.models[1]).equal(modelId2);\n ms1out.models.push(\"0x123\");\n await vs1.updateModelSelector({ id: ms1Row, selector: { ids: ms1out.models } });\n ms1out = vs1.getModelSelectorSync({ id: ms1Row });\n expect(ms1out.models.length).equal(3);\n expect(ms1out.models[2]).equal(\"0x123\");\n\n const cs1 = iModel.elements.getElement<CategorySelector>(categorySelectorId);\n const cs1Row = await vs1.addCategorySelector({ selector: { ids: cs1.categories } });\n expect(cs1Row).equal(\"@1\");\n let cs1out = vs1.getCategorySelectorSync({ id: cs1Row });\n expect(cs1out.classFullName).equal(\"BisCore:CategorySelector\");\n expect(cs1out.categories.length).equal(1);\n expect(cs1out.categories[0]).equal(spatialCategoryId);\n cs1out.categories.push(\"0x1234\");\n await vs1.updateCategorySelector({ id: cs1Row, selector: { ids: cs1out.categories } });\n cs1out = vs1.getCategorySelectorSync({ id: cs1Row });\n expect(cs1out.categories.length).equal(2);\n expect(cs1out.categories[1]).equal(\"0x1234\");\n\n const longElementList = CompressedId64Set.sortAndCompress([\"0x2a\", \"0x2b\", \"0x2d\", \"0x2e\", \"0x43\", \"0x1a\", \"0x1d\", \"0x12\", \"0x22\",\n \"0x8\", \"0x21\", \"0x1b\", \"0x1c\", \"0x1e\", \"0x1f\", \"0x2c\", \"0x2f\", \"0x3a\", \"0x3b\", \"0x3d\", \"0x3e\", \"0x43\",\n \"0x4a\", \"0x4b\", \"0x4d\", \"0x4e\", \"0x5a\", \"0x5b\", \"0x5d\", \"0x5e\", \"0x6a\", \"0x6b\", \"0x6d\", \"0x6e\", \"0x7a\",\n \"0x7b\", \"0x7d\", \"0x7e\", \"0x8a\", \"0x8b\", \"0x8d\", \"0x8e\", \"0x9a\", \"0x9b\", \"0x9d\", \"0x9e\", \"0xaa\", \"0xab\", \"0xad\",\n \"0xae\", \"0xba\", \"0xbb\", \"0xbd\", \"0xbe\", \"0xf5ca\", \"0xcb\", \"0xcd\", \"0xce\", \"0xda\", \"0xdb\", \"0xdd\", \"0xde\", \"0xea\",\n \"0xeb\", \"0xed\", \"0xee\", \"0xfa\", \"0xfb\", \"0xfd\", \"0xfe\", \"0x10a\", \"0x10b\", \"0x10d\", \"0x10e\", \"0x11a\", \"0x11b\", \"0x11d\",\n \"0x11e\", \"0x12a\", \"0x12b\", \"0x12d\", \"0x12e\", \"0x13a\", \"0x13b\", \"0x13d\", \"0x13e\", \"0x14a\", \"0x14b\", \"0x14d\", \"0x14e\",\n \"0x15a\", \"0x15b\", \"0x15d\", \"0x15e\", \"0x16a\", \"0x16b\", \"0x16d\"]);\n\n await expect(vs1.addCategorySelector({ selector: { query: { from: \"BisCore:SubCategory\" } } })).to.be.rejectedWith(\"must select from BisCore:Category\");\n const cs2 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\" } } }));\n expect(cs2).equal(\"@2\");\n const cs3 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\", adds: longElementList } } }));\n const cs4 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\", removes: [\"0x233\", \"0x21\"], adds: longElementList } } }));\n const onlyUsedProps = {\n name: \"only used spatial categories\",\n selector: {\n query: {\n from: \"BisCore.Category\",\n where: \"ECInstanceId IN (SELECT DISTINCT Category.Id FROM BisCore.GeometricElement3d)\",\n },\n },\n };\n await vs1.addCategorySelector(onlyUsedProps);\n let selected = vs1.getCategorySelectorSync({ id: cs2 });\n expect(selected.categories.length).equal(2);\n selected = vs1.getCategorySelectorSync({ id: cs3 });\n expect(selected.categories.length).equal(98);\n selected = vs1.getCategorySelectorSync({ id: cs4 });\n expect(selected.categories.length).equal(97);\n selected = vs1.getCategorySelectorSync({ name: onlyUsedProps.name });\n expect(selected.categories.length).equal(1);\n expect(selected.categories[0]).equal(spatialCategoryId);\n\n const ms3 = (await vs1.addModelSelector({ name: \"model selector 2\", selector: { query: { from: \"Bis.GeometricModel3d\" } } }));\n let selectedModels = vs1.getModelSelectorSync({ id: ms3 });\n expect(selectedModels.models.length).equal(2);\n const ms4Props = {\n name: \"spatial, non-private models\",\n selector: {\n query: {\n from: \"BisCore.GeometricModel3d\",\n where: \"IsPrivate=false AND IsTemplate=false AND (IsNotSpatiallyLocated IS NULL OR IsNotSpatiallyLocated=false)\",\n },\n },\n };\n\n await vs1.addModelSelector(ms4Props);\n selectedModels = vs1.getModelSelectorSync({ name: ms4Props.name });\n expect(selectedModels.models.length).equal(1);\n expect(selectedModels.models[0]).equal(modelId);\n\n const ds1 = iModel.elements.getElement<DisplayStyle3d>(displayStyleId);\n ds1.settings.setPlanProjectionSettings(\"0x1\", PlanProjectionSettings.fromJSON({ elevation: 1 }));\n ds1.settings.setPlanProjectionSettings(\"0x2\", PlanProjectionSettings.fromJSON({ elevation: 2 }));\n\n const styles = (ds1.toJSON() as DisplayStyle3dProps).jsonProperties!.styles!;\n styles.subCategoryOvr =\n [{\n subCategory: spatialCategoryId,\n color: ColorByName.fuchsia,\n invisible: true,\n style: \"0xaaa\",\n weight: 10,\n transp: 0.5,\n },\n ];\n\n styles.excludedElements = CompressedId64Set.sortAndCompress([\"0x8\", \"0x12\", \"0x22\"]);\n styles.scheduleScript = [{\n modelId: \"0x21\",\n realityModelUrl: \"altavista.com\",\n elementTimelines: [{\n batchId: 64,\n elementIds: CompressedId64Set.sortAndCompress([\"0x1a\", \"0x1d\"]),\n }, {\n batchId: 65,\n elementIds: longElementList,\n }],\n }];\n\n const ds1Row = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });\n expect(ds1Row).equal(\"@1\");\n const ds1out = vs1.getDisplayStyleSync({ id: ds1Row });\n expect(ds1out.classFullName).equal(\"BisCore:DisplayStyle3d\");\n expect(ds1out.jsonProperties?.styles).deep.equal(JSON.parse(JSON.stringify(styles)));\n ds1out.jsonProperties!.styles!.scheduleScript![0].elementTimelines[0].elementIds = CompressedId64Set.sortAndCompress([\"0x11a\", \"0x11d\", \"0x11e\", \"0x12a\"]);\n await vs1.updateDisplayStyle({ id: ds1Row, className: ds1.classFullName, settings: ds1out.jsonProperties!.styles! });\n const ds1out2 = vs1.getDisplayStyleSync({ id: ds1Row });\n expect(ds1out2.jsonProperties?.styles).deep.equal(ds1out.jsonProperties!.styles!);\n\n const tl1Row = await vs1.addTimeline({ name: \"TestRenderTimeline\", timeline: styles.scheduleScript, owner: \"owner2\" });\n expect(tl1Row).equal(\"@1\");\n const tl1out = vs1.getTimelineSync({ id: tl1Row });\n expect(tl1out.classFullName).equal(\"BisCore:RenderTimeline\");\n expect(tl1out.id).equal(tl1Row);\n expect(tl1out.code.value).equal(\"TestRenderTimeline\");\n expect(tl1out.script).equal(JSON.stringify(styles.scheduleScript));\n\n const viewDefProps: SpatialViewDefinitionProps = {\n ...basicProps,\n modelSelectorId: ms1Row,\n categorySelectorId: cs1Row,\n displayStyleId: ds1Row,\n };\n\n viewDefProps.code = { value: \"TestViewDefinition\", spec: \"0x1\", scope: \"0x1\" };\n const v1 = await vs1.addView({ viewDefinition: viewDefProps, tags: [\"big\", \"in progress\", \"done\"] });\n expect(v1).equal(\"@1\");\n let viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\n expect(viewDefOut.code.value).equal(\"TestViewDefinition\");\n expect(viewDefOut.classFullName).equal(\"BisCore:SpatialViewDefinition\");\n expect(viewDefOut.modelSelectorId).equal(ms1Row);\n expect(viewDefOut.categorySelectorId).equal(cs1Row);\n expect(viewDefOut.displayStyleId).equal(ds1Row);\n expect(viewDefOut.cameraOn).equal(false);\n expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify(basicProps.origin));\n expect(JSON.stringify(viewDefOut.extents)).equal(JSON.stringify(basicProps.extents));\n expect(JSON.stringify(viewDefOut.angles)).equal(JSON.stringify(basicProps.angles));\n expect(JSON.stringify(viewDefOut.camera)).equal(JSON.stringify(basicProps.camera));\n viewDefOut.cameraOn = true;\n viewDefOut.origin = [1, 2, 3];\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });\n viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\n expect(viewDefOut.cameraOn).equal(true);\n expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify([1, 2, 3]));\n viewDefOut.displayStyleId = \"@2\";\n await expect(vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut })).to.be.rejectedWith(\"invalid Id for displayStyles\");\n // add a new display style and uodate the view to use it\n viewDefOut.displayStyleId = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });\n viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\n expect(viewDefOut.displayStyleId).equal(\"@2\");\n const vinfo = await vs1.getViewInfo({ viewId: v1 });\n expect(vinfo?.displayStyleId).equal(viewDefOut.displayStyleId);\n viewDefOut.displayStyleId = \"@1\";\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut }); // change it back for sharing test below\n\n viewDefProps.code.value = \"TestViewDefinition2\";\n const v2 = await vs1.addView({ viewDefinition: viewDefProps, tags: [\"big\", \"done\"] });\n await vs1.addTagsToView({ viewId: v2, tags: [\"problems\", \"finished\", \"big\"] });\n\n let tags = vs1.getTagsForView(v2);\n expect(tags?.length).equal(4);\n expect(tags).includes(\"big\");\n expect(tags).includes(\"done\");\n await vs1.removeTagFromView({ viewId: v2, tag: \"done\" });\n tags = vs1.getTagsForView(v2);\n expect(tags).not.includes(\"done\");\n expect(tags?.length).equal(3);\n\n // v1 and v2 share modelselector, categoryselector, and displaystyle so when v2 is deleted they should not be deleted\n await vs1.deleteView({ viewId: v2 });\n expect(() => vs1.getViewDefinitionSync({ viewId: v2 })).throws(\"View not found\");\n expect(vs1.getDisplayStyleRow(1)).not.undefined;\n expect(vs1.getModelSelectorRow(1)).not.undefined;\n expect(vs1.getCategorySelectorRow(1)).not.undefined;\n\n // the categoryselector, and displaystyle are no longer shared, so they should be deleted when v1 is deleted\n await vs1.deleteView({ viewId: v1 });\n expect(() => vs1.getViewDefinitionSync({ viewId: v1 })).throws(\"View not found\");\n expect(vs1.getDisplayStyleRow(1)).undefined;\n expect(vs1.getCategorySelectorRow(1)).undefined;\n expect(vs1.getModelSelectorRow(1)).not.undefined; // modelselector has a name so it should not be deleted\n\n // attempt to create a ViewDefinition element with invalid properties\n assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, categorySelectorId } as ElementProps), IModelError, \"displayStyleId is invalid\");\n assert.throws(() => iModel.elements.createElement({ ...basicProps, categorySelectorId, displayStyleId } as ElementProps), IModelError, \"modelSelectorId is invalid\");\n assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, displayStyleId } as ElementProps), IModelError, \"categorySelectorId is invalid\");\n\n // attempt to insert a ViewDefinition with invalid properties\n assert.throws(() => iModel.elements.insertElement({ ...basicProps, modelSelectorId, categorySelectorId, displayStyleId: modelId } as ElementProps), \"invalid displayStyle\");\n assert.throws(() => iModel.elements.insertElement({ ...basicProps, modelSelectorId: modelId, displayStyleId, categorySelectorId } as ElementProps), \"invalid modelSelector\");\n assert.throws(() => iModel.elements.insertElement({ ...basicProps, modelSelectorId, categorySelectorId: modelId, displayStyleId } as ElementProps), \"invalid categorySelector\");\n\n // Better way to create and insert\n const props: SpatialViewDefinitionProps = { ...basicProps, modelSelectorId, categorySelectorId, displayStyleId };\n const viewDefinition = iModel.elements.createElement<SpatialViewDefinition>(props);\n const viewDefinitionId = iModel.elements.insertElement(viewDefinition.toJSON());\n assert.isNotEmpty(viewDefinitionId);\n assert.isTrue(Id64.isValid(viewDefinitionId));\n\n // Best way to create and insert\n SpatialViewDefinition.insertWithCamera(iModel, IModel.dictionaryId, \"default\", modelSelectorId, categorySelectorId, displayStyleId, iModel.projectExtents);\n });\n\n describe(\"DrawingViewDefinition\", () => {\n it(\"fails on insert without a valid baseModelId\", () => {\n const subjectId = Subject.insert(\n iModel,\n IModel.rootSubjectId,\n \"Subject\",\n \"Subject Description\"\n );\n const definitionModelId = DefinitionModel.insert(\n iModel,\n subjectId,\n \"Definition\"\n );\n const drawingCategoryId = DrawingCategory.insert(\n iModel,\n definitionModelId,\n \"DrawingCategory\",\n new SubCategoryAppearance()\n );\n const drawingCategorySelectorId = CategorySelector.insert(\n iModel,\n definitionModelId,\n \"DrawingCategories\",\n [drawingCategoryId]\n );\n const displayStyle2dId = DisplayStyle2d.insert(\n iModel,\n definitionModelId,\n \"DisplayStyle2d\"\n );\n\n assert.throws(() => {\n DrawingViewDefinition.insert(\n iModel,\n definitionModelId,\n \"Drawing View\",\n \"0\",\n drawingCategorySelectorId,\n displayStyle2dId,\n new Range2d(0, 0, 100, 100)\n );\n }, IModelError, \"baseModelId is invalid\");\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ViewDefinition.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ViewDefinition.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 { assert, expect } from \"chai\";\nimport { join } from \"path\";\nimport { CompressedId64Set, Guid, GuidString, Id64, Id64String, OpenMode } from \"@itwin/core-bentley\";\nimport {\n Camera, Code, CodeProps, ColorByName, ColorDef, DisplayStyle3dProps, ElementProps, IModel, IModelError, PlanProjectionSettings, RelatedElement, SpatialViewDefinitionProps,\n SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport { Matrix3d, Range2d, Range3d, StandardViewIndex, Transform, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport {\n CategorySelector, DefinitionModel, DictionaryModel, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, EditTxn, IModelDb, ModelSelector, PhysicalModel, PhysicalPartition, SpatialCategory, SpatialViewDefinition, StandaloneDb, SubCategory, Subject, SubjectOwnsPartitionElements, ViewStore,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\n\nclass ViewDefinitionEditTxn extends EditTxn {\n public constructor(iModel: IModelDb) {\n super(iModel, \"view-definition\");\n }\n\n public override start(): void {\n super.start();\n }\n\n public override end(mode: \"save\" | \"abandon\" = \"save\", args?: string): void {\n super.end(mode, args);\n }\n\n public override saveChanges(args?: string): void {\n super.saveChanges(args);\n }\n\n public override insertElement(elProps: ElementProps): Id64String {\n return super.insertElement(elProps);\n }\n\n public override updateElement(elProps: Partial<ElementProps>): void {\n super.updateElement(elProps);\n }\n\n public insertPhysicalModel(_code: CodeProps, modeledElementId: Id64String, privateModel = false): Id64String {\n const model = this.iModel.models.createModel({\n modeledElement: new RelatedElement({ id: modeledElementId }),\n classFullName: PhysicalModel.classFullName,\n isPrivate: privateModel,\n });\n\n return super.insertModel(model.toJSON());\n }\n\n public insertPhysicalPartitionAndModel(newModelCode: CodeProps, privateModel = false, parentId?: Id64String): Id64String[] {\n const model = parentId ? this.iModel.elements.getElement(parentId).model : IModel.repositoryModelId;\n const parent = new SubjectOwnsPartitionElements(parentId ?? IModel.rootSubjectId);\n const partition = this.iModel.elements.createElement({\n classFullName: PhysicalPartition.classFullName,\n parent,\n model,\n code: newModelCode,\n });\n const partitionId = this.insertElement(partition.toJSON());\n const modelId = this.insertPhysicalModel(newModelCode, partitionId, privateModel);\n return [partitionId, modelId];\n }\n\n public insertSpatialCategory(definitionModelId: Id64String, name: string, appearance?: SubCategoryAppearance): Id64String {\n const category = SpatialCategory.create(this.iModel, definitionModelId, name);\n category.id = this.insertElement(category.toJSON());\n if (appearance) {\n const subCategory = this.iModel.elements.getElement<SubCategory>(IModelDb.getDefaultSubCategoryId(category.id));\n subCategory.appearance = appearance;\n this.updateElement(subCategory.toJSON());\n }\n\n return category.id;\n }\n}\n\nfunction createNewModelAndCategory(rwIModel: IModelDb, editTxn: ViewDefinitionEditTxn) {\n const modelId = editTxn.insertPhysicalPartitionAndModel(IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"))[1];\n const modelId2 = editTxn.insertPhysicalPartitionAndModel(IModelTestUtils.getUniqueModelCode(rwIModel, \"PhysicalModel2\"), true)[1];\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"TestSpatialCategory\");\n const spatialCategoryId = editTxn.insertSpatialCategory(IModel.dictionaryId, newCategoryCode.value, new SubCategoryAppearance({ color: 0xff0000 }));\n\n newCategoryCode.value = \"spatial category 2\";\n editTxn.insertSpatialCategory(IModel.dictionaryId, newCategoryCode.value);\n\n editTxn.insertElement(IModelTestUtils.createPhysicalObject(rwIModel, modelId2, spatialCategoryId).toJSON());\n\n return { modelId, modelId2, spatialCategoryId };\n}\n\n// cspell:disable\n\nlet vs1: ViewStore.ViewDb;\n\ndescribe(\"ViewDefinition\", () => {\n // to simulate elements with guids without having to add elements to the iModel\n class FakeGuids {\n private _ids = new Map<Id64String, GuidString>();\n private _guids = new Map<GuidString, Id64String>();\n private add(id: Id64String, guid: GuidString) {\n this._ids.set(id, guid);\n this._guids.set(guid, id);\n return guid;\n }\n public getFederationGuidFromId(id: Id64String): GuidString | undefined {\n return this._ids.get(id) ?? this.add(id, Guid.createValue());\n }\n public getIdFromFederationGuid(guid?: GuidString): Id64String | undefined {\n return guid ? this._guids.get(guid) : undefined;\n }\n }\n\n let iModel: StandaloneDb;\n before(() => {\n iModel = StandaloneDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ViewDefinition\", \"ViewDefinition.bim\"), {\n rootSubject: { name: \"ViewDefinition tests\", description: \"ViewDefinition tests\" },\n client: \"ViewDefinition\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n\n const dbName = join(KnownTestLocations.outputDir, \"viewDefTest.db\");\n ViewStore.ViewDb.createNewDb(dbName);\n vs1 = new ViewStore.ViewDb({ iModel, guidMap: new FakeGuids() });\n vs1.openDb(dbName, OpenMode.ReadWrite);\n });\n\n after(() => {\n iModel.close();\n vs1.closeDb(true);\n });\n\n it(\"SpatialViewDefinition\", async () => {\n const editTxn = new ViewDefinitionEditTxn(iModel);\n editTxn.start();\n try {\n const { modelId, modelId2, spatialCategoryId } = createNewModelAndCategory(iModel, editTxn);\n const displayStyleId = editTxn.insertElement(DisplayStyle3d.create(iModel, IModel.dictionaryId, \"default\", { backgroundColor: ColorDef.fromString(\"rgb(255,0,0)\") }).toJSON());\n const modelSelectorId = editTxn.insertElement(ModelSelector.create(iModel, IModel.dictionaryId, \"default\", [modelId, modelId2]).toJSON());\n const categorySelectorId = editTxn.insertElement(CategorySelector.create(iModel, IModel.dictionaryId, \"default\", [spatialCategoryId]).toJSON());\n editTxn.saveChanges(\"Basic setup\");\n\n const standardView = StandardViewIndex.Iso;\n const rotation = Matrix3d.createStandardWorldToView(standardView);\n const angles = YawPitchRollAngles.createFromMatrix3d(rotation);\n const rotationTransform = Transform.createOriginAndMatrix(undefined, rotation);\n const range = new Range3d(1, 1, 1, 8, 8, 8);\n const rotatedRange = rotationTransform.multiplyRange(range);\n const basicProps = {\n code: Code.createEmpty(),\n model: IModel.dictionaryId,\n classFullName: \"BisCore:SpatialViewDefinition\",\n cameraOn: false,\n origin: rotation.multiplyTransposeXYZ(rotatedRange.low.x, rotatedRange.low.y, rotatedRange.low.z),\n extents: rotatedRange.diagonal(),\n angles,\n camera: new Camera(),\n };\n\n const ms1 = iModel.elements.getElement<ModelSelector>(modelSelectorId);\n const ms1Row = await vs1.addModelSelector({ name: ms1.code.value, selector: { ids: ms1.models } });\n expect(ms1Row).equal(\"@1\");\n let ms1out = vs1.getModelSelectorSync({ id: ms1Row });\n expect(ms1out.classFullName).equal(\"BisCore:ModelSelector\");\n expect(ms1out.models.length).equal(2);\n expect(ms1out.models[0]).equal(modelId);\n expect(ms1out.models[1]).equal(modelId2);\n ms1out.models.push(\"0x123\");\n await vs1.updateModelSelector({ id: ms1Row, selector: { ids: ms1out.models } });\n ms1out = vs1.getModelSelectorSync({ id: ms1Row });\n expect(ms1out.models.length).equal(3);\n expect(ms1out.models[2]).equal(\"0x123\");\n\n const cs1 = iModel.elements.getElement<CategorySelector>(categorySelectorId);\n const cs1Row = await vs1.addCategorySelector({ selector: { ids: cs1.categories } });\n expect(cs1Row).equal(\"@1\");\n let cs1out = vs1.getCategorySelectorSync({ id: cs1Row });\n expect(cs1out.classFullName).equal(\"BisCore:CategorySelector\");\n expect(cs1out.categories.length).equal(1);\n expect(cs1out.categories[0]).equal(spatialCategoryId);\n cs1out.categories.push(\"0x1234\");\n await vs1.updateCategorySelector({ id: cs1Row, selector: { ids: cs1out.categories } });\n cs1out = vs1.getCategorySelectorSync({ id: cs1Row });\n expect(cs1out.categories.length).equal(2);\n expect(cs1out.categories[1]).equal(\"0x1234\");\n\n const longElementList = CompressedId64Set.sortAndCompress([\"0x2a\", \"0x2b\", \"0x2d\", \"0x2e\", \"0x43\", \"0x1a\", \"0x1d\", \"0x12\", \"0x22\",\n \"0x8\", \"0x21\", \"0x1b\", \"0x1c\", \"0x1e\", \"0x1f\", \"0x2c\", \"0x2f\", \"0x3a\", \"0x3b\", \"0x3d\", \"0x3e\", \"0x43\",\n \"0x4a\", \"0x4b\", \"0x4d\", \"0x4e\", \"0x5a\", \"0x5b\", \"0x5d\", \"0x5e\", \"0x6a\", \"0x6b\", \"0x6d\", \"0x6e\", \"0x7a\",\n \"0x7b\", \"0x7d\", \"0x7e\", \"0x8a\", \"0x8b\", \"0x8d\", \"0x8e\", \"0x9a\", \"0x9b\", \"0x9d\", \"0x9e\", \"0xaa\", \"0xab\", \"0xad\",\n \"0xae\", \"0xba\", \"0xbb\", \"0xbd\", \"0xbe\", \"0xf5ca\", \"0xcb\", \"0xcd\", \"0xce\", \"0xda\", \"0xdb\", \"0xdd\", \"0xde\", \"0xea\",\n \"0xeb\", \"0xed\", \"0xee\", \"0xfa\", \"0xfb\", \"0xfd\", \"0xfe\", \"0x10a\", \"0x10b\", \"0x10d\", \"0x10e\", \"0x11a\", \"0x11b\", \"0x11d\",\n \"0x11e\", \"0x12a\", \"0x12b\", \"0x12d\", \"0x12e\", \"0x13a\", \"0x13b\", \"0x13d\", \"0x13e\", \"0x14a\", \"0x14b\", \"0x14d\", \"0x14e\",\n \"0x15a\", \"0x15b\", \"0x15d\", \"0x15e\", \"0x16a\", \"0x16b\", \"0x16d\"]);\n\n await expect(vs1.addCategorySelector({ selector: { query: { from: \"BisCore:SubCategory\" } } })).to.be.rejectedWith(\"must select from BisCore:Category\");\n const cs2 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\" } } }));\n expect(cs2).equal(\"@2\");\n const cs3 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\", adds: longElementList } } }));\n const cs4 = (await vs1.addCategorySelector({ selector: { query: { from: \"BisCore:Category\", removes: [\"0x233\", \"0x21\"], adds: longElementList } } }));\n const onlyUsedProps = {\n name: \"only used spatial categories\",\n selector: {\n query: {\n from: \"BisCore.Category\",\n where: \"ECInstanceId IN (SELECT DISTINCT Category.Id FROM BisCore.GeometricElement3d)\",\n },\n },\n };\n await vs1.addCategorySelector(onlyUsedProps);\n let selected = vs1.getCategorySelectorSync({ id: cs2 });\n expect(selected.categories.length).equal(2);\n selected = vs1.getCategorySelectorSync({ id: cs3 });\n expect(selected.categories.length).equal(98);\n selected = vs1.getCategorySelectorSync({ id: cs4 });\n expect(selected.categories.length).equal(97);\n selected = vs1.getCategorySelectorSync({ name: onlyUsedProps.name });\n expect(selected.categories.length).equal(1);\n expect(selected.categories[0]).equal(spatialCategoryId);\n\n const ms3 = (await vs1.addModelSelector({ name: \"model selector 2\", selector: { query: { from: \"Bis.GeometricModel3d\" } } }));\n let selectedModels = vs1.getModelSelectorSync({ id: ms3 });\n expect(selectedModels.models.length).equal(2);\n const ms4Props = {\n name: \"spatial, non-private models\",\n selector: {\n query: {\n from: \"BisCore.GeometricModel3d\",\n where: \"IsPrivate=false AND IsTemplate=false AND (IsNotSpatiallyLocated IS NULL OR IsNotSpatiallyLocated=false)\",\n },\n },\n };\n\n await vs1.addModelSelector(ms4Props);\n selectedModels = vs1.getModelSelectorSync({ name: ms4Props.name });\n expect(selectedModels.models.length).equal(1);\n expect(selectedModels.models[0]).equal(modelId);\n\n const ds1 = iModel.elements.getElement<DisplayStyle3d>(displayStyleId);\n ds1.settings.setPlanProjectionSettings(\"0x1\", PlanProjectionSettings.fromJSON({ elevation: 1 }));\n ds1.settings.setPlanProjectionSettings(\"0x2\", PlanProjectionSettings.fromJSON({ elevation: 2 }));\n\n const styles = (ds1.toJSON() as DisplayStyle3dProps).jsonProperties!.styles!;\n styles.subCategoryOvr =\n [{\n subCategory: spatialCategoryId,\n color: ColorByName.fuchsia,\n invisible: true,\n style: \"0xaaa\",\n weight: 10,\n transp: 0.5,\n },\n ];\n\n styles.excludedElements = CompressedId64Set.sortAndCompress([\"0x8\", \"0x12\", \"0x22\"]);\n styles.scheduleScript = [{\n modelId: \"0x21\",\n realityModelUrl: \"altavista.com\",\n elementTimelines: [{\n batchId: 64,\n elementIds: CompressedId64Set.sortAndCompress([\"0x1a\", \"0x1d\"]),\n }, {\n batchId: 65,\n elementIds: longElementList,\n }],\n }];\n\n const ds1Row = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });\n expect(ds1Row).equal(\"@1\");\n const ds1out = vs1.getDisplayStyleSync({ id: ds1Row });\n expect(ds1out.classFullName).equal(\"BisCore:DisplayStyle3d\");\n expect(ds1out.jsonProperties?.styles).deep.equal(JSON.parse(JSON.stringify(styles)));\n ds1out.jsonProperties!.styles!.scheduleScript![0].elementTimelines[0].elementIds = CompressedId64Set.sortAndCompress([\"0x11a\", \"0x11d\", \"0x11e\", \"0x12a\"]);\n await vs1.updateDisplayStyle({ id: ds1Row, className: ds1.classFullName, settings: ds1out.jsonProperties!.styles! });\n const ds1out2 = vs1.getDisplayStyleSync({ id: ds1Row });\n expect(ds1out2.jsonProperties?.styles).deep.equal(ds1out.jsonProperties!.styles!);\n\n const tl1Row = await vs1.addTimeline({ name: \"TestRenderTimeline\", timeline: styles.scheduleScript, owner: \"owner2\" });\n expect(tl1Row).equal(\"@1\");\n const tl1out = vs1.getTimelineSync({ id: tl1Row });\n expect(tl1out.classFullName).equal(\"BisCore:RenderTimeline\");\n expect(tl1out.id).equal(tl1Row);\n expect(tl1out.code.value).equal(\"TestRenderTimeline\");\n expect(tl1out.script).equal(JSON.stringify(styles.scheduleScript));\n\n const viewDefProps: SpatialViewDefinitionProps = {\n ...basicProps,\n modelSelectorId: ms1Row,\n categorySelectorId: cs1Row,\n displayStyleId: ds1Row,\n };\n\n viewDefProps.code = { value: \"TestViewDefinition\", spec: \"0x1\", scope: \"0x1\" };\n const v1 = await vs1.addView({ viewDefinition: viewDefProps, tags: [\"big\", \"in progress\", \"done\"] });\n expect(v1).equal(\"@1\");\n let viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\n expect(viewDefOut.code.value).equal(\"TestViewDefinition\");\n expect(viewDefOut.classFullName).equal(\"BisCore:SpatialViewDefinition\");\n expect(viewDefOut.modelSelectorId).equal(ms1Row);\n expect(viewDefOut.categorySelectorId).equal(cs1Row);\n expect(viewDefOut.displayStyleId).equal(ds1Row);\n expect(viewDefOut.cameraOn).equal(false);\n expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify(basicProps.origin));\n expect(JSON.stringify(viewDefOut.extents)).equal(JSON.stringify(basicProps.extents));\n expect(JSON.stringify(viewDefOut.angles)).equal(JSON.stringify(basicProps.angles));\n expect(JSON.stringify(viewDefOut.camera)).equal(JSON.stringify(basicProps.camera));\n viewDefOut.cameraOn = true;\n viewDefOut.origin = [1, 2, 3];\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });\n viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\n expect(viewDefOut.cameraOn).equal(true);\n expect(JSON.stringify(viewDefOut.origin)).equal(JSON.stringify([1, 2, 3]));\n viewDefOut.displayStyleId = \"@2\";\n await expect(vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut })).to.be.rejectedWith(\"invalid Id for displayStyles\");\n // add a new display style and uodate the view to use it\n viewDefOut.displayStyleId = await vs1.addDisplayStyle({ className: ds1.classFullName, settings: ds1.toJSON().jsonProperties.styles });\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut });\n viewDefOut = vs1.getViewDefinitionSync({ viewId: v1 }) as SpatialViewDefinitionProps;\n expect(viewDefOut.displayStyleId).equal(\"@2\");\n const vinfo = await vs1.getViewInfo({ viewId: v1 });\n expect(vinfo?.displayStyleId).equal(viewDefOut.displayStyleId);\n viewDefOut.displayStyleId = \"@1\";\n await vs1.updateViewDefinition({ viewId: v1, viewDefinition: viewDefOut }); // change it back for sharing test below\n\n viewDefProps.code.value = \"TestViewDefinition2\";\n const v2 = await vs1.addView({ viewDefinition: viewDefProps, tags: [\"big\", \"done\"] });\n await vs1.addTagsToView({ viewId: v2, tags: [\"problems\", \"finished\", \"big\"] });\n\n let tags = vs1.getTagsForView(v2);\n expect(tags?.length).equal(4);\n expect(tags).includes(\"big\");\n expect(tags).includes(\"done\");\n await vs1.removeTagFromView({ viewId: v2, tag: \"done\" });\n tags = vs1.getTagsForView(v2);\n expect(tags).not.includes(\"done\");\n expect(tags?.length).equal(3);\n\n // v1 and v2 share modelselector, categoryselector, and displaystyle so when v2 is deleted they should not be deleted\n await vs1.deleteView({ viewId: v2 });\n expect(() => vs1.getViewDefinitionSync({ viewId: v2 })).throws(\"View not found\");\n expect(vs1.getDisplayStyleRow(1)).not.undefined;\n expect(vs1.getModelSelectorRow(1)).not.undefined;\n expect(vs1.getCategorySelectorRow(1)).not.undefined;\n\n // the categoryselector, and displaystyle are no longer shared, so they should be deleted when v1 is deleted\n await vs1.deleteView({ viewId: v1 });\n expect(() => vs1.getViewDefinitionSync({ viewId: v1 })).throws(\"View not found\");\n expect(vs1.getDisplayStyleRow(1)).undefined;\n expect(vs1.getCategorySelectorRow(1)).undefined;\n expect(vs1.getModelSelectorRow(1)).not.undefined; // modelselector has a name so it should not be deleted\n\n // attempt to create a ViewDefinition element with invalid properties\n assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, categorySelectorId } as ElementProps), IModelError, \"displayStyleId is invalid\");\n assert.throws(() => iModel.elements.createElement({ ...basicProps, categorySelectorId, displayStyleId } as ElementProps), IModelError, \"modelSelectorId is invalid\");\n assert.throws(() => iModel.elements.createElement({ ...basicProps, modelSelectorId, displayStyleId } as ElementProps), IModelError, \"categorySelectorId is invalid\");\n\n // attempt to insert a ViewDefinition with invalid properties\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId, categorySelectorId, displayStyleId: modelId } as ElementProps), \"invalid displayStyle\");\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId: modelId, displayStyleId, categorySelectorId } as ElementProps), \"invalid modelSelector\");\n assert.throws(() => editTxn.insertElement({ ...basicProps, modelSelectorId, categorySelectorId: modelId, displayStyleId } as ElementProps), \"invalid categorySelector\");\n\n // Better way to create and insert\n const props: SpatialViewDefinitionProps = { ...basicProps, modelSelectorId, categorySelectorId, displayStyleId };\n const viewDefinition = iModel.elements.createElement<SpatialViewDefinition>(props);\n const viewDefinitionId = editTxn.insertElement(viewDefinition.toJSON());\n assert.isNotEmpty(viewDefinitionId);\n assert.isTrue(Id64.isValid(viewDefinitionId));\n\n // Best way to create and insert\n editTxn.insertElement(SpatialViewDefinition.createWithCamera(iModel, IModel.dictionaryId, \"default\", modelSelectorId, categorySelectorId, displayStyleId, iModel.projectExtents).toJSON());\n editTxn.end(\"save\", \"insert view definitions\");\n } finally {\n if (editTxn.isActive)\n editTxn.end(\"abandon\");\n }\n });\n\n describe(\"DrawingViewDefinition\", () => {\n it(\"fails on insert without a valid baseModelId\", () => {\n const editTxn = new ViewDefinitionEditTxn(iModel);\n editTxn.start();\n try {\n const subjectId = Subject.insert(\n editTxn,\n IModel.rootSubjectId,\n \"Subject\",\n \"Subject Description\"\n );\n const definitionModelId = DefinitionModel.insert(\n editTxn,\n subjectId,\n \"Definition\"\n );\n const drawingCategoryId = DrawingCategory.insert(\n editTxn,\n definitionModelId,\n \"DrawingCategory\",\n new SubCategoryAppearance()\n );\n const drawingCategorySelectorId = CategorySelector.insert(\n editTxn,\n definitionModelId,\n \"DrawingCategories\",\n [drawingCategoryId]\n );\n const displayStyle2dId = DisplayStyle2d.insert(\n editTxn,\n definitionModelId,\n \"DisplayStyle2d\"\n );\n\n assert.throws(() => {\n DrawingViewDefinition.insert(\n editTxn,\n definitionModelId,\n \"Drawing View\",\n \"0\",\n drawingCategorySelectorId,\n displayStyle2dId,\n new Range2d(0, 0, 100, 100)\n );\n }, IModelError, \"baseModelId is invalid\");\n editTxn.end();\n } finally {\n if (editTxn.isActive)\n editTxn.end(\"abandon\");\n }\n });\n });\n});\n"]}
|
|
@@ -319,53 +319,52 @@ describe("WorkspaceFile", () => {
|
|
|
319
319
|
afterEach(() => sinon.restore());
|
|
320
320
|
it("preserves an explicitly-provided accessToken", async () => {
|
|
321
321
|
const requestTokenStub = sinon.stub(CloudSqlite, "requestToken").rejects(new Error("should not be called"));
|
|
322
|
-
const
|
|
322
|
+
const getContainerStub = sinon.stub(workspace, "getContainer").callsFake((args) => {
|
|
323
|
+
return { fromProps: args };
|
|
324
|
+
});
|
|
323
325
|
const props = {
|
|
324
326
|
containerId: "explicit-token-test",
|
|
325
327
|
baseUri: "https://some-cloud-uri",
|
|
326
328
|
storageType: "azure",
|
|
327
329
|
accessToken: "my-explicit-token",
|
|
328
330
|
};
|
|
329
|
-
|
|
330
|
-
await workspace.getContainerAsync(props);
|
|
331
|
-
}
|
|
332
|
-
catch {
|
|
333
|
-
// expected — no real cloud endpoint
|
|
334
|
-
}
|
|
331
|
+
const container = await workspace.getContainerAsync(props);
|
|
335
332
|
expect(requestTokenStub.called).to.be.false;
|
|
336
|
-
expect(
|
|
337
|
-
expect(
|
|
333
|
+
expect(getContainerStub.calledOnce).to.be.true;
|
|
334
|
+
expect(getContainerStub.firstCall.args[0].accessToken).to.equal("my-explicit-token");
|
|
335
|
+
expect(container.fromProps.accessToken).to.equal("my-explicit-token");
|
|
338
336
|
});
|
|
339
337
|
it("uses empty token for local containers with empty baseUri", async () => {
|
|
340
338
|
const requestTokenStub = sinon.stub(CloudSqlite, "requestToken").rejects(new Error("should not be called"));
|
|
341
|
-
const
|
|
339
|
+
const getContainerStub = sinon.stub(workspace, "getContainer").callsFake((args) => {
|
|
340
|
+
return { fromProps: args };
|
|
341
|
+
});
|
|
342
342
|
const props = {
|
|
343
343
|
containerId: "local-token-test",
|
|
344
344
|
baseUri: "",
|
|
345
345
|
storageType: "azure",
|
|
346
346
|
};
|
|
347
|
-
await workspace.getContainerAsync(props);
|
|
347
|
+
const container = await workspace.getContainerAsync(props);
|
|
348
348
|
expect(requestTokenStub.called).to.be.false;
|
|
349
|
-
expect(
|
|
350
|
-
expect(
|
|
349
|
+
expect(getContainerStub.calledOnce).to.be.true;
|
|
350
|
+
expect(getContainerStub.firstCall.args[0].accessToken).to.equal("");
|
|
351
|
+
expect(container.fromProps.accessToken).to.equal("");
|
|
351
352
|
});
|
|
352
353
|
it("calls requestToken when no accessToken is provided for a cloud container", async () => {
|
|
353
354
|
const requestTokenStub = sinon.stub(CloudSqlite, "requestToken").resolves("resolved-token");
|
|
354
|
-
const
|
|
355
|
+
const getContainerStub = sinon.stub(workspace, "getContainer").callsFake((args) => {
|
|
356
|
+
return { fromProps: args };
|
|
357
|
+
});
|
|
355
358
|
const props = {
|
|
356
359
|
containerId: "cloud-no-token-test",
|
|
357
360
|
baseUri: "https://some-cloud-uri",
|
|
358
361
|
storageType: "azure",
|
|
359
362
|
};
|
|
360
|
-
|
|
361
|
-
await workspace.getContainerAsync(props);
|
|
362
|
-
}
|
|
363
|
-
catch {
|
|
364
|
-
// expected — no real cloud endpoint
|
|
365
|
-
}
|
|
363
|
+
const container = await workspace.getContainerAsync(props);
|
|
366
364
|
expect(requestTokenStub.calledOnce).to.be.true;
|
|
367
|
-
expect(
|
|
368
|
-
expect(
|
|
365
|
+
expect(getContainerStub.calledOnce).to.be.true;
|
|
366
|
+
expect(getContainerStub.firstCall.args[0].accessToken).to.equal("resolved-token");
|
|
367
|
+
expect(container.fromProps.accessToken).to.equal("resolved-token");
|
|
369
368
|
});
|
|
370
369
|
});
|
|
371
370
|
describe("findContainers", () => {
|
|
@@ -379,7 +378,10 @@ describe("WorkspaceFile", () => {
|
|
|
379
378
|
delete: async () => { },
|
|
380
379
|
queryScope: async () => ({ iTwinId: testITwinId }),
|
|
381
380
|
queryMetadata: async () => ({ containerType: "workspace", label: "mock" }),
|
|
382
|
-
queryContainersMetadata: async () =>
|
|
381
|
+
queryContainersMetadata: async (_userToken, args) => {
|
|
382
|
+
return containers.filter((c) => (args.containerType === undefined || c.containerType === args.containerType) &&
|
|
383
|
+
(args.iTwinId === testITwinId || args.iTwinId === undefined));
|
|
384
|
+
},
|
|
383
385
|
updateJson: async () => { },
|
|
384
386
|
requestToken: async (_props) => ({
|
|
385
387
|
token: "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workspace.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/Workspace.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAuB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAE7B,IAAI,MAAuB,CAAC;IAC5B,IAAI,SAAoB,CAAC;IAEzB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,CAAC;QACrC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,cAAc,CAAC,KAAiD,EAAE,QAA6B;QAC5G,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa;QAChD,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,aAAa,GAAG,CAAC,KAAe,EAAE,EAAE;YACxC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC/F,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,aAAa,CAAC;YACZ,EAAE;YACF,IAAI;YACJ,IAAI,EAAE,YAAY;YAClB,MAAM;YACN,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,QAAQ;YACR,KAAK;YACL,UAAU;YACV,WAAW;YACX,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,WAAW;YAC3B,eAAe;YACf,gBAAgB;SAAC,CAAC,CAAC;QAErB,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,wBAAwB;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,aAAa,GAAG,CAAC,KAAe,EAAE,EAAE;YACxC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvB,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,aAAa,CAAC;YACZ,EAAE;YACF,IAAI;YACJ,KAAK;YACL,MAAM;YACN,KAAK;YACL,YAAY;YACZ,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,UAAU;YACV,WAAW;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW;YAC5B,gBAAgB;YAChB,iBAAiB;YACjB,SAAS;YACT,UAAU;YACV,WAAW;YACX,cAAc;SACf,CAAC,CAAC;QAEH,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,wBAAwB;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAA2B,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnF,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,EAA2B,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3F,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,QAAQ,GAAwB,EAAE,aAAa,EAAE,0BAA0B,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;QAC/G,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3I,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,MAAM,GAAG,eAAe,CAAC;QAC7B,MAAM,UAAU,GAAG,mBAAmB,CAAC;QACvC,MAAM,WAAW,GAAG,iBAAiB,CAAC;QACtC,MAAM,WAAW,GAAG,oCAAoC,CAAC;QAEzD,IAAI,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAClE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE9D,MAAM,CAAC,cAAc,CAAC,EAAE,GAAG,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QACvE,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC/B,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAClE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAEvD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACpF,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjF,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAExE,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,GAAG,gBAAgB,CAAC;QAC1B,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE3D,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC/B,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAEpD,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC/E,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAE,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9B,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAE,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,eAAe,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QAC7E,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACxC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAE,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC7B,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QACzL,SAAS,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAChF,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,MAAM,SAAS,CAAC,sBAAsB,CACpC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvJ,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3E,MAAM,aAAa,GAAG,qBAAqB,CAAC;QAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QAE/J,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAgB,EAAE,CAAC;QACpG,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,EAAE,GAAG,cAAc,EAAE,MAAM,EAAE,uBAAuB,EAAE,EAAE,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACjI,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7E,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAClE,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,MAAM,SAAS,CAAC,sBAAsB,CAAC;YACrC,GAAG,cAAc;YACjB,QAAQ,EAAE,gBAAgB,CAAC,KAAK;YAChC,MAAM,EAAE,uBAAuB;SAChC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAgB,EAAE,CAAC;QAC1G,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,EAAE,GAAG,cAAc,EAAE,MAAM,EAAE,uBAAuB,EAAE,EAAE,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAChI,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACzF,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/F,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,MAAM,SAAS,CAAC,sBAAsB,CAAC;YACrC,GAAG,cAAc;YACjB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;YACnC,MAAM,EAAE,uBAAuB;YAC/B,YAAY,EAAE,QAAQ;SACvB,CAAC,CAAC;QACH,8DAA8D;QAC9D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,4BAA4B,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAgB,EAAE,CAAC;QACjH,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,EAAE,GAAG,cAAc,EAAE,MAAM,EAAE,uBAAuB,EAAE,EAAE,EAAE,aAAa,EAAE,4BAA4B,EAAE,CAAC,CAAC;QACzI,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClF,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAC/C,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,MAAM,SAAS,CAAC,sBAAsB,CAAC;YACrC,GAAG,cAAc;YACjB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;YACnC,MAAM,EAAE,uBAAuB;YAC/B,kDAAkD;YAClD,YAAY,EAAE,YAAY;SAC3B,EAAE,QAAQ,CAAC,CAAC;QAEb,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAIH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAEjC,SAAS,YAAY,CAAC,WAAmB,EAAE,KAAwC;YACjF,OAAO,MAAM,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,SAAS,wBAAwB,CAAC,WAAmB;YACnD,OAAO;gBACL,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;gBAClB,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC;gBACrB,eAAe,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS;gBAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE;gBACxB,gBAAgB,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC3B,gBAAgB,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC3B,cAAc,EAAE,GAAG,EAAE,GAAG,CAAC;gBACzB,WAAW;gBACX,OAAO,EAAE,yBAAyB;gBAClC,WAAW,EAAE,OAAO;gBACpB,QAAQ,EAAE,KAAK;aACyB,CAAC;QAC7C,CAAC;QAED,SAAS,eAAe,CAAC,WAAmB,EAAE,cAAmD;YAC/F,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/F,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,SAAS,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;YACxD,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;YAEtG,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;YACvG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC1F,MAAM,SAAS,GAAG,YAAY,CAAC,oCAAoC,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,oCAAoC,EAAE,EAAE,CAAC,CAAC;YAE5G,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;YACvF,MAAM,WAAW,GAAG,kCAAkC,CAAC;YACvD,eAAe,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;YAEtG,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACpF,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YAC1E,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;YAC1F,MAAM,WAAW,GAAG,iCAAiC,CAAC;YACtD,eAAe,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;YAElE,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACpF,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;YAC3F,MAAM,WAAW,GAAG,kCAAkC,CAAC;YACvD,eAAe,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAE5F,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7E,MAAM,UAAU,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;YACvG,MAAM,WAAW,GAAG,0BAA0B,CAAC;YAC/C,eAAe,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE/C,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACpF,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;YAEtI,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;YACrG,MAAM,WAAW,GAAG,kCAAkC,CAAC;YACvD,eAAe,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE/C,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACpF,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,kCAAkC,EAAE,EAAE,CAAC,CAAC;YAE5H,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,WAAW,GAAG,kCAAkC,CAAC;YACvD,eAAe,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;YAEhE,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACpF,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,kCAAkC,EAAE,EAAE,CAAC,CAAC;YAEnI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACvC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,WAAW,GAAG,iCAAiC,CAAC;YACtD,eAAe,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;YAEhE,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACpF,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,iCAAiC,EAAE,EAAE,CAAC,CAAC;YAEhH,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACvC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAEjC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC5G,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAC7D,MAAM,KAAK,GAA4B;gBACrC,WAAW,EAAE,qBAAqB;gBAClC,OAAO,EAAE,wBAAwB;gBACjC,WAAW,EAAE,OAAO;gBACpB,WAAW,EAAE,mBAAmB;aACjC,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,oCAAoC;YACtC,CAAC;YACD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC5C,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC5G,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAC7D,MAAM,KAAK,GAA4B;gBACrC,WAAW,EAAE,kBAAkB;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,OAAO;aACrB,CAAC;YAEF,MAAM,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC5C,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAC5F,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAC7D,MAAM,KAAK,GAA4B;gBACrC,WAAW,EAAE,qBAAqB;gBAClC,OAAO,EAAE,wBAAwB;gBACjC,WAAW,EAAE,OAAO;aACrB,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,oCAAoC;YACtC,CAAC;YACD,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC/C,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,MAAM,eAAe,GAAG,6BAA6B,CAAC;QACtD,MAAM,WAAW,GAAG,eAAe,CAAC;QACpC,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACtC,IAAI,YAAwD,CAAC;QAE7D,SAAS,iBAAiB,CAAC,UAA4C;YACrE,OAAO;gBACL,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,OAAgB,EAAE,CAAC;gBACtH,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,CAAC;gBACvB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;gBAClD,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBAC1E,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU;gBAC/C,UAAU,EAAE,KAAK,IAAI,EAAE,GAAG,CAAC;gBAC3B,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC/B,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;oBAC/B,QAAQ,EAAE,OAAgB;oBAC1B,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;oBAC1C,QAAQ,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE;oBACvD,OAAO,EAAE,EAAE;iBACZ,CAAC;aACH,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,GAAG,EAAE;YACV,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;YACb,aAAa,CAAC,OAAO,GAAG,YAAY,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,aAAa,CAAC,OAAO,GAAG,iBAAiB,CAAC;gBACxC,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE;aACtF,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,aAAa,CAAC,OAAO,GAAG,iBAAiB,CAAC;gBACxC,EAAE,WAAW,EAAE,yBAAyB,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE;aAClG,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;YACjG,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,aAAa,CAAC,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAE9C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC;YAElC,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;iBAC1D,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,wCAAwC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,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 * 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, 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(\"\" as CloudSqlite.DbVersion)).equals(\"0.0.0\");\n expect(CloudSqlite.makeSemverName(\"db1\", \"\" as CloudSqlite.DbVersion)).equals(\"db1:0.0.0\");\n expect(() => CloudSqlite.validateDbVersion(\" \" as CloudSqlite.DbVersion)).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 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 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 getContainerSpy = sinon.spy(workspace, \"getContainer\");\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 try {\n await workspace.getContainerAsync(props);\n } catch {\n // expected — no real cloud endpoint\n }\n expect(requestTokenStub.called).to.be.false;\n expect(getContainerSpy.calledOnce).to.be.true;\n expect(getContainerSpy.firstCall.args[0].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 getContainerSpy = sinon.spy(workspace, \"getContainer\");\n const props: WorkspaceContainerProps = {\n containerId: \"local-token-test\",\n baseUri: \"\",\n storageType: \"azure\",\n };\n\n await workspace.getContainerAsync(props);\n expect(requestTokenStub.called).to.be.false;\n expect(getContainerSpy.calledOnce).to.be.true;\n expect(getContainerSpy.firstCall.args[0].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 getContainerSpy = sinon.spy(workspace, \"getContainer\");\n const props: WorkspaceContainerProps = {\n containerId: \"cloud-no-token-test\",\n baseUri: \"https://some-cloud-uri\",\n storageType: \"azure\",\n };\n\n try {\n await workspace.getContainerAsync(props);\n } catch {\n // expected — no real cloud endpoint\n }\n expect(requestTokenStub.calledOnce).to.be.true;\n expect(getContainerSpy.calledOnce).to.be.true;\n expect(getContainerSpy.firstCall.args[0].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 () => containers,\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(\"\" as CloudSqlite.DbVersion)).equals(\"0.0.0\");\n expect(CloudSqlite.makeSemverName(\"db1\", \"\" as CloudSqlite.DbVersion)).equals(\"db1:0.0.0\");\n expect(() => CloudSqlite.validateDbVersion(\" \" as CloudSqlite.DbVersion)).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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-backend",
|
|
3
|
-
"version": "5.9.0-dev.
|
|
3
|
+
"version": "5.9.0-dev.5",
|
|
4
4
|
"description": "iTwin.js backend components",
|
|
5
5
|
"main": "lib/cjs/core-backend.js",
|
|
6
6
|
"module": "lib/esm/core-backend.js",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@opentelemetry/api": "^1.0.4",
|
|
30
|
-
"@itwin/core-bentley": "5.9.0-dev.
|
|
31
|
-
"@itwin/core-
|
|
32
|
-
"@itwin/ecschema-metadata": "5.9.0-dev.
|
|
33
|
-
"@itwin/core-
|
|
30
|
+
"@itwin/core-bentley": "5.9.0-dev.5",
|
|
31
|
+
"@itwin/core-common": "5.9.0-dev.5",
|
|
32
|
+
"@itwin/ecschema-metadata": "5.9.0-dev.5",
|
|
33
|
+
"@itwin/core-geometry": "5.9.0-dev.5"
|
|
34
34
|
},
|
|
35
35
|
"peerDependenciesMeta": {
|
|
36
36
|
"@opentelemetry/api": {
|
|
@@ -77,13 +77,13 @@
|
|
|
77
77
|
"marked": "^14.1.3",
|
|
78
78
|
"sql-formatter": "^15.4.6",
|
|
79
79
|
"webpack": "^5.97.1",
|
|
80
|
-
"@itwin/build-tools": "5.9.0-dev.
|
|
81
|
-
"@itwin/core-bentley": "5.9.0-dev.
|
|
82
|
-
"@itwin/
|
|
83
|
-
"@itwin/ecsql-common": "5.9.0-dev.
|
|
84
|
-
"@itwin/
|
|
85
|
-
"@itwin/core-geometry": "5.9.0-dev.
|
|
86
|
-
"@itwin/ecschema-locaters": "5.9.0-dev.
|
|
80
|
+
"@itwin/build-tools": "5.9.0-dev.5",
|
|
81
|
+
"@itwin/core-bentley": "5.9.0-dev.5",
|
|
82
|
+
"@itwin/core-common": "5.9.0-dev.5",
|
|
83
|
+
"@itwin/ecsql-common": "5.9.0-dev.5",
|
|
84
|
+
"@itwin/ecschema-metadata": "5.9.0-dev.5",
|
|
85
|
+
"@itwin/core-geometry": "5.9.0-dev.5",
|
|
86
|
+
"@itwin/ecschema-locaters": "5.9.0-dev.5",
|
|
87
87
|
"internal-tools": "3.0.0-dev.69"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|