@itwin/core-backend 5.5.0-dev.1 → 5.5.0-dev.2
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/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.js +8 -8
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.js +8 -8
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- 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/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- 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.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- 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.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementRoundTrip.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementRoundTrip.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAsB,eAAe,EAA8C,MAAM,EACvG,cAAc,EAAE,qBAAqB,GACxD,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,IAAI,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACnH,OAAO,EAAE,SAAS,EAAkB,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjJ,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA+C1E,SAAS,mBAAmB,CAAC,WAA2B,EAAE,aAA6B;IACrF,IAAI,aAAa,CAAC,CAAC,KAAK,SAAS;QAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,uDAAuD,CAAC,CAAC;IACxG,IAAI,aAAa,CAAC,CAAC,KAAK,SAAS;QAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,oDAAoD,CAAC,CAAC;IACrG,IAAI,aAAa,CAAC,CAAC,KAAK,SAAS;QAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;IACvG,IAAI,aAAa,CAAC,CAAC,KAAK,SAAS;QAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,uDAAuD,CAAC,CAAC;IACxG,IAAI,aAAa,CAAC,EAAE,KAAK,SAAS;QAChC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,wDAAwD,CAAC,CAAC;IAC3G,IAAI,aAAa,CAAC,CAAC,KAAK,SAAS;QAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;IACvG,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,yDAAyD,CAAC,CAAC;QACjH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,yDAAyD,CAAC,CAAC;IACnH,CAAC;SAAM,IAAG,aAAa,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,wDAAwD,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,yDAAyD,CAAC,CAAC;QACjH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,yDAAyD,CAAC,CAAC;QACjH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,yDAAyD,CAAC,CAAC;IACnH,CAAC;SAAM,IAAG,aAAa,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,wDAAwD,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,sDAAsD,CAAC,CAAC;IACvH,CAAC;SAAM,IAAG,aAAa,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,uDAAuD,CAAC,CAAC;IAC5G,CAAC;IACD,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,yDAAyD,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAClH,CAAC;SAAM,IAAG,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,yDAAyD,CAAC,CAAC;IAC1G,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,WAAgC,EAAE,aAAkC;IACpG,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;QACvH,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/C,IAAG,KAAK,EAAE,CAAC;gBACT,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,wDAAwD,CAAC,CAAC;YAC3H,CAAC;iBAAM,IAAG,KAAK,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,wDAAwD,CAAC,CAAC;YAC/G,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,yDAAyD,CAAC,CAAC;IAC1H,CAAC;IAED,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QACpH,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,yDAAyD,CAAC,CAAC;QAC9G,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,0DAA0D,CAAC,CAAC;IACvH,CAAC;IAED,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;QACjH,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,sDAAsD,CAAC,CAAC;QAC3G,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,uDAAuD,CAAC,CAAC;IACpH,CAAC;IAED,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;QACnH,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,wDAAwD,CAAC,CAAC;QAC7G,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,yDAAyD,CAAC,CAAC;IACtH,CAAC;IAED,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QACpH,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,yDAAyD,CAAC,CAAC;QAC9G,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,0DAA0D,CAAC,CAAC;IACvH,CAAC;IAED,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,2CAA2C,CAAC,CAAC;QACvH,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,0DAA0D,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,2DAA2D,CAAC,CAAC;IAC1H,CAAC;IAED,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,2CAA2C,CAAC,CAAC;QACrH,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,IAAG,KAAK,EAAE,CAAC;gBACT,MAAM,CAAC,WAAW,CAAC,OAAQ,CAAC,KAAK,CAAC,EAAE,0DAA0D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvH,CAAC;iBAAM,IAAG,KAAK,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,0DAA0D,CAAC,CAAC;YAC/G,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,2DAA2D,CAAC,CAAC;IACxH,CAAC;IAED,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;QACnH,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,wDAAwD,CAAC,CAAC;QAC7G,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,yDAAyD,CAAC,CAAC;IACtH,CAAC;IAED,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QACxH,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,2DAA2D,CAAC,CAAC;gBACpH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,2DAA2D,CAAC,CAAC;YACtH,CAAC;iBAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,0DAA0D,CAAC,CAAC;YACjH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,0DAA0D,CAAC,CAAC;IAC3H,CAAC;IAED,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QACxH,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/C,IAAG,KAAK,EAAE,CAAC;gBACT,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,2DAA2D,CAAC,CAAC;gBACpH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,2DAA2D,CAAC,CAAC;gBACpH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,2DAA2D,CAAC,CAAC;YACtH,CAAC;iBAAM,IAAG,KAAK,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,0DAA0D,CAAC,CAAC;YACjH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,0DAA0D,CAAC,CAAC;IAC3H,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,WAAuB,EAAE,aAAyB;IACzE,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAChD,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC;QACrB,eAAe,CAAC,WAAW,CAAC,EAAG,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QACnD,oBAAoB,CAAC,WAAW,CAAC,EAAG,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAG,aAAa,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,8DAA8D,CAAC,CAAC;IACjH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,WAA4B,EAAE,aAA8B;IACxF,wBAAwB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAS,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;QACrH,WAAW,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,GAAkB,EAAE,CAAS,EAAE,EAAE;YAC9D,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,wBAAwB,CAAC,GAAG,EAAE,aAAa,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAG,aAAa,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,gEAAgE,CAAC,CAAC;IAC/H,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,WAA0E,EAAE,aAA4E;IACpL,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,EAAE,+CAA+C,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAwB,EAAE,aAA0B;IAC7E,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC5C,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,uBAAuB,CAAC,WAA8B,EAAE,aAAgC;IAC/F,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC5C,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB,EAAE,WAAqB,EAAE,KAAiB,EAAE,KAAiB,EAAE,eAAoB;IACzH,eAAe;IACf,MAAM,SAAS,GAAY;QACzB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KAC3C,CAAC;IACF,MAAM,cAAc,GAAwB,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,eAAe;IACf,MAAM,YAAY,GAA0B;QAC1C,aAAa,EAAE,wBAAwB,SAAS,EAAE;QAClD,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;QACxB,IAAI,EAAE,cAAc;KACrB,CAAC;IAEF,IAAI,eAAe;QACjB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAE/C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAiB,EAAE,WAAqB,EAAE,IAAgB,EAAE,eAAoB;IAC9G,eAAe;IACf,MAAM,YAAY,GAAuB;QACvC,aAAa,EAAE,wBAAwB,SAAS,EAAE;QAClD,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;KACtB,CAAC;IAEF,IAAI,eAAe;QACjB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAE/C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,SAAS,CAAC,GAAQ,EAAE,GAAQ;IACnC,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAE1C,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU;QACnC,OAAO,KAAK,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACnB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gCAAgC,CAAC,SAAiB,EAAE,WAAqB,EAAE,KAAiB,EAAE,KAAiB,EAAE,eAAoB;IAC5I,eAAe;IACf,MAAM,MAAM,GAAgC;QAC1C,aAAa,EAAE,wBAAwB,SAAS,EAAE;QAClD,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;KACe,CAAC;IAEjC,IAAI,eAAe;QACjB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAEzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,QAAQ,CAAC,qEAAqE,EAAE,GAAG,EAAE;IACnF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2IL,CAAC;IAEf,MAAM,cAAc,GAAG,mCAAmC,CAAC;IAC3D,MAAM,cAAc,GAAG,0BAA0B,CAAC;IAClD,MAAM,YAAY,GAAG,mBAAmB,CAAC;IACzC,MAAM,UAAU,GAAG,kBAAkB,CAAC;IACtC,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEjF,MAAM,SAAS,GAAmB;QAChC,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,WAAW;QACd,CAAC,EAAE,OAAO;QACV,CAAC,EAAE,IAAI;QACP,EAAE,EAAE,yBAAyB;QAC7B,CAAC,EAAE,mBAAmB;QACtB,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACzH,GAAG,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;QAC9B,GAAG,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC;KACpC,CAAC;IAEF,MAAM,SAAS,GAAmB;QAChC,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,CAAC,QAAQ;QACZ,CAAC,EAAE,KAAK;QACR,EAAE,EAAE,yBAAyB;QAC7B,CAAC,EAAE,mBAAmB;QACtB,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACzH,GAAG,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;QAClC,GAAG,EAAE,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;KAC5C,CAAC;IAEF,MAAM,YAAY,GAAwB;QACxC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;QACzB,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC;QACtC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;QACnC,QAAQ,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;QAChE,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC;QAC5D,SAAS,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClF,SAAS,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,SAAS,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO,EAAE;YACP,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACtH,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;SACvH;KACF,CAAC;IAEF,MAAM,YAAY,GAAwB;QACxC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;QACjC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAClD,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC;QAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;QACtB,QAAQ,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,CAAC;QAC3F,OAAO,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC;QACpF,SAAS,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxG,SAAS,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACnG,SAAS,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACvE,OAAO,EAAE;YACP,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACtH,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;SACvH;KACF,CAAC;IAEF,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,oEAAoE;QACpE,MAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACrF,UAAU,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAChE,eAAe,CAAC,wCAAwC,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACzG,IAAI,SAAS,KAAK,iBAAiB;YACjC,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,EAClF,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAEpF,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2GAA2G,EAAE,KAAK,IAAI,EAAE;QACzH,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAChF,MAAM,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,CAAE,CAAC;QAC5G,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAElH,8CAA8C;QAC9C,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE;YACxF,GAAG,SAAS;YACZ,GAAG,YAAY;YACf,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS,EAAE;YACrC,QAAQ,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;SACjF,CAAgB,CAAC;QAElB,mBAAmB;QACnB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,MAAM,sBAAsB,GAAG;YAC7B,EAAE;YACF,SAAS,EAAE,kCAAkC;YAC7C,KAAK,EAAE;gBACL,EAAE,EAAE,UAAU;gBACd,YAAY,EAAE,+BAA+B;aAC9C;SACwB,CAAC;QAE5B,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAc,EAAE,CAAC,CAAC;QACrE,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAE9C,8BAA8B;QAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,8BAA8B,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAC9I,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAiB,EAAE,aAAa,CAAC,CAAC;YAC7D,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1B,6BAA6B;QAC7B,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,8BAA8B,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YAChG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAiB,CAAC;YAC7C,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,2DAA2D,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YAC7H,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAiB,EAAE,sBAAsB,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACvH,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACtC,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,SAAS,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,CAAC;QACvH,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAEnC,gDAAgD;QAChD,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,yJAAyJ,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACjQ,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpC,4CAA4C;QAC5C,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;YACzB,GAAG,SAAS;YACZ,GAAG,YAAY;YACf,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS,EAAE;YACrC,QAAQ,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;SACjF,CAAC,CAAC;QAEH,iBAAiB;QACjB,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,wBAAwB;QACxB,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAc,EAAE,CAAC,CAAC;QACtE,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAE7C,8BAA8B;QAC9B,QAAQ,GAAG,CAAC,CAAC;QACb,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,8BAA8B,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAC9I,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAiB,EAAE,WAAW,CAAC,CAAC;YAC3D,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1B,6BAA6B;QAC7B,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,8BAA8B,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YAChG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAiB,CAAC;YAC7C,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,2DAA2D,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YAC7H,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAiB,EAAE,sBAAsB,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAChD,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,yJAAyJ,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC7P,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,mBAAmB,CAAC,eAA2B,EAAE,aAAiC,EAAE,SAAiB,EAAE,sBAA8B,EAAE,MAAkB;QACtK,wBAAwB;QACxB,MAAM,kBAAkB,GAAyB,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACtI,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3C,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAE9D,gCAAgC;QAChC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,oCAAoC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YACpJ,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAuB,EAAE,aAAa,CAAC,CAAC;YACzE,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1B,gCAAgC;QAChC,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,oCAAoC,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YACtG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAuB,CAAC;YACnD,uBAAuB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,MAAM,sBAAsB,GAAG;YAC7B,EAAE,EAAE,eAAe;YACnB,SAAS,EAAE,wCAAwC;YACnD,OAAO,EAAE;gBACP,EAAE,EAAE,SAAS;gBACb,YAAY,EAAE,iCAAiC;aAChD;SAC+B,CAAC;QAEnC,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,wCAAwC,EAAE,WAAW,CAAC,CAAC;QACvH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAEjC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,iCAAiC,EAAE,iBAAiB,CAAC,CAAC;QACnH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAE9B,gCAAgC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,mKAAmK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC7Q,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpC,gCAAgC;QAChC,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,mEAAmE,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YACrI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAuB,EAAE,sBAAsB,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,EAAE,CAAC,iHAAiH,EAAE,KAAK,IAAI,EAAE;QAC/H,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAChF,MAAM,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,CAAE,CAAC;QAC5G,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAElH,mDAAmD;QACnD,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,CAAgB,CAAC;QAE7G,oBAAoB;QACpB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;QAErE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE;YACpF,GAAG,SAAS;YACZ,GAAG,YAAY;YACf,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS,EAAE;YACrC,QAAQ,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;SACjF,CAAsB,CAAC;QAExB,2BAA2B;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAC1E,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,eAAe,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAE3I,8CAA8C;QAC9C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;YAClC,GAAG,SAAS;YACZ,GAAG,YAAY;YACf,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS,EAAE;YACrC,QAAQ,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;SACjF,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,2CAA2C;QAC3C,MAAM,mBAAmB,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAElH,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,SAAS,iCAAiC,CAAC,WAAwC,EAAE,aAA0C;QAC7H,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,wDAAwD,CAAC,CAAC;QACrH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,wDAAwD,CAAC,CAAC;QACrH,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAChD,wBAAwB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACvD,CAAC;IAED,EAAE,CAAC,wHAAwH,EAAE,KAAK,IAAI,EAAE;QACtI,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC;QAC/G,MAAM,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAChF,MAAM,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,CAAE,CAAC;QAC5G,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAElH,yBAAyB;QACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,CAAgB,CAAC;QACxG,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,CAAgB,CAAC;QAExG,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,4BAA4B,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,4BAA4B,CAAC,CAAC;QAErE,iLAAiL;QACjL,MAAM,yBAAyB,GAAG,gCAAgC,CAAC,6BAA6B,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;YACtH,GAAG,SAAS;YACZ,GAAG,YAAY;YACf;gGACoF;SACrF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,yBAAyB,CAAC,CAAC,kEAAkE;QAC9G,MAAM,cAAc,GAAe,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,QAAe,CAAC,CAAC,CAAC,2DAA2D;QACpJ,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,6BAA6B;QAC7B,MAAM,uBAAuB,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,CAA8B,yBAAyB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QACvJ,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAEvC,iCAAiC,CAAC,uBAAuB,EAAE,yBAAyB,CAAC,CAAC;QAEtF,8BAA8B;QAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,8CAA8C,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAC9J,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAiC,CAAC;YACvD,iCAAiC,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YAClE,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1B,6BAA6B;QAC7B,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,8CAA8C,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YAChH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAiC,CAAC;YAC7D,iCAAiC,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,MAAM,wBAAwB,GAAG;YAC/B,EAAE,EAAE,yBAAyB,CAAC,EAAE;YAChC,SAAS,EAAE,kDAAkD;YAC7D,QAAQ,EAAE,KAAK;YACf,eAAe,EAAE,kCAAkC;YACnD,QAAQ,EAAE,KAAK;YACf,eAAe,EAAE,kCAAkC;SACV,CAAC;QAE5C,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,kDAAkD,EAAE,iBAAiB,CAAC,CAAC;QACtI,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAChC,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;QAClH,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAElC,gDAAgD;QAChD,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,2PAA2P,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACnW,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpC,+CAA+C;QAC/C,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,8IAA8I,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YAChN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAiC,EAAE,wBAAwB,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;QACrD,4CAA4C;QAC5C,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE;YAClC,GAAG,SAAS;YACZ,GAAG,YAAY;YACf;qGACyF;SAC1F,CAAC,CAAC;QAEH,SAAS;QACT,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,wBAAwB;QACxB,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,CAA8B,yBAAyB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAC5I,iCAAiC,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;QAEtE,8BAA8B;QAC9B,QAAQ,GAAG,CAAC,CAAC;QACb,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,8CAA8C,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;YAC9J,iCAAiC,CAAC,GAAG,CAAC,KAAK,EAAiC,EAAE,oBAAoB,CAAC,CAAC;YACpG,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1B,6BAA6B;QAC7B,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,8CAA8C,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YAChH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAiC,CAAC;YAC7D,iCAAiC,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAChD,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,2PAA2P,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC/V,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpC,+CAA+C;QAC/C,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,8IAA8I,EAAE,KAAK,EAAE,IAAoB,EAAE,EAAE;YAChN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClD,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAiC,EAAE,wBAAwB,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,SAAS,GAAG;YAChB,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;YAC/B,MAAM,EAAE;gBACN,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5B,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC;gBAC/B,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC;aAC/B;YACD,IAAI,EAAE;gBACJ,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;gBAC5B,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;aAC3B;SACO,CAAC;QAEX,MAAM,wBAAwB,GAAG,CAC/B,IAAY,EACZ,aAA4C,EAAE,EAC9C;QACE;;;WAGG;QACH,0BAA0B,GAAG,EAAE,MAG7B,EAAE,EACN,EAAE;YACF,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,uBAAuB,IAAI,MAAM,CAAC,CAAC;YACpG,IAAI,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC9E,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YAEtF,MAAM,iBAAiB,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,0BAA0B,EAAE,CAAC;YAE1E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC1C,aAAa,EAAE,cAAc,CAAC,aAAa;gBAC3C,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,KAAK,EAAE,OAAO;gBACd,SAAS;gBACT,QAAQ,EAAE,UAAU;gBACpB,GAAG,UAAU;aACd,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,EAAE,CAAC;YAErB,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;YACnH,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;YAExE,uGAAuG;YACvG,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEzC,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;YACrH,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;YAE1E,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;QAEF,wBAAwB,CAAC,SAAS,EAAE;YAClC,IAAI,EAAE,SAAS;YACf,4BAA4B,EAAE,SAAS;SACxC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,eAAe,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAEhC,MAAM,4BAA4B,GAAG,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACjE,wBAAwB,CACtB,2CAA2C,EAC3C;YACE,IAAI,EAAE,SAAS;YACf,4BAA4B;SAC7B,EACD;YACE,0BAA0B,EAAE;gBAC1B,IAAI,EAAE;oBACJ,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;oBAC1B,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;iBAC7B;aACF;SACF,CACF,CAAC;QAOF,iGAAiG;QACjG,8EAA8E;QAC9E,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAE,eAAuB,EAAE,EAAE;YAC/D,MAAM,GAAG,GAAQ,EAAE,CAAC;YACpB,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;gBAC7B,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAErC,IAAI,SAAS,KAAK,KAAK,CAAC,WAAW;gBACjC,GAAG,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7C,MAAM,IAAI,GAAG;gBACX,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBACxB,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;aAC1C,CAAC;YAEF,wBAAwB,CACtB,mBAAmB,EACnB;gBACE,IAAI;gBACJ,4BAA4B,EAAE,SAAS;aACxC,EACD;gBACE,0BAA0B,EAAE;oBAC1B,IAAI,EAAE;wBACJ,GAAG,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;wBACvC,IAAI,EAAE,EAAE,CAAC,EAAE,eAAe,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;qBAChD;iBACF;aACF,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3B,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,sCAAsC,CAAC,CAAC;QAC3G,MAAM,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAChF,MAAM,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,CAAE,CAAC;QAC5G,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QAElH,+BAA+B;QAC/B,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE;YACxF,GAAG,SAAS;YACZ,GAAG,YAAY;YACf,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS,EAAE;YACrC,QAAQ,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;SACjF,CAAgB,CAAC;QAElB,oBAAoB;QACpB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAc,EAAE,CAAC,CAAC;QACrE,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAE9C,gCAAgC;QAChC,CAAC;YACC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;gBACzB,CAAC,EAAE,IAAI;gBACP,CAAC,EAAE,IAAI;gBACP,CAAC,EAAE,IAAI;gBACP,CAAC,EAAE,IAAI;gBACP,EAAE,EAAE,IAAI;gBACR,CAAC,EAAE,IAAI;gBACP,GAAG,EAAE,IAAI;gBACT,GAAG,EAAE,IAAI;gBACT,GAAG,EAAE,IAAI;gBACT,CAAC,EAAE,IAAI;gBACP,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YAEH,qBAAqB;YACrB,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,EAAE,CAAC;YAErB,kCAAkC;YAClC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAc,EAAE,CAAC,CAAC;YACtE,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BriefcaseIdValue, Code, ColorDef, ElementAspectProps, ElementGeometry, GeometricElementProps, GeometryStreamProps, IModel, PhysicalElementProps,\r\n Placement3dProps, QueryRowFormat, SubCategoryAppearance,\r\n} from \"@itwin/core-common\";\r\nimport { Angle, Arc3d, Cone, IModelJson as GeomJson, LineSegment3d, Point2d, Point3d } from \"@itwin/core-geometry\";\r\nimport { _nativeDb, ECSqlStatement, IModelDb, IModelJsFs, PhysicalModel, PhysicalObject, SnapshotDb, SpatialCategory } from \"../../core-backend\";\r\nimport { ElementRefersToElements } from \"../../Relationship\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { EntityClass, RelationshipClass } from \"@itwin/ecschema-metadata\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\ninterface IPrimitiveBase {\r\n i?: number;\r\n l?: number;\r\n d?: number;\r\n b?: boolean;\r\n dt?: string;\r\n s?: string;\r\n bin?: Uint8Array;\r\n p2d?: Point2d;\r\n p3d?: Point3d;\r\n g?: GeometryStreamProps;\r\n}\r\n\r\ninterface IPrimitive extends IPrimitiveBase {\r\n st?: ComplexStruct;\r\n}\r\n\r\ninterface IPrimitiveArrayBase {\r\n array_i?: number[];\r\n array_l?: number[];\r\n array_d?: number[];\r\n array_b?: boolean[];\r\n array_dt?: string[];\r\n array_s?: string[];\r\n array_bin?: Uint8Array[];\r\n array_p2d?: Point2d[];\r\n array_p3d?: Point3d[];\r\n array_g?: GeometryStreamProps[];\r\n array_st?: ComplexStruct[];\r\n}\r\n\r\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\r\n array_st?: ComplexStruct[];\r\n}\r\n\r\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\r\n\r\ninterface TestElement extends IPrimitive, IPrimitiveArray, GeometricElementProps { }\r\n\r\ninterface TestElementAspect extends IPrimitive, IPrimitiveArray, ElementAspectProps { }\r\n\r\ninterface TestElementRefersToElements extends IPrimitive, IPrimitiveArray, ElementRefersToElements { }\r\n\r\nfunction verifyPrimitiveBase(actualValue: IPrimitiveBase, expectedValue: IPrimitiveBase) {\r\n if (expectedValue.i !== undefined)\r\n assert.equal(actualValue.i, expectedValue.i, \"'integer' type property did not roundtrip as expected\");\r\n if (expectedValue.l !== undefined)\r\n assert.equal(actualValue.l, expectedValue.l, \"'long' type property did not roundtrip as expected\");\r\n if (expectedValue.d !== undefined)\r\n assert.equal(actualValue.d, expectedValue.d, \"'double' type property did not roundtrip as expected\");\r\n if (expectedValue.b !== undefined)\r\n assert.equal(actualValue.b, expectedValue.b, \"'boolean' type property did not roundtrip as expected\");\r\n if (expectedValue.dt !== undefined)\r\n assert.equal(actualValue.dt, expectedValue.dt, \"'dateTime' type property did not roundtrip as expected\");\r\n if (expectedValue.s !== undefined)\r\n assert.equal(actualValue.s, expectedValue.s, \"'string' type property did not roundtrip as expected\");\r\n if (expectedValue.p2d) {\r\n assert.equal(actualValue.p2d?.x, expectedValue.p2d.x, \"'Point2d.x' type property did not roundtrip as expected\");\r\n assert.equal(actualValue.p2d?.y, expectedValue.p2d.y, \"'Point2d.y' type property did not roundtrip as expected\");\r\n } else if(expectedValue.p2d === null) {\r\n assert.equal(actualValue.p2d, expectedValue.p2d, \"'Point2d' type property did not roundtrip as expected.\");\r\n }\r\n if (expectedValue.p3d) {\r\n assert.equal(actualValue.p3d?.x, expectedValue.p3d.x, \"'Point3d.x' type property did not roundtrip as expected\");\r\n assert.equal(actualValue.p3d?.y, expectedValue.p3d.y, \"'Point3d.y' type property did not roundtrip as expected\");\r\n assert.equal(actualValue.p3d?.z, expectedValue.p3d.z, \"'Point3d.z' type property did not roundtrip as expected\");\r\n } else if(expectedValue.p3d === null) {\r\n assert.equal(actualValue.p3d, expectedValue.p3d, \"'Point3d' type property did not roundtrip as expected.\");\r\n }\r\n if (expectedValue.bin) {\r\n assert.isTrue(blobEqual(actualValue.bin, expectedValue.bin), \"'binary' type property did not roundtrip as expected\");\r\n } else if(expectedValue.bin === null) {\r\n assert.equal(actualValue.bin, expectedValue.bin, \"'binary' type property did not roundtrip as expected.\");\r\n }\r\n if (expectedValue.g) {\r\n expect(actualValue.g, \"'geometry' type property did not roundtrip as expected.\").to.deep.equal(expectedValue.g);\r\n } else if(expectedValue.g === null) {\r\n assert.equal(actualValue.g, expectedValue.g, \"'geometry' type property did not roundtrip as expected.\");\r\n }\r\n}\r\n\r\nfunction verifyPrimitiveArrayBase(actualValue: IPrimitiveArrayBase, expectedValue: IPrimitiveArrayBase) {\r\n if (expectedValue.array_bin) {\r\n assert.equal(actualValue.array_bin!.length, expectedValue.array_bin.length, \"'binary[].length' array length mismatch\");\r\n expectedValue.array_bin.forEach((value, index) => {\r\n if(value) {\r\n assert.isTrue(blobEqual(actualValue.array_bin![index], value), \"'binary[]' type property did not roundtrip as expected\");\r\n } else if(value === null) {\r\n assert.equal(actualValue.array_bin![index], value, \"'binary[]' type property did not roundtrip as expected\");\r\n }\r\n });\r\n } else if(expectedValue.array_bin === null) {\r\n assert.equal(actualValue.array_bin, expectedValue.array_bin, \"'binary[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_i) {\r\n assert.equal(actualValue.array_i!.length, expectedValue.array_i.length, \"'integer[].length' array length mismatch\");\r\n expectedValue.array_i.forEach((value, index) => {\r\n assert.equal(actualValue.array_i![index], value, \"'integer[]' type property did not roundtrip as expected\");\r\n });\r\n } else if(expectedValue.array_i === null) {\r\n assert.equal(actualValue.array_i, expectedValue.array_i, \"'integer[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_l) {\r\n assert.equal(actualValue.array_l!.length, expectedValue.array_l.length, \"'long[].length' array length mismatch\");\r\n expectedValue.array_l.forEach((value, index) => {\r\n assert.equal(actualValue.array_l![index], value, \"'long[]' type property did not roundtrip as expected\");\r\n });\r\n } else if(expectedValue.array_l === null) {\r\n assert.equal(actualValue.array_l, expectedValue.array_l, \"'long[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_d) {\r\n assert.equal(actualValue.array_d!.length, expectedValue.array_d.length, \"'double[].length' array length mismatch\");\r\n expectedValue.array_d.forEach((value, index) => {\r\n assert.equal(actualValue.array_d![index], value, \"'double[]' type property did not roundtrip as expected\");\r\n });\r\n } else if(expectedValue.array_d === null) {\r\n assert.equal(actualValue.array_d, expectedValue.array_d, \"'double[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_b) {\r\n assert.equal(actualValue.array_b!.length, expectedValue.array_b.length, \"'boolean[].length' array length mismatch\");\r\n expectedValue.array_b.forEach((value, index) => {\r\n assert.equal(actualValue.array_b![index], value, \"'boolean[]' type property did not roundtrip as expected\");\r\n });\r\n } else if(expectedValue.array_b === null) {\r\n assert.equal(actualValue.array_b, expectedValue.array_b, \"'boolean[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_dt) {\r\n assert.equal(actualValue.array_dt!.length, expectedValue.array_dt.length, \"'dateTime[].length' array length mismatch\");\r\n expectedValue.array_dt.forEach((value, index) => {\r\n assert.equal(actualValue.array_dt![index], value, \"'dateTime[]' type property did not roundtrip as expected\");\r\n });\r\n } else if(expectedValue.array_dt === null) {\r\n assert.equal(actualValue.array_dt, expectedValue.array_dt, \"'dateTime[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_g) {\r\n assert.equal(actualValue.array_g!.length, expectedValue.array_g.length, \"'geometry[].length' array length mismatch\");\r\n expectedValue.array_g.forEach((value, index) => {\r\n if(value) {\r\n expect(actualValue.array_g![index], \"'geometry[]' type property did not roundtrip as expected\").to.deep.equal(value);\r\n } else if(value === null) {\r\n assert.equal(actualValue.array_g![index], value, \"'geometry[]' type property did not roundtrip as expected\");\r\n }\r\n });\r\n } else if(expectedValue.array_g === null) {\r\n assert.equal(actualValue.array_g, expectedValue.array_g, \"'geometry[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_s) {\r\n assert.equal(actualValue.array_s!.length, expectedValue.array_s.length, \"'string[].length' array length mismatch\");\r\n expectedValue.array_s.forEach((value, index) => {\r\n assert.equal(actualValue.array_s![index], value, \"'string[]' type property did not roundtrip as expected\");\r\n });\r\n } else if(expectedValue.array_s === null) {\r\n assert.equal(actualValue.array_s, expectedValue.array_s, \"'string[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_p2d) {\r\n assert.equal(actualValue.array_p2d!.length, expectedValue.array_p2d.length, \"'point2d[].length' array length mismatch\");\r\n expectedValue.array_p2d.forEach((value, index) => {\r\n if (value) {\r\n assert.equal(actualValue.array_p2d![index].x, value.x, \"'point2d[].x' type property did not roundtrip as expected\");\r\n assert.equal(actualValue.array_p2d![index].y, value.y, \"'point2d[].y' type property did not roundtrip as expected\");\r\n } else if (value === null) {\r\n assert.equal(actualValue.array_p2d![index], value, \"'point2d[]' type property did not roundtrip as expected.\");\r\n }\r\n });\r\n } else if(expectedValue.array_p2d === null) {\r\n assert.equal(actualValue.array_p2d, expectedValue.array_p2d, \"'point2d[]' type property did not roundtrip as expected.\");\r\n }\r\n\r\n if (expectedValue.array_p3d) {\r\n assert.equal(actualValue.array_p3d!.length, expectedValue.array_p3d.length, \"'point3d[].length' array length mismatch\");\r\n expectedValue.array_p3d.forEach((value, index) => {\r\n if(value) {\r\n assert.equal(actualValue.array_p3d![index].x, value.x, \"'point3d[].x' type property did not roundtrip as expected\");\r\n assert.equal(actualValue.array_p3d![index].y, value.y, \"'point3d[].y' type property did not roundtrip as expected\");\r\n assert.equal(actualValue.array_p3d![index].z, value.z, \"'point3d[].z' type property did not roundtrip as expected\");\r\n } else if(value === null) {\r\n assert.equal(actualValue.array_p3d![index], value, \"'point3d[]' type property did not roundtrip as expected.\");\r\n }\r\n });\r\n } else if(expectedValue.array_p3d === null) {\r\n assert.equal(actualValue.array_p3d, expectedValue.array_p3d, \"'point3d[]' type property did not roundtrip as expected.\");\r\n }\r\n}\r\n\r\nfunction verifyPrimitive(actualValue: IPrimitive, expectedValue: IPrimitive) {\r\n verifyPrimitiveBase(actualValue, expectedValue);\r\n if (expectedValue.st) {\r\n verifyPrimitive(actualValue.st!, expectedValue.st);\r\n verifyPrimitiveArray(actualValue.st!, expectedValue.st);\r\n } else if(expectedValue.st === null) {\r\n assert.equal(actualValue.st, expectedValue.st, \"'ComplexStruct' type property did not roundtrip as expected.\");\r\n }\r\n}\r\n\r\nfunction verifyPrimitiveArray(actualValue: IPrimitiveArray, expectedValue: IPrimitiveArray) {\r\n verifyPrimitiveArrayBase(actualValue, expectedValue);\r\n if (expectedValue.array_st) {\r\n assert.equal(actualValue.array_st!.length, expectedValue.array_st.length, \"'struct[].length' array length mismatch\");\r\n actualValue.array_st!.forEach((lhs: ComplexStruct, i: number) => {\r\n verifyPrimitiveBase(lhs, expectedValue.array_st![i]);\r\n verifyPrimitiveArrayBase(lhs, expectedValue.array_st![i]);\r\n });\r\n } else if(expectedValue.array_st === null) {\r\n assert.equal(actualValue.array_st, expectedValue.array_st, \"'ComplexStruct[]' type property did not roundtrip as expected.\");\r\n }\r\n}\r\n\r\nfunction verifySystemProperty(actualValue: TestElement | TestElementAspect | TestElementRefersToElements, expectedValue: TestElement | TestElementAspect | TestElementRefersToElements) {\r\n assert.deepEqual(actualValue, expectedValue, \"System property did not roundtrip as expected\");\r\n}\r\n\r\nfunction verifyTestElement(actualValue: TestElement, expectedValue: TestElement) {\r\n verifyPrimitive(actualValue, expectedValue);\r\n verifyPrimitiveArray(actualValue, expectedValue);\r\n}\r\n\r\nfunction verifyTestElementAspect(actualValue: TestElementAspect, expectedValue: TestElementAspect) {\r\n verifyPrimitive(actualValue, expectedValue);\r\n verifyPrimitiveArray(actualValue, expectedValue);\r\n}\r\n\r\nfunction initElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, autoHandledProp: any): GeometricElementProps {\r\n // add Geometry\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = GeomJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n // Create props\r\n const elementProps: GeometricElementProps = {\r\n classFullName: `ElementRoundTripTest:${className}`,\r\n model: modId,\r\n category: catId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n };\r\n\r\n if (autoHandledProp)\r\n Object.assign(elementProps, autoHandledProp);\r\n\r\n return elementProps;\r\n}\r\n\r\nfunction initElementAspectProps(className: string, _iModelName: IModelDb, elId: Id64String, autoHandledProp: any) {\r\n // Create props\r\n const elementProps: ElementAspectProps = {\r\n classFullName: `ElementRoundTripTest:${className}`,\r\n element: { id: elId },\r\n };\r\n\r\n if (autoHandledProp)\r\n Object.assign(elementProps, autoHandledProp);\r\n\r\n return elementProps;\r\n}\r\n\r\nfunction blobEqual(lhs: any, rhs: any) {\r\n if (!(lhs instanceof Uint8Array) || !(rhs instanceof Uint8Array))\r\n throw new Error(\"expecting uint8array\");\r\n\r\n if (lhs.byteLength !== rhs.byteLength)\r\n return false;\r\n\r\n for (let i = 0; i < lhs.byteLength; i++) {\r\n if (lhs[i] !== rhs[i])\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction initElementRefersToElementsProps(className: string, _iModelName: IModelDb, elId1: Id64String, elId2: Id64String, autoHandledProp: any): TestElementRefersToElements {\r\n // Create props\r\n const result: TestElementRefersToElements = {\r\n classFullName: `ElementRoundTripTest:${className}`,\r\n sourceId: elId1,\r\n targetId: elId2,\r\n } as TestElementRefersToElements;\r\n\r\n if (autoHandledProp)\r\n Object.assign(result, autoHandledProp);\r\n\r\n return result;\r\n}\r\n\r\ndescribe(\"Element and ElementAspect roundtrip test for all type of properties\", () => {\r\n const testSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"ElementRoundTripTest\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.04\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.03\" alias=\"CoreCA\"/>\r\n <ECEntityClass typeName=\"TestElement\" modifier=\"None\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <BaseClass>IPrimitive</BaseClass>\r\n <BaseClass>IPrimitiveArray</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"TestElementAspect\" modifier=\"None\">\r\n <BaseClass>bis:ElementUniqueAspect</BaseClass>\r\n <BaseClass>IPrimitiveAspect</BaseClass>\r\n <BaseClass>IPrimitiveArrayAspect</BaseClass>\r\n </ECEntityClass>\r\n <ECRelationshipClass typeName=\"TestElementRefersToElements\" strength=\"referencing\" modifier=\"Sealed\">\r\n <BaseClass>bis:ElementRefersToElements</BaseClass>\r\n <Source multiplicity=\"(0..*)\" roleLabel=\"refers to\" polymorphic=\"true\">\r\n <Class class=\"TestElement\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..*)\" roleLabel=\"is referenced by\" polymorphic=\"true\">\r\n <Class class=\"TestElement\"/>\r\n </Target>\r\n <ECProperty propertyName=\"i\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"l\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"d\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"b\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"bin\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"p2d\" typeName=\"point2d\"/>\r\n <ECProperty propertyName=\"p3d\" typeName=\"point3d\"/>\r\n <ECProperty propertyName=\"g\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <!--<ECStructProperty propertyName=\"st\" typeName=\"ComplexStruct\"/>-->\r\n <ECArrayProperty propertyName=\"array_i\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_l\" typeName=\"long\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_d\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_b\" typeName=\"boolean\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_dt\" typeName=\"dateTime\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_s\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_bin\" typeName=\"binary\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_p2d\" typeName=\"point2d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_p3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_g\" typeName=\"Bentley.Geometry.Common.IGeometry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <!--<ECStructArrayProperty propertyName=\"array_st\" typeName=\"ComplexStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>-->\r\n </ECRelationshipClass>\r\n <ECEntityClass typeName=\"IPrimitive\" modifier=\"Abstract\">\r\n <ECCustomAttributes>\r\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\r\n <AppliesToEntityClass>bis:PhysicalElement</AppliesToEntityClass>\r\n </IsMixin>\r\n </ECCustomAttributes>\r\n <ECProperty propertyName=\"i\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"l\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"d\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"b\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"bin\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"p2d\" typeName=\"point2d\"/>\r\n <ECProperty propertyName=\"p3d\" typeName=\"point3d\"/>\r\n <ECProperty propertyName=\"g\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECStructProperty propertyName=\"st\" typeName=\"ComplexStruct\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"IPrimitiveAspect\" modifier=\"Abstract\">\r\n <ECCustomAttributes>\r\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\r\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\r\n </IsMixin>\r\n </ECCustomAttributes>\r\n <ECProperty propertyName=\"i\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"l\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"d\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"b\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"bin\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"p2d\" typeName=\"point2d\"/>\r\n <ECProperty propertyName=\"p3d\" typeName=\"point3d\"/>\r\n <ECProperty propertyName=\"g\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECStructProperty propertyName=\"st\" typeName=\"ComplexStruct\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"IPrimitiveArray\" modifier=\"Abstract\">\r\n <ECCustomAttributes>\r\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\r\n <AppliesToEntityClass>bis:PhysicalElement</AppliesToEntityClass>\r\n </IsMixin>\r\n </ECCustomAttributes>\r\n <ECArrayProperty propertyName=\"array_i\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_l\" typeName=\"long\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_d\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_b\" typeName=\"boolean\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_dt\" typeName=\"dateTime\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_s\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_bin\" typeName=\"binary\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_p2d\" typeName=\"point2d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_p3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_g\" typeName=\"Bentley.Geometry.Common.IGeometry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECStructArrayProperty propertyName=\"array_st\" typeName=\"ComplexStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"IPrimitiveArrayAspect\" modifier=\"Abstract\">\r\n <ECCustomAttributes>\r\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\r\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\r\n </IsMixin>\r\n </ECCustomAttributes>\r\n <ECArrayProperty propertyName=\"array_i\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_l\" typeName=\"long\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_d\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_b\" typeName=\"boolean\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_dt\" typeName=\"dateTime\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_s\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_bin\" typeName=\"binary\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_p2d\" typeName=\"point2d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_p3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_g\" typeName=\"Bentley.Geometry.Common.IGeometry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECStructArrayProperty propertyName=\"array_st\" typeName=\"ComplexStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n </ECEntityClass>\r\n <ECStructClass typeName=\"ComplexStruct\" modifier=\"None\">\r\n <ECProperty propertyName=\"i\" typeName=\"int\"/>\r\n <ECProperty propertyName=\"l\" typeName=\"long\"/>\r\n <ECProperty propertyName=\"d\" typeName=\"double\"/>\r\n <ECProperty propertyName=\"b\" typeName=\"boolean\"/>\r\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"bin\" typeName=\"binary\"/>\r\n <ECProperty propertyName=\"p2d\" typeName=\"point2d\"/>\r\n <ECProperty propertyName=\"p3d\" typeName=\"point3d\"/>\r\n <ECProperty propertyName=\"g\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\r\n <ECArrayProperty propertyName=\"array_i\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_l\" typeName=\"long\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_d\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_b\" typeName=\"boolean\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_dt\" typeName=\"dateTime\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_s\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_bin\" typeName=\"binary\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_p2d\" typeName=\"point2d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_p3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n <ECArrayProperty propertyName=\"array_g\" typeName=\"Bentley.Geometry.Common.IGeometry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n </ECStructClass>\r\n </ECSchema>`;\r\n\r\n const schemaFileName = \"ElementRoundTripTest.01.00.00.xml\";\r\n const iModelFileName = \"ElementRoundTripTest.bim\";\r\n const categoryName = \"RoundTripCategory\";\r\n const subDirName = \"ElementRoundTrip\";\r\n const iModelPath = IModelTestUtils.prepareOutputFile(subDirName, iModelFileName);\r\n\r\n const primInst1: IPrimitiveBase = {\r\n i: 101,\r\n l: 12334343434,\r\n d: 1023.34,\r\n b: true,\r\n dt: \"2017-01-01T00:00:00.000\",\r\n s: \"Test string Inst1\",\r\n bin: new Uint8Array([1, 2, 3]),\r\n g: GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 0, 0), Point3d.create(0, 0, 1), 0.5, 0.5, false)),\r\n p2d: new Point2d(1.034, 2.034),\r\n p3d: new Point3d(-1.0, 2.3, 3.0001),\r\n };\r\n\r\n const primInst2: IPrimitiveBase = {\r\n i: 4322,\r\n l: 98283333,\r\n d: -2343.342,\r\n b: false,\r\n dt: \"2010-01-01T11:11:11.000\",\r\n s: \"Test string Inst2\",\r\n bin: new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\r\n g: GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 0), Point3d.create(0, 0, 1), 0.5, 0.5, false)),\r\n p2d: new Point2d(1111.11, 2222.22),\r\n p3d: new Point3d(-111.11, -222.22, -333.33),\r\n };\r\n\r\n const primArrInst1: IPrimitiveArrayBase = {\r\n array_i: [101, 202, -345],\r\n array_l: [12334343434, 3434343434, 12],\r\n array_d: [1023.34, 3023.34, -3432.033],\r\n array_b: [true, false, true, false],\r\n array_dt: [\"2017-01-01T00:00:00.000\", \"2018-01-01T00:00:00.000\"],\r\n array_s: [\"Test string 1\", \"Test string 2\", \"Test string 3\"],\r\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 2, 3, 3, 4, 55, 6, 65])],\r\n array_p2d: [new Point2d(1, 2), new Point2d(2, 4)],\r\n array_p3d: [new Point3d(1, 2, 3), new Point3d(4, 5, 6)],\r\n array_g: [\r\n GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 0), Point3d.create(0, 0, 2), 0.5, 0.5, false)),\r\n GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 1), Point3d.create(0, 0, 2), 0.5, 0.5, false)),\r\n ],\r\n };\r\n\r\n const primArrInst2: IPrimitiveArrayBase = {\r\n array_i: [0, 1, 2, 3, 4, 5, 6666],\r\n array_l: [-23422, -343343434, -12333434, 23423423],\r\n array_d: [-21023.34, -33023.34, -34432.033],\r\n array_b: [false, true],\r\n array_dt: [\"2017-01-01T00:00:00.000\", \"2018-01-01T00:00:00.000\", \"2011-01-01T00:00:00.000\"],\r\n array_s: [\"Test string 1 - inst2\", \"Test string 2 - inst2\", \"Test string 3 - inst2\"],\r\n array_bin: [new Uint8Array([1, 2, 3, 3, 4]), new Uint8Array([0, 0, 0, 0]), new Uint8Array([1, 2, 3, 4])],\r\n array_p2d: [new Point2d(-123, 244.23232), new Point2d(232, 324.2323), new Point2d(322, 2324.23322)],\r\n array_p3d: [new Point3d(133, 2333, 333), new Point3d(4123, 5123, 6123)],\r\n array_g: [\r\n GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 0), Point3d.create(0, 0, 2), 0.5, 0.5, false)),\r\n GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 1), Point3d.create(0, 0, 2), 0.5, 0.5, false)),\r\n ],\r\n };\r\n\r\n before(async () => {\r\n // write schema to disk as we do not have api to import xml directly\r\n const testSchemaPath = IModelTestUtils.prepareOutputFile(subDirName, schemaFileName);\r\n IModelJsFs.writeFileSync(testSchemaPath, testSchema);\r\n\r\n const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"RoundTripTest\" } });\r\n await imodel.importSchemas([testSchemaPath]);\r\n imodel[_nativeDb].resetBriefcaseId(BriefcaseIdValue.Unassigned);\r\n IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\r\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);\r\n if (undefined === spatialCategoryId)\r\n spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, categoryName,\r\n new SubCategoryAppearance({ color: ColorDef.create(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n imodel.saveChanges();\r\n imodel.close();\r\n });\r\n\r\n it(\"Roundtrip all type of properties via ElementApi, ConcurrentQuery and ECSqlStatement via insert and update\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_correct_data.bim\");\r\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\r\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName)!;\r\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\r\n\r\n // create element with auto handled properties\r\n const expectedValue = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {\r\n ...primInst1,\r\n ...primArrInst1,\r\n st: { ...primArrInst2, ...primInst1 },\r\n array_st: [{ ...primInst1, ...primArrInst2 }, { ...primInst2, ...primArrInst1 }],\r\n }) as TestElement;\r\n\r\n // insert a element\r\n const geomElement = imodel.elements.createElement(expectedValue);\r\n const id = imodel.elements.insertElement(geomElement.toJSON());\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n imodel.saveChanges();\r\n\r\n const expectedSystemProperty = {\r\n id,\r\n className: `ElementRoundTripTest.TestElement`,\r\n model: {\r\n id: newModelId,\r\n relClassName: `BisCore.ModelContainsElements`,\r\n }\r\n } as unknown as TestElement;\r\n\r\n // verify inserted element properties\r\n const actualValue = imodel.elements.getElementProps<TestElement>(id);\r\n verifyTestElement(actualValue, expectedValue);\r\n\r\n // verify via concurrent query\r\n let rowCount = 0;\r\n for await (const row of imodel.createQueryReader(\"SELECT * FROM ts.TestElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n verifyTestElement(row.toRow() as TestElement, expectedValue);\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 1);\r\n\r\n // verify via ecsql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await imodel.withPreparedStatement(\"SELECT * FROM ts.TestElement\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const stmtRow = stmt.getRow() as TestElement;\r\n verifyTestElement(stmtRow, expectedValue);\r\n });\r\n\r\n // Verify system properties via ecsql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await imodel.withPreparedStatement(\"select ECInstanceId, ECClassId, Model from ts.TestElement\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n verifySystemProperty(stmt.getRow() as TestElement, expectedSystemProperty);\r\n });\r\n\r\n const testElementMetaData = imodel.schemaContext.getSchemaItemSync(\"ElementRoundTripTest\", \"TestElement\", EntityClass);\r\n assert.isDefined(testElementMetaData);\r\n const relClassMetaData = imodel.schemaContext.getSchemaItemSync(\"BisCore\", \"ModelContainsElements\", RelationshipClass);\r\n assert.isDefined(relClassMetaData);\r\n\r\n // Verify system properties via concurrent query\r\n let reader = imodel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, Model.Id, ec_classname(Model.RelECClassId, 's.c') as relClassName FROM ts.TestElement\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n assert.isTrue(await reader.step());\r\n assert.equal(reader.current.ECInstanceId, id);\r\n assert.equal(reader.current.className, testElementMetaData?.fullName);\r\n assert.equal(reader.current.Id, newModelId);\r\n assert.equal(reader.current.relClassName, relClassMetaData?.fullName);\r\n assert.isFalse(await reader.step());\r\n\r\n // update the element autohandled properties\r\n Object.assign(actualValue, {\r\n ...primInst2,\r\n ...primArrInst2,\r\n st: { ...primArrInst1, ...primInst2 },\r\n array_st: [{ ...primInst2, ...primArrInst2 }, { ...primInst1, ...primArrInst1 }],\r\n });\r\n\r\n // update element\r\n imodel.elements.updateElement(actualValue);\r\n imodel.saveChanges();\r\n\r\n // verify updated values\r\n const updatedValue = imodel.elements.getElementProps<TestElement>(id);\r\n verifyTestElement(updatedValue, actualValue);\r\n\r\n // verify via concurrent query\r\n rowCount = 0;\r\n for await (const row of imodel.createQueryReader(\"SELECT * FROM ts.TestElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n verifyTestElement(row.toRow() as TestElement, actualValue);\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 1);\r\n\r\n // verify via ecsql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await imodel.withPreparedStatement(\"SELECT * FROM ts.TestElement\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const stmtRow = stmt.getRow() as TestElement;\r\n verifyTestElement(stmtRow, actualValue);\r\n });\r\n\r\n // Verify system properties via ecsql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await imodel.withPreparedStatement(\"select ECInstanceId, ECClassId, Model from ts.TestElement\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n verifySystemProperty(stmt.getRow() as TestElement, expectedSystemProperty);\r\n });\r\n\r\n // Verify system properties via concurrent query\r\n reader = imodel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, Model.Id, ec_classname(Model.RelECClassId, 's.c') as relClassName FROM ts.TestElement\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n assert.isTrue(await reader.step());\r\n assert.equal(reader.current.ECInstanceId, id);\r\n assert.equal(reader.current.className, testElementMetaData?.fullName);\r\n assert.equal(reader.current.Id, newModelId);\r\n assert.equal(reader.current.relClassName, relClassMetaData?.fullName);\r\n assert.isFalse(await reader.step());\r\n\r\n imodel.close();\r\n });\r\n\r\n async function verifyElementAspect(elementAspectId: Id64String, elementAspect: ElementAspectProps, elementId: string, expectedAspectFullName: string, iModel: SnapshotDb): Promise<ElementAspectProps[]>{\r\n // Verify updated values\r\n const updatedAspectValue: ElementAspectProps[] = iModel.elements.getAspects(elementId, expectedAspectFullName).map((x) => x.toJSON());\r\n assert.equal(updatedAspectValue.length, 1);\r\n verifyTestElementAspect(updatedAspectValue[0], elementAspect);\r\n\r\n // Verify via a concurrent query\r\n let rowCount = 0;\r\n for await (const row of iModel.createQueryReader(\"SELECT * FROM ts.TestElementAspect\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n verifyTestElementAspect(row.toRow() as TestElementAspect, elementAspect);\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 1);\r\n\r\n // Verify via an ECSql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await iModel.withPreparedStatement(\"SELECT * FROM ts.TestElementAspect\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const stmtRow = stmt.getRow() as TestElementAspect;\r\n verifyTestElementAspect(stmtRow, elementAspect);\r\n });\r\n\r\n const expectedSystemProperty = {\r\n id: elementAspectId,\r\n className: `ElementRoundTripTest.TestElementAspect`,\r\n element: {\r\n id: elementId,\r\n relClassName: `BisCore.ElementOwnsUniqueAspect`,\r\n },\r\n } as unknown as ElementAspectProps;\r\n\r\n const aspectMetaData = await iModel.schemaContext.getSchemaItem(\"ElementRoundTripTest.TestElementAspect\", EntityClass);\r\n assert.isDefined(aspectMetaData);\r\n\r\n const relMetaData = await iModel.schemaContext.getSchemaItem(\"BisCore.ElementOwnsUniqueAspect\", RelationshipClass);\r\n assert.isDefined(relMetaData);\r\n\r\n // Verify via a concurrent query\r\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, Element.Id, ec_classname(Element.RelECClassId, 's.c') as relClassName FROM ts.TestElementAspect\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n assert.isTrue(await reader.step());\r\n assert.equal(reader.current.ECInstanceId, elementAspectId);\r\n assert.equal(reader.current.className, aspectMetaData?.fullName);\r\n assert.equal(reader.current.Id, elementId);\r\n assert.equal(reader.current.relClassName, relMetaData?.fullName);\r\n assert.isFalse(await reader.step());\r\n\r\n // Verify via an ECSql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await iModel.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Element FROM ts.TestElementAspect\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n verifySystemProperty(stmt.getRow() as TestElementAspect, expectedSystemProperty);\r\n });\r\n\r\n return updatedAspectValue;\r\n }\r\n\r\n it(\"Roundtrip all type of properties via ElementAspectApi, ConcurrentQuery and ECSqlStatement via insert and update\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_apsect_correct_data.bim\");\r\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\r\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName)!;\r\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\r\n\r\n // Create an element to use with the ElementAspects\r\n const expectedValue = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {}) as TestElement;\r\n\r\n // Insert an element\r\n const geomElement = imodel.elements.createElement(expectedValue);\r\n const elId = imodel.elements.insertElement(geomElement.toJSON());\r\n assert.isTrue(Id64.isValidId64(elId), \"Element insertion succeeded\");\r\n\r\n const expectedAspectValue = initElementAspectProps(\"TestElementAspect\", imodel, elId, {\r\n ...primInst1,\r\n ...primArrInst1,\r\n st: { ...primArrInst2, ...primInst1 },\r\n array_st: [{ ...primInst1, ...primArrInst2 }, { ...primInst2, ...primArrInst1 }],\r\n }) as TestElementAspect;\r\n\r\n // Insert an element aspect\r\n const elementAspectId = imodel.elements.insertAspect(expectedAspectValue);\r\n imodel.saveChanges();\r\n\r\n // Verify inserted element aspect properties\r\n const actualAspectValue = await verifyElementAspect(elementAspectId, expectedAspectValue, elId, expectedAspectValue.classFullName, imodel);\r\n\r\n // Update the element's autohandled properties\r\n Object.assign(actualAspectValue[0], {\r\n ...primInst2,\r\n ...primArrInst2,\r\n st: { ...primArrInst1, ...primInst2 },\r\n array_st: [{ ...primInst2, ...primArrInst2 }, { ...primInst1, ...primArrInst1 }],\r\n });\r\n\r\n // Update the element\r\n imodel.elements.updateAspect(actualAspectValue[0]);\r\n imodel.saveChanges();\r\n\r\n // Verify updated element aspect properties\r\n await verifyElementAspect(elementAspectId, actualAspectValue[0], elId, expectedAspectValue.classFullName, imodel);\r\n\r\n imodel.close();\r\n });\r\n\r\n function verifyTestElementRefersToElements(actualValue: TestElementRefersToElements, expectedValue: TestElementRefersToElements) {\r\n assert.equal(actualValue.sourceId, expectedValue.sourceId, \"'sourceId' type property did not roundtrip as expected\");\r\n assert.equal(actualValue.targetId, expectedValue.targetId, \"'targetId' type property did not roundtrip as expected\");\r\n verifyPrimitiveBase(actualValue, expectedValue);\r\n verifyPrimitiveArrayBase(actualValue, expectedValue);\r\n }\r\n\r\n it(\"Roundtrip all type of properties via ElementRefersToElements, ConcurrentQuery and ECSqlStatement via insert and update\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_relationships_correct_data.bim\");\r\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\r\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName)!;\r\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\r\n\r\n // create elements to use\r\n const element1 = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {}) as TestElement;\r\n const element2 = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {}) as TestElement;\r\n\r\n const geomElement1 = imodel.elements.createElement(element1);\r\n const elId1 = imodel.elements.insertElement(geomElement1.toJSON());\r\n assert.isTrue(Id64.isValidId64(elId1), \"insert of element 1 worked\");\r\n const geomElement2 = imodel.elements.createElement(element2);\r\n const elId2 = imodel.elements.insertElement(geomElement2.toJSON());\r\n assert.isTrue(Id64.isValidId64(elId2), \"insert of element 2 worked\");\r\n\r\n // TODO: Skipping structs here, because of a bug that prevents querying from link tables that have an overflow table, by skipping the struct we reduce the amount of used columns\r\n const expectedRelationshipValue = initElementRefersToElementsProps(\"TestElementRefersToElements\", imodel, elId1, elId2, {\r\n ...primInst1,\r\n ...primArrInst1,\r\n /* st: { ...primArrInst2, ...primInst1 },\r\n array_st: [{ ...primInst1, ...primArrInst2 }, { ...primInst2, ...primArrInst1 }], */\r\n });\r\n\r\n const instance = expectedRelationshipValue; // imodel.relationships.createInstance(expectedRelationshipValue);\r\n const relationshipId: Id64String = imodel.relationships.insertInstance(instance as any); // initElementRefersToElementsProps lies about return type.\r\n imodel.saveChanges();\r\n\r\n // verify inserted properties\r\n const actualRelationshipValue = imodel.relationships.getInstance<TestElementRefersToElements>(expectedRelationshipValue.classFullName, relationshipId);\r\n assert.exists(actualRelationshipValue);\r\n\r\n verifyTestElementRefersToElements(actualRelationshipValue, expectedRelationshipValue);\r\n\r\n // verify via concurrent query\r\n let rowCount = 0;\r\n for await (const row of imodel.createQueryReader(\"SELECT * FROM ts.TestElementRefersToElements\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n const val = row.toRow() as TestElementRefersToElements;\r\n verifyTestElementRefersToElements(val, expectedRelationshipValue);\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 1);\r\n\r\n // verify via ecsql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await imodel.withPreparedStatement(\"SELECT * FROM ts.TestElementRefersToElements\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const stmtRow = stmt.getRow() as TestElementRefersToElements;\r\n verifyTestElementRefersToElements(stmtRow, expectedRelationshipValue);\r\n });\r\n\r\n const expectedSystemProperties = {\r\n id: expectedRelationshipValue.id,\r\n className: `ElementRoundTripTest.TestElementRefersToElements`,\r\n sourceId: elId1,\r\n sourceClassName: `ElementRoundTripTest.TestElement`,\r\n targetId: elId2,\r\n targetClassName: `ElementRoundTripTest.TestElement`,\r\n } as unknown as TestElementRefersToElements;\r\n\r\n const classMetaData = await imodel.schemaContext.getSchemaItem(\"ElementRoundTripTest.TestElementRefersToElements\", RelationshipClass);\r\n assert.isDefined(classMetaData);\r\n const elementMetaData = await imodel.schemaContext.getSchemaItem(\"ElementRoundTripTest.TestElement\", EntityClass);\r\n assert.isDefined(elementMetaData);\r\n\r\n // verify system properties via concurrent query\r\n let reader = imodel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, SourceECInstanceId, ec_classname(SourceECClassId, 's.c') as srcClassName, TargetECInstanceid, ec_classname(TargetECClassId, 's.c') as trgtClassName FROM ts.TestElementRefersToElements\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n assert.isTrue(await reader.step());\r\n assert.equal(reader.current.ECInstanceId, relationshipId);\r\n assert.equal(reader.current.className, classMetaData?.fullName);\r\n assert.equal(reader.current.SourceECInstanceId, elId1);\r\n assert.equal(reader.current.srcClassName, elementMetaData?.fullName);\r\n assert.equal(reader.current.TargetECInstanceid, elId2);\r\n assert.equal(reader.current.trgtClassName, elementMetaData?.fullName);\r\n assert.isFalse(await reader.step());\r\n\r\n // verify system properties via ecsql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await imodel.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, SourceECInstanceId, SourceECClassId, TargetECInstanceid, TargetECClassId FROM ts.TestElementRefersToElements\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n verifySystemProperty(stmt.getRow() as TestElementRefersToElements, expectedSystemProperties);\r\n });\r\n\r\n const updatedExpectedValue = actualRelationshipValue;\r\n // update the element autohandled properties\r\n Object.assign(updatedExpectedValue, {\r\n ...primInst2,\r\n ...primArrInst2,\r\n /* st: { ...primArrInst1, ...primInst2 },\r\n array_st: [{ ...primInst2, ...primArrInst2 }, { ...primInst1, ...primArrInst1 }],*/\r\n });\r\n\r\n // update\r\n imodel.relationships.updateInstance(updatedExpectedValue.toJSON());\r\n imodel.saveChanges();\r\n\r\n // verify updated values\r\n const updatedValue = imodel.relationships.getInstance<TestElementRefersToElements>(expectedRelationshipValue.classFullName, relationshipId);\r\n verifyTestElementRefersToElements(updatedValue, updatedExpectedValue);\r\n\r\n // verify via concurrent query\r\n rowCount = 0;\r\n for await (const row of imodel.createQueryReader(\"SELECT * FROM ts.TestElementRefersToElements\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n verifyTestElementRefersToElements(row.toRow() as TestElementRefersToElements, updatedExpectedValue);\r\n rowCount++;\r\n }\r\n assert.equal(rowCount, 1);\r\n\r\n // verify via ecsql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await imodel.withPreparedStatement(\"SELECT * FROM ts.TestElementRefersToElements\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n const stmtRow = stmt.getRow() as TestElementRefersToElements;\r\n verifyTestElementRefersToElements(stmtRow, updatedExpectedValue);\r\n });\r\n\r\n // verify system properties via concurrent query\r\n reader = imodel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, SourceECInstanceId, ec_classname(SourceECClassId, 's.c') as srcClassName, TargetECInstanceid, ec_classname(TargetECClassId, 's.c') as trgtClassName FROM ts.TestElementRefersToElements\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n assert.isTrue(await reader.step());\r\n assert.equal(reader.current.ECInstanceId, relationshipId);\r\n assert.equal(reader.current.className, classMetaData?.fullName);\r\n assert.equal(reader.current.SourceECInstanceId, elId1);\r\n assert.equal(reader.current.srcClassName, elementMetaData?.fullName);\r\n assert.equal(reader.current.TargetECInstanceid, elId2);\r\n assert.equal(reader.current.trgtClassName, elementMetaData?.fullName);\r\n assert.isFalse(await reader.step());\r\n\r\n // verify system properties via ecsql statement\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n await imodel.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, SourceECInstanceId, SourceECClassId, TargetECInstanceid, TargetECClassId FROM ts.TestElementRefersToElements\", async (stmt: ECSqlStatement) => {\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n verifySystemProperty(stmt.getRow() as TestElementRefersToElements, expectedSystemProperties);\r\n });\r\n\r\n imodel.close();\r\n });\r\n\r\n it(\"Roundtrip placement when geom is undefined\", async () => {\r\n const placement = {\r\n origin: { x: 10, y: 20, z: 30 },\r\n angles: {\r\n yaw: Angle.createDegrees(90),\r\n pitch: Angle.createDegrees(180),\r\n roll: Angle.createDegrees(270),\r\n },\r\n bbox: {\r\n low: { x: -1, y: -2, z: -3 },\r\n high: { x: 1, y: 2, z: 3 },\r\n },\r\n } as const;\r\n\r\n const insertAndVerifyPlacement = (\r\n name: string,\r\n extraProps: Partial<PhysicalElementProps> = {},\r\n {\r\n /**\r\n * setting some geometry will override the passed bounding box with a calculated one,\r\n * so we need to be able to override parts of the expected placement based on the geometry used\r\n */\r\n expectedPlacementOverrides = {},\r\n }: {\r\n expectedPlacementOverrides?: Partial<Placement3dProps>;\r\n } = {},\r\n ) => {\r\n const imodelPath = IModelTestUtils.prepareOutputFile(subDirName, `roundtrip_placement-${name}.bim`);\r\n let imodel = IModelTestUtils.createSnapshotFromSeed(imodelPath, iModelPath);\r\n const modelId = PhysicalModel.insert(imodel, IModelDb.rootSubjectId, \"model\");\r\n const categoryId = SpatialCategory.insert(imodel, IModelDb.dictionaryId, \"model\", {});\r\n\r\n const expectedPlacement = { ...placement, ...expectedPlacementOverrides };\r\n\r\n const objId = imodel.elements.insertElement({\r\n classFullName: PhysicalObject.classFullName,\r\n code: Code.createEmpty(),\r\n model: modelId,\r\n placement,\r\n category: categoryId,\r\n ...extraProps,\r\n });\r\n\r\n imodel.saveChanges();\r\n\r\n const inMemoryCopy = imodel.elements.getElement<PhysicalObject>({ id: objId, wantGeometry: true }, PhysicalObject);\r\n expect(inMemoryCopy.placement).to.deep.advancedEqual(expectedPlacement);\r\n\r\n // reload db since there is a different path for loading properties not in memory that we want to force\r\n imodel.close();\r\n imodel = SnapshotDb.openFile(imodelPath);\r\n\r\n const readFromDbCopy = imodel.elements.getElement<PhysicalObject>({ id: objId, wantGeometry: true }, PhysicalObject);\r\n expect(readFromDbCopy.placement).to.deep.advancedEqual(expectedPlacement);\r\n\r\n imodel.close();\r\n };\r\n\r\n insertAndVerifyPlacement(\"no-geom\", {\r\n geom: undefined,\r\n elementGeometryBuilderParams: undefined,\r\n });\r\n\r\n const pts = [Point3d.create(5, 10, 0), Point3d.create(10, 10, 0)];\r\n const geomEntry = ElementGeometry.fromGeometryQuery(LineSegment3d.create(pts[0], pts[1]));\r\n assert(geomEntry !== undefined);\r\n\r\n const elementGeometryBuilderParams = { entryArray: [geomEntry] };\r\n insertAndVerifyPlacement(\r\n \"geom-through-elementGeometryBuilderParams\",\r\n {\r\n geom: undefined,\r\n elementGeometryBuilderParams,\r\n },\r\n {\r\n expectedPlacementOverrides: {\r\n bbox: {\r\n low: { x: 5, y: 10, z: 0 },\r\n high: { x: 10, y: 10, z: 0 },\r\n },\r\n },\r\n },\r\n );\r\n\r\n interface TestBoxProps {\r\n originX?: number;\r\n baseOriginX?: number;\r\n }\r\n\r\n // Previously, TypeScript BoxProps defined \"origin\" but native code only understood \"baseOrigin\".\r\n // Now, native code accepts either, preferring \"origin\" if both are specified.\r\n const testBox = (props: TestBoxProps, expectedXOffset: number) => {\r\n const box: any = {};\r\n if (undefined !== props.originX)\r\n box.origin = [props.originX, 1, 2];\r\n\r\n if (undefined !== props.baseOriginX)\r\n box.baseOrigin = [props.baseOriginX, 1, 2];\r\n\r\n const geom = [\r\n { header: { flags: 0 } },\r\n { box: { ...box, baseX: 10, baseY: 20 } },\r\n ];\r\n\r\n insertAndVerifyPlacement(\r\n \"geom-through-json\",\r\n {\r\n geom,\r\n elementGeometryBuilderParams: undefined,\r\n },\r\n {\r\n expectedPlacementOverrides: {\r\n bbox: {\r\n low: { x: expectedXOffset, y: 1, z: 2 },\r\n high: { x: expectedXOffset + 10, y: 21, z: 12 },\r\n },\r\n },\r\n },\r\n );\r\n };\r\n\r\n testBox({ originX: 0 }, 0);\r\n testBox({ baseOriginX: 5 }, 5);\r\n testBox({ originX: 2, baseOriginX: 4 }, 2);\r\n });\r\n\r\n it(\"Roundtrip updating properties to null\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_properties_null_update.bim\");\r\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\r\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName)!;\r\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\r\n\r\n // Create an element to be used\r\n const expectedValue = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {\r\n ...primInst1,\r\n ...primArrInst1,\r\n st: { ...primArrInst2, ...primInst1 },\r\n array_st: [{ ...primInst1, ...primArrInst2 }, { ...primInst2, ...primArrInst1 }],\r\n }) as TestElement;\r\n\r\n // Insert an element\r\n const geomElement = imodel.elements.createElement(expectedValue);\r\n const id = imodel.elements.insertElement(geomElement.toJSON());\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n imodel.saveChanges();\r\n\r\n // Verify inserted element properties\r\n const actualValue = imodel.elements.getElementProps<TestElement>(id);\r\n verifyTestElement(actualValue, expectedValue);\r\n\r\n // Update all properties to null\r\n {\r\n Object.assign(actualValue, {\r\n i: null,\r\n l: null,\r\n d: null,\r\n b: null,\r\n dt: null,\r\n s: null,\r\n bin: null,\r\n p2d: null,\r\n p3d: null,\r\n g: null,\r\n st: null,\r\n array_i: null,\r\n array_l: null,\r\n array_d: null,\r\n array_b: null,\r\n array_dt: null,\r\n array_s: null,\r\n array_bin: null,\r\n array_p2d: null,\r\n array_p3d: null,\r\n array_g: null,\r\n array_st: null,\r\n });\r\n\r\n // Update the element\r\n imodel.elements.updateElement(actualValue);\r\n imodel.saveChanges();\r\n\r\n // Verify updated value properties\r\n const updatedValue = imodel.elements.getElementProps<TestElement>(id);\r\n verifyTestElement(updatedValue, actualValue);\r\n }\r\n\r\n imodel.close();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"ElementRoundTrip.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementRoundTrip.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*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n BriefcaseIdValue, Code, ColorDef, ElementAspectProps, ElementGeometry, GeometricElementProps, GeometryStreamProps, IModel, PhysicalElementProps,\n Placement3dProps, QueryRowFormat, SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport { Angle, Arc3d, Cone, IModelJson as GeomJson, LineSegment3d, Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { _nativeDb, ECSqlStatement, IModelDb, IModelJsFs, PhysicalModel, PhysicalObject, SnapshotDb, SpatialCategory } from \"../../core-backend\";\nimport { ElementRefersToElements } from \"../../Relationship\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { EntityClass, RelationshipClass } from \"@itwin/ecschema-metadata\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\ninterface IPrimitiveBase {\n i?: number;\n l?: number;\n d?: number;\n b?: boolean;\n dt?: string;\n s?: string;\n bin?: Uint8Array;\n p2d?: Point2d;\n p3d?: Point3d;\n g?: GeometryStreamProps;\n}\n\ninterface IPrimitive extends IPrimitiveBase {\n st?: ComplexStruct;\n}\n\ninterface IPrimitiveArrayBase {\n array_i?: number[];\n array_l?: number[];\n array_d?: number[];\n array_b?: boolean[];\n array_dt?: string[];\n array_s?: string[];\n array_bin?: Uint8Array[];\n array_p2d?: Point2d[];\n array_p3d?: Point3d[];\n array_g?: GeometryStreamProps[];\n array_st?: ComplexStruct[];\n}\n\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\n array_st?: ComplexStruct[];\n}\n\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\n\ninterface TestElement extends IPrimitive, IPrimitiveArray, GeometricElementProps { }\n\ninterface TestElementAspect extends IPrimitive, IPrimitiveArray, ElementAspectProps { }\n\ninterface TestElementRefersToElements extends IPrimitive, IPrimitiveArray, ElementRefersToElements { }\n\nfunction verifyPrimitiveBase(actualValue: IPrimitiveBase, expectedValue: IPrimitiveBase) {\n if (expectedValue.i !== undefined)\n assert.equal(actualValue.i, expectedValue.i, \"'integer' type property did not roundtrip as expected\");\n if (expectedValue.l !== undefined)\n assert.equal(actualValue.l, expectedValue.l, \"'long' type property did not roundtrip as expected\");\n if (expectedValue.d !== undefined)\n assert.equal(actualValue.d, expectedValue.d, \"'double' type property did not roundtrip as expected\");\n if (expectedValue.b !== undefined)\n assert.equal(actualValue.b, expectedValue.b, \"'boolean' type property did not roundtrip as expected\");\n if (expectedValue.dt !== undefined)\n assert.equal(actualValue.dt, expectedValue.dt, \"'dateTime' type property did not roundtrip as expected\");\n if (expectedValue.s !== undefined)\n assert.equal(actualValue.s, expectedValue.s, \"'string' type property did not roundtrip as expected\");\n if (expectedValue.p2d) {\n assert.equal(actualValue.p2d?.x, expectedValue.p2d.x, \"'Point2d.x' type property did not roundtrip as expected\");\n assert.equal(actualValue.p2d?.y, expectedValue.p2d.y, \"'Point2d.y' type property did not roundtrip as expected\");\n } else if(expectedValue.p2d === null) {\n assert.equal(actualValue.p2d, expectedValue.p2d, \"'Point2d' type property did not roundtrip as expected.\");\n }\n if (expectedValue.p3d) {\n assert.equal(actualValue.p3d?.x, expectedValue.p3d.x, \"'Point3d.x' type property did not roundtrip as expected\");\n assert.equal(actualValue.p3d?.y, expectedValue.p3d.y, \"'Point3d.y' type property did not roundtrip as expected\");\n assert.equal(actualValue.p3d?.z, expectedValue.p3d.z, \"'Point3d.z' type property did not roundtrip as expected\");\n } else if(expectedValue.p3d === null) {\n assert.equal(actualValue.p3d, expectedValue.p3d, \"'Point3d' type property did not roundtrip as expected.\");\n }\n if (expectedValue.bin) {\n assert.isTrue(blobEqual(actualValue.bin, expectedValue.bin), \"'binary' type property did not roundtrip as expected\");\n } else if(expectedValue.bin === null) {\n assert.equal(actualValue.bin, expectedValue.bin, \"'binary' type property did not roundtrip as expected.\");\n }\n if (expectedValue.g) {\n expect(actualValue.g, \"'geometry' type property did not roundtrip as expected.\").to.deep.equal(expectedValue.g);\n } else if(expectedValue.g === null) {\n assert.equal(actualValue.g, expectedValue.g, \"'geometry' type property did not roundtrip as expected.\");\n }\n}\n\nfunction verifyPrimitiveArrayBase(actualValue: IPrimitiveArrayBase, expectedValue: IPrimitiveArrayBase) {\n if (expectedValue.array_bin) {\n assert.equal(actualValue.array_bin!.length, expectedValue.array_bin.length, \"'binary[].length' array length mismatch\");\n expectedValue.array_bin.forEach((value, index) => {\n if(value) {\n assert.isTrue(blobEqual(actualValue.array_bin![index], value), \"'binary[]' type property did not roundtrip as expected\");\n } else if(value === null) {\n assert.equal(actualValue.array_bin![index], value, \"'binary[]' type property did not roundtrip as expected\");\n }\n });\n } else if(expectedValue.array_bin === null) {\n assert.equal(actualValue.array_bin, expectedValue.array_bin, \"'binary[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_i) {\n assert.equal(actualValue.array_i!.length, expectedValue.array_i.length, \"'integer[].length' array length mismatch\");\n expectedValue.array_i.forEach((value, index) => {\n assert.equal(actualValue.array_i![index], value, \"'integer[]' type property did not roundtrip as expected\");\n });\n } else if(expectedValue.array_i === null) {\n assert.equal(actualValue.array_i, expectedValue.array_i, \"'integer[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_l) {\n assert.equal(actualValue.array_l!.length, expectedValue.array_l.length, \"'long[].length' array length mismatch\");\n expectedValue.array_l.forEach((value, index) => {\n assert.equal(actualValue.array_l![index], value, \"'long[]' type property did not roundtrip as expected\");\n });\n } else if(expectedValue.array_l === null) {\n assert.equal(actualValue.array_l, expectedValue.array_l, \"'long[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_d) {\n assert.equal(actualValue.array_d!.length, expectedValue.array_d.length, \"'double[].length' array length mismatch\");\n expectedValue.array_d.forEach((value, index) => {\n assert.equal(actualValue.array_d![index], value, \"'double[]' type property did not roundtrip as expected\");\n });\n } else if(expectedValue.array_d === null) {\n assert.equal(actualValue.array_d, expectedValue.array_d, \"'double[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_b) {\n assert.equal(actualValue.array_b!.length, expectedValue.array_b.length, \"'boolean[].length' array length mismatch\");\n expectedValue.array_b.forEach((value, index) => {\n assert.equal(actualValue.array_b![index], value, \"'boolean[]' type property did not roundtrip as expected\");\n });\n } else if(expectedValue.array_b === null) {\n assert.equal(actualValue.array_b, expectedValue.array_b, \"'boolean[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_dt) {\n assert.equal(actualValue.array_dt!.length, expectedValue.array_dt.length, \"'dateTime[].length' array length mismatch\");\n expectedValue.array_dt.forEach((value, index) => {\n assert.equal(actualValue.array_dt![index], value, \"'dateTime[]' type property did not roundtrip as expected\");\n });\n } else if(expectedValue.array_dt === null) {\n assert.equal(actualValue.array_dt, expectedValue.array_dt, \"'dateTime[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_g) {\n assert.equal(actualValue.array_g!.length, expectedValue.array_g.length, \"'geometry[].length' array length mismatch\");\n expectedValue.array_g.forEach((value, index) => {\n if(value) {\n expect(actualValue.array_g![index], \"'geometry[]' type property did not roundtrip as expected\").to.deep.equal(value);\n } else if(value === null) {\n assert.equal(actualValue.array_g![index], value, \"'geometry[]' type property did not roundtrip as expected\");\n }\n });\n } else if(expectedValue.array_g === null) {\n assert.equal(actualValue.array_g, expectedValue.array_g, \"'geometry[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_s) {\n assert.equal(actualValue.array_s!.length, expectedValue.array_s.length, \"'string[].length' array length mismatch\");\n expectedValue.array_s.forEach((value, index) => {\n assert.equal(actualValue.array_s![index], value, \"'string[]' type property did not roundtrip as expected\");\n });\n } else if(expectedValue.array_s === null) {\n assert.equal(actualValue.array_s, expectedValue.array_s, \"'string[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_p2d) {\n assert.equal(actualValue.array_p2d!.length, expectedValue.array_p2d.length, \"'point2d[].length' array length mismatch\");\n expectedValue.array_p2d.forEach((value, index) => {\n if (value) {\n assert.equal(actualValue.array_p2d![index].x, value.x, \"'point2d[].x' type property did not roundtrip as expected\");\n assert.equal(actualValue.array_p2d![index].y, value.y, \"'point2d[].y' type property did not roundtrip as expected\");\n } else if (value === null) {\n assert.equal(actualValue.array_p2d![index], value, \"'point2d[]' type property did not roundtrip as expected.\");\n }\n });\n } else if(expectedValue.array_p2d === null) {\n assert.equal(actualValue.array_p2d, expectedValue.array_p2d, \"'point2d[]' type property did not roundtrip as expected.\");\n }\n\n if (expectedValue.array_p3d) {\n assert.equal(actualValue.array_p3d!.length, expectedValue.array_p3d.length, \"'point3d[].length' array length mismatch\");\n expectedValue.array_p3d.forEach((value, index) => {\n if(value) {\n assert.equal(actualValue.array_p3d![index].x, value.x, \"'point3d[].x' type property did not roundtrip as expected\");\n assert.equal(actualValue.array_p3d![index].y, value.y, \"'point3d[].y' type property did not roundtrip as expected\");\n assert.equal(actualValue.array_p3d![index].z, value.z, \"'point3d[].z' type property did not roundtrip as expected\");\n } else if(value === null) {\n assert.equal(actualValue.array_p3d![index], value, \"'point3d[]' type property did not roundtrip as expected.\");\n }\n });\n } else if(expectedValue.array_p3d === null) {\n assert.equal(actualValue.array_p3d, expectedValue.array_p3d, \"'point3d[]' type property did not roundtrip as expected.\");\n }\n}\n\nfunction verifyPrimitive(actualValue: IPrimitive, expectedValue: IPrimitive) {\n verifyPrimitiveBase(actualValue, expectedValue);\n if (expectedValue.st) {\n verifyPrimitive(actualValue.st!, expectedValue.st);\n verifyPrimitiveArray(actualValue.st!, expectedValue.st);\n } else if(expectedValue.st === null) {\n assert.equal(actualValue.st, expectedValue.st, \"'ComplexStruct' type property did not roundtrip as expected.\");\n }\n}\n\nfunction verifyPrimitiveArray(actualValue: IPrimitiveArray, expectedValue: IPrimitiveArray) {\n verifyPrimitiveArrayBase(actualValue, expectedValue);\n if (expectedValue.array_st) {\n assert.equal(actualValue.array_st!.length, expectedValue.array_st.length, \"'struct[].length' array length mismatch\");\n actualValue.array_st!.forEach((lhs: ComplexStruct, i: number) => {\n verifyPrimitiveBase(lhs, expectedValue.array_st![i]);\n verifyPrimitiveArrayBase(lhs, expectedValue.array_st![i]);\n });\n } else if(expectedValue.array_st === null) {\n assert.equal(actualValue.array_st, expectedValue.array_st, \"'ComplexStruct[]' type property did not roundtrip as expected.\");\n }\n}\n\nfunction verifySystemProperty(actualValue: TestElement | TestElementAspect | TestElementRefersToElements, expectedValue: TestElement | TestElementAspect | TestElementRefersToElements) {\n assert.deepEqual(actualValue, expectedValue, \"System property did not roundtrip as expected\");\n}\n\nfunction verifyTestElement(actualValue: TestElement, expectedValue: TestElement) {\n verifyPrimitive(actualValue, expectedValue);\n verifyPrimitiveArray(actualValue, expectedValue);\n}\n\nfunction verifyTestElementAspect(actualValue: TestElementAspect, expectedValue: TestElementAspect) {\n verifyPrimitive(actualValue, expectedValue);\n verifyPrimitiveArray(actualValue, expectedValue);\n}\n\nfunction initElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, autoHandledProp: any): GeometricElementProps {\n // add Geometry\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = GeomJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n // Create props\n const elementProps: GeometricElementProps = {\n classFullName: `ElementRoundTripTest:${className}`,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n geom: geometryStream,\n };\n\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n\n return elementProps;\n}\n\nfunction initElementAspectProps(className: string, _iModelName: IModelDb, elId: Id64String, autoHandledProp: any) {\n // Create props\n const elementProps: ElementAspectProps = {\n classFullName: `ElementRoundTripTest:${className}`,\n element: { id: elId },\n };\n\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n\n return elementProps;\n}\n\nfunction blobEqual(lhs: any, rhs: any) {\n if (!(lhs instanceof Uint8Array) || !(rhs instanceof Uint8Array))\n throw new Error(\"expecting uint8array\");\n\n if (lhs.byteLength !== rhs.byteLength)\n return false;\n\n for (let i = 0; i < lhs.byteLength; i++) {\n if (lhs[i] !== rhs[i])\n return false;\n }\n return true;\n}\n\nfunction initElementRefersToElementsProps(className: string, _iModelName: IModelDb, elId1: Id64String, elId2: Id64String, autoHandledProp: any): TestElementRefersToElements {\n // Create props\n const result: TestElementRefersToElements = {\n classFullName: `ElementRoundTripTest:${className}`,\n sourceId: elId1,\n targetId: elId2,\n } as TestElementRefersToElements;\n\n if (autoHandledProp)\n Object.assign(result, autoHandledProp);\n\n return result;\n}\n\ndescribe(\"Element and ElementAspect roundtrip test for all type of properties\", () => {\n const testSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"ElementRoundTripTest\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.04\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.03\" alias=\"CoreCA\"/>\n <ECEntityClass typeName=\"TestElement\" modifier=\"None\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <BaseClass>IPrimitive</BaseClass>\n <BaseClass>IPrimitiveArray</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"TestElementAspect\" modifier=\"None\">\n <BaseClass>bis:ElementUniqueAspect</BaseClass>\n <BaseClass>IPrimitiveAspect</BaseClass>\n <BaseClass>IPrimitiveArrayAspect</BaseClass>\n </ECEntityClass>\n <ECRelationshipClass typeName=\"TestElementRefersToElements\" strength=\"referencing\" modifier=\"Sealed\">\n <BaseClass>bis:ElementRefersToElements</BaseClass>\n <Source multiplicity=\"(0..*)\" roleLabel=\"refers to\" polymorphic=\"true\">\n <Class class=\"TestElement\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"is referenced by\" polymorphic=\"true\">\n <Class class=\"TestElement\"/>\n </Target>\n <ECProperty propertyName=\"i\" typeName=\"int\"/>\n <ECProperty propertyName=\"l\" typeName=\"long\"/>\n <ECProperty propertyName=\"d\" typeName=\"double\"/>\n <ECProperty propertyName=\"b\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n <ECProperty propertyName=\"bin\" typeName=\"binary\"/>\n <ECProperty propertyName=\"p2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"p3d\" typeName=\"point3d\"/>\n <ECProperty propertyName=\"g\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <!--<ECStructProperty propertyName=\"st\" typeName=\"ComplexStruct\"/>-->\n <ECArrayProperty propertyName=\"array_i\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_l\" typeName=\"long\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_d\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_b\" typeName=\"boolean\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_dt\" typeName=\"dateTime\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_s\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_bin\" typeName=\"binary\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_p2d\" typeName=\"point2d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_p3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_g\" typeName=\"Bentley.Geometry.Common.IGeometry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <!--<ECStructArrayProperty propertyName=\"array_st\" typeName=\"ComplexStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>-->\n </ECRelationshipClass>\n <ECEntityClass typeName=\"IPrimitive\" modifier=\"Abstract\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:PhysicalElement</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n <ECProperty propertyName=\"i\" typeName=\"int\"/>\n <ECProperty propertyName=\"l\" typeName=\"long\"/>\n <ECProperty propertyName=\"d\" typeName=\"double\"/>\n <ECProperty propertyName=\"b\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n <ECProperty propertyName=\"bin\" typeName=\"binary\"/>\n <ECProperty propertyName=\"p2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"p3d\" typeName=\"point3d\"/>\n <ECProperty propertyName=\"g\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECStructProperty propertyName=\"st\" typeName=\"ComplexStruct\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"IPrimitiveAspect\" modifier=\"Abstract\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n <ECProperty propertyName=\"i\" typeName=\"int\"/>\n <ECProperty propertyName=\"l\" typeName=\"long\"/>\n <ECProperty propertyName=\"d\" typeName=\"double\"/>\n <ECProperty propertyName=\"b\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n <ECProperty propertyName=\"bin\" typeName=\"binary\"/>\n <ECProperty propertyName=\"p2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"p3d\" typeName=\"point3d\"/>\n <ECProperty propertyName=\"g\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECStructProperty propertyName=\"st\" typeName=\"ComplexStruct\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"IPrimitiveArray\" modifier=\"Abstract\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:PhysicalElement</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n <ECArrayProperty propertyName=\"array_i\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_l\" typeName=\"long\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_d\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_b\" typeName=\"boolean\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_dt\" typeName=\"dateTime\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_s\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_bin\" typeName=\"binary\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_p2d\" typeName=\"point2d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_p3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_g\" typeName=\"Bentley.Geometry.Common.IGeometry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructArrayProperty propertyName=\"array_st\" typeName=\"ComplexStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"IPrimitiveArrayAspect\" modifier=\"Abstract\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n <ECArrayProperty propertyName=\"array_i\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_l\" typeName=\"long\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_d\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_b\" typeName=\"boolean\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_dt\" typeName=\"dateTime\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_s\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_bin\" typeName=\"binary\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_p2d\" typeName=\"point2d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_p3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_g\" typeName=\"Bentley.Geometry.Common.IGeometry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructArrayProperty propertyName=\"array_st\" typeName=\"ComplexStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECEntityClass>\n <ECStructClass typeName=\"ComplexStruct\" modifier=\"None\">\n <ECProperty propertyName=\"i\" typeName=\"int\"/>\n <ECProperty propertyName=\"l\" typeName=\"long\"/>\n <ECProperty propertyName=\"d\" typeName=\"double\"/>\n <ECProperty propertyName=\"b\" typeName=\"boolean\"/>\n <ECProperty propertyName=\"dt\" typeName=\"dateTime\"/>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n <ECProperty propertyName=\"bin\" typeName=\"binary\"/>\n <ECProperty propertyName=\"p2d\" typeName=\"point2d\"/>\n <ECProperty propertyName=\"p3d\" typeName=\"point3d\"/>\n <ECProperty propertyName=\"g\" typeName=\"Bentley.Geometry.Common.IGeometry\"/>\n <ECArrayProperty propertyName=\"array_i\" typeName=\"int\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_l\" typeName=\"long\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_d\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_b\" typeName=\"boolean\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_dt\" typeName=\"dateTime\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_s\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_bin\" typeName=\"binary\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_p2d\" typeName=\"point2d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_p3d\" typeName=\"point3d\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECArrayProperty propertyName=\"array_g\" typeName=\"Bentley.Geometry.Common.IGeometry\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECStructClass>\n </ECSchema>`;\n\n const schemaFileName = \"ElementRoundTripTest.01.00.00.xml\";\n const iModelFileName = \"ElementRoundTripTest.bim\";\n const categoryName = \"RoundTripCategory\";\n const subDirName = \"ElementRoundTrip\";\n const iModelPath = IModelTestUtils.prepareOutputFile(subDirName, iModelFileName);\n\n const primInst1: IPrimitiveBase = {\n i: 101,\n l: 12334343434,\n d: 1023.34,\n b: true,\n dt: \"2017-01-01T00:00:00.000\",\n s: \"Test string Inst1\",\n bin: new Uint8Array([1, 2, 3]),\n g: GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 0, 0), Point3d.create(0, 0, 1), 0.5, 0.5, false)),\n p2d: new Point2d(1.034, 2.034),\n p3d: new Point3d(-1.0, 2.3, 3.0001),\n };\n\n const primInst2: IPrimitiveBase = {\n i: 4322,\n l: 98283333,\n d: -2343.342,\n b: false,\n dt: \"2010-01-01T11:11:11.000\",\n s: \"Test string Inst2\",\n bin: new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\n g: GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 0), Point3d.create(0, 0, 1), 0.5, 0.5, false)),\n p2d: new Point2d(1111.11, 2222.22),\n p3d: new Point3d(-111.11, -222.22, -333.33),\n };\n\n const primArrInst1: IPrimitiveArrayBase = {\n array_i: [101, 202, -345],\n array_l: [12334343434, 3434343434, 12],\n array_d: [1023.34, 3023.34, -3432.033],\n array_b: [true, false, true, false],\n array_dt: [\"2017-01-01T00:00:00.000\", \"2018-01-01T00:00:00.000\"],\n array_s: [\"Test string 1\", \"Test string 2\", \"Test string 3\"],\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 2, 3, 3, 4, 55, 6, 65])],\n array_p2d: [new Point2d(1, 2), new Point2d(2, 4)],\n array_p3d: [new Point3d(1, 2, 3), new Point3d(4, 5, 6)],\n array_g: [\n GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 0), Point3d.create(0, 0, 2), 0.5, 0.5, false)),\n GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 1), Point3d.create(0, 0, 2), 0.5, 0.5, false)),\n ],\n };\n\n const primArrInst2: IPrimitiveArrayBase = {\n array_i: [0, 1, 2, 3, 4, 5, 6666],\n array_l: [-23422, -343343434, -12333434, 23423423],\n array_d: [-21023.34, -33023.34, -34432.033],\n array_b: [false, true],\n array_dt: [\"2017-01-01T00:00:00.000\", \"2018-01-01T00:00:00.000\", \"2011-01-01T00:00:00.000\"],\n array_s: [\"Test string 1 - inst2\", \"Test string 2 - inst2\", \"Test string 3 - inst2\"],\n array_bin: [new Uint8Array([1, 2, 3, 3, 4]), new Uint8Array([0, 0, 0, 0]), new Uint8Array([1, 2, 3, 4])],\n array_p2d: [new Point2d(-123, 244.23232), new Point2d(232, 324.2323), new Point2d(322, 2324.23322)],\n array_p3d: [new Point3d(133, 2333, 333), new Point3d(4123, 5123, 6123)],\n array_g: [\n GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 0), Point3d.create(0, 0, 2), 0.5, 0.5, false)),\n GeomJson.Writer.toIModelJson(Cone.createAxisPoints(Point3d.create(0, 1, 1), Point3d.create(0, 0, 2), 0.5, 0.5, false)),\n ],\n };\n\n before(async () => {\n // write schema to disk as we do not have api to import xml directly\n const testSchemaPath = IModelTestUtils.prepareOutputFile(subDirName, schemaFileName);\n IModelJsFs.writeFileSync(testSchemaPath, testSchema);\n\n const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"RoundTripTest\" } });\n await imodel.importSchemas([testSchemaPath]);\n imodel[_nativeDb].resetBriefcaseId(BriefcaseIdValue.Unassigned);\n IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, categoryName,\n new SubCategoryAppearance({ color: ColorDef.create(\"rgb(255,0,0)\").toJSON() }));\n\n imodel.saveChanges();\n imodel.close();\n });\n\n it(\"Roundtrip all type of properties via ElementApi, ConcurrentQuery and ECSqlStatement via insert and update\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_correct_data.bim\");\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName)!;\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n\n // create element with auto handled properties\n const expectedValue = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {\n ...primInst1,\n ...primArrInst1,\n st: { ...primArrInst2, ...primInst1 },\n array_st: [{ ...primInst1, ...primArrInst2 }, { ...primInst2, ...primArrInst1 }],\n }) as TestElement;\n\n // insert a element\n const geomElement = imodel.elements.createElement(expectedValue);\n const id = imodel.elements.insertElement(geomElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n imodel.saveChanges();\n\n const expectedSystemProperty = {\n id,\n className: `ElementRoundTripTest.TestElement`,\n model: {\n id: newModelId,\n relClassName: `BisCore.ModelContainsElements`,\n }\n } as unknown as TestElement;\n\n // verify inserted element properties\n const actualValue = imodel.elements.getElementProps<TestElement>(id);\n verifyTestElement(actualValue, expectedValue);\n\n // verify via concurrent query\n let rowCount = 0;\n for await (const row of imodel.createQueryReader(\"SELECT * FROM ts.TestElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n verifyTestElement(row.toRow() as TestElement, expectedValue);\n rowCount++;\n }\n assert.equal(rowCount, 1);\n\n // verify via ecsql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await imodel.withPreparedStatement(\"SELECT * FROM ts.TestElement\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const stmtRow = stmt.getRow() as TestElement;\n verifyTestElement(stmtRow, expectedValue);\n });\n\n // Verify system properties via ecsql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await imodel.withPreparedStatement(\"select ECInstanceId, ECClassId, Model from ts.TestElement\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n verifySystemProperty(stmt.getRow() as TestElement, expectedSystemProperty);\n });\n\n const testElementMetaData = imodel.schemaContext.getSchemaItemSync(\"ElementRoundTripTest\", \"TestElement\", EntityClass);\n assert.isDefined(testElementMetaData);\n const relClassMetaData = imodel.schemaContext.getSchemaItemSync(\"BisCore\", \"ModelContainsElements\", RelationshipClass);\n assert.isDefined(relClassMetaData);\n\n // Verify system properties via concurrent query\n let reader = imodel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, Model.Id, ec_classname(Model.RelECClassId, 's.c') as relClassName FROM ts.TestElement\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n assert.isTrue(await reader.step());\n assert.equal(reader.current.ECInstanceId, id);\n assert.equal(reader.current.className, testElementMetaData?.fullName);\n assert.equal(reader.current.Id, newModelId);\n assert.equal(reader.current.relClassName, relClassMetaData?.fullName);\n assert.isFalse(await reader.step());\n\n // update the element autohandled properties\n Object.assign(actualValue, {\n ...primInst2,\n ...primArrInst2,\n st: { ...primArrInst1, ...primInst2 },\n array_st: [{ ...primInst2, ...primArrInst2 }, { ...primInst1, ...primArrInst1 }],\n });\n\n // update element\n imodel.elements.updateElement(actualValue);\n imodel.saveChanges();\n\n // verify updated values\n const updatedValue = imodel.elements.getElementProps<TestElement>(id);\n verifyTestElement(updatedValue, actualValue);\n\n // verify via concurrent query\n rowCount = 0;\n for await (const row of imodel.createQueryReader(\"SELECT * FROM ts.TestElement\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n verifyTestElement(row.toRow() as TestElement, actualValue);\n rowCount++;\n }\n assert.equal(rowCount, 1);\n\n // verify via ecsql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await imodel.withPreparedStatement(\"SELECT * FROM ts.TestElement\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const stmtRow = stmt.getRow() as TestElement;\n verifyTestElement(stmtRow, actualValue);\n });\n\n // Verify system properties via ecsql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await imodel.withPreparedStatement(\"select ECInstanceId, ECClassId, Model from ts.TestElement\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n verifySystemProperty(stmt.getRow() as TestElement, expectedSystemProperty);\n });\n\n // Verify system properties via concurrent query\n reader = imodel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, Model.Id, ec_classname(Model.RelECClassId, 's.c') as relClassName FROM ts.TestElement\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n assert.isTrue(await reader.step());\n assert.equal(reader.current.ECInstanceId, id);\n assert.equal(reader.current.className, testElementMetaData?.fullName);\n assert.equal(reader.current.Id, newModelId);\n assert.equal(reader.current.relClassName, relClassMetaData?.fullName);\n assert.isFalse(await reader.step());\n\n imodel.close();\n });\n\n async function verifyElementAspect(elementAspectId: Id64String, elementAspect: ElementAspectProps, elementId: string, expectedAspectFullName: string, iModel: SnapshotDb): Promise<ElementAspectProps[]>{\n // Verify updated values\n const updatedAspectValue: ElementAspectProps[] = iModel.elements.getAspects(elementId, expectedAspectFullName).map((x) => x.toJSON());\n assert.equal(updatedAspectValue.length, 1);\n verifyTestElementAspect(updatedAspectValue[0], elementAspect);\n\n // Verify via a concurrent query\n let rowCount = 0;\n for await (const row of iModel.createQueryReader(\"SELECT * FROM ts.TestElementAspect\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n verifyTestElementAspect(row.toRow() as TestElementAspect, elementAspect);\n rowCount++;\n }\n assert.equal(rowCount, 1);\n\n // Verify via an ECSql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await iModel.withPreparedStatement(\"SELECT * FROM ts.TestElementAspect\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const stmtRow = stmt.getRow() as TestElementAspect;\n verifyTestElementAspect(stmtRow, elementAspect);\n });\n\n const expectedSystemProperty = {\n id: elementAspectId,\n className: `ElementRoundTripTest.TestElementAspect`,\n element: {\n id: elementId,\n relClassName: `BisCore.ElementOwnsUniqueAspect`,\n },\n } as unknown as ElementAspectProps;\n\n const aspectMetaData = await iModel.schemaContext.getSchemaItem(\"ElementRoundTripTest.TestElementAspect\", EntityClass);\n assert.isDefined(aspectMetaData);\n\n const relMetaData = await iModel.schemaContext.getSchemaItem(\"BisCore.ElementOwnsUniqueAspect\", RelationshipClass);\n assert.isDefined(relMetaData);\n\n // Verify via a concurrent query\n const reader = iModel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, Element.Id, ec_classname(Element.RelECClassId, 's.c') as relClassName FROM ts.TestElementAspect\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n assert.isTrue(await reader.step());\n assert.equal(reader.current.ECInstanceId, elementAspectId);\n assert.equal(reader.current.className, aspectMetaData?.fullName);\n assert.equal(reader.current.Id, elementId);\n assert.equal(reader.current.relClassName, relMetaData?.fullName);\n assert.isFalse(await reader.step());\n\n // Verify via an ECSql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await iModel.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, Element FROM ts.TestElementAspect\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n verifySystemProperty(stmt.getRow() as TestElementAspect, expectedSystemProperty);\n });\n\n return updatedAspectValue;\n }\n\n it(\"Roundtrip all type of properties via ElementAspectApi, ConcurrentQuery and ECSqlStatement via insert and update\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_apsect_correct_data.bim\");\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName)!;\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n\n // Create an element to use with the ElementAspects\n const expectedValue = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {}) as TestElement;\n\n // Insert an element\n const geomElement = imodel.elements.createElement(expectedValue);\n const elId = imodel.elements.insertElement(geomElement.toJSON());\n assert.isTrue(Id64.isValidId64(elId), \"Element insertion succeeded\");\n\n const expectedAspectValue = initElementAspectProps(\"TestElementAspect\", imodel, elId, {\n ...primInst1,\n ...primArrInst1,\n st: { ...primArrInst2, ...primInst1 },\n array_st: [{ ...primInst1, ...primArrInst2 }, { ...primInst2, ...primArrInst1 }],\n }) as TestElementAspect;\n\n // Insert an element aspect\n const elementAspectId = imodel.elements.insertAspect(expectedAspectValue);\n imodel.saveChanges();\n\n // Verify inserted element aspect properties\n const actualAspectValue = await verifyElementAspect(elementAspectId, expectedAspectValue, elId, expectedAspectValue.classFullName, imodel);\n\n // Update the element's autohandled properties\n Object.assign(actualAspectValue[0], {\n ...primInst2,\n ...primArrInst2,\n st: { ...primArrInst1, ...primInst2 },\n array_st: [{ ...primInst2, ...primArrInst2 }, { ...primInst1, ...primArrInst1 }],\n });\n\n // Update the element\n imodel.elements.updateAspect(actualAspectValue[0]);\n imodel.saveChanges();\n\n // Verify updated element aspect properties\n await verifyElementAspect(elementAspectId, actualAspectValue[0], elId, expectedAspectValue.classFullName, imodel);\n\n imodel.close();\n });\n\n function verifyTestElementRefersToElements(actualValue: TestElementRefersToElements, expectedValue: TestElementRefersToElements) {\n assert.equal(actualValue.sourceId, expectedValue.sourceId, \"'sourceId' type property did not roundtrip as expected\");\n assert.equal(actualValue.targetId, expectedValue.targetId, \"'targetId' type property did not roundtrip as expected\");\n verifyPrimitiveBase(actualValue, expectedValue);\n verifyPrimitiveArrayBase(actualValue, expectedValue);\n }\n\n it(\"Roundtrip all type of properties via ElementRefersToElements, ConcurrentQuery and ECSqlStatement via insert and update\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_relationships_correct_data.bim\");\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName)!;\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n\n // create elements to use\n const element1 = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {}) as TestElement;\n const element2 = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {}) as TestElement;\n\n const geomElement1 = imodel.elements.createElement(element1);\n const elId1 = imodel.elements.insertElement(geomElement1.toJSON());\n assert.isTrue(Id64.isValidId64(elId1), \"insert of element 1 worked\");\n const geomElement2 = imodel.elements.createElement(element2);\n const elId2 = imodel.elements.insertElement(geomElement2.toJSON());\n assert.isTrue(Id64.isValidId64(elId2), \"insert of element 2 worked\");\n\n // TODO: Skipping structs here, because of a bug that prevents querying from link tables that have an overflow table, by skipping the struct we reduce the amount of used columns\n const expectedRelationshipValue = initElementRefersToElementsProps(\"TestElementRefersToElements\", imodel, elId1, elId2, {\n ...primInst1,\n ...primArrInst1,\n /* st: { ...primArrInst2, ...primInst1 },\n array_st: [{ ...primInst1, ...primArrInst2 }, { ...primInst2, ...primArrInst1 }], */\n });\n\n const instance = expectedRelationshipValue; // imodel.relationships.createInstance(expectedRelationshipValue);\n const relationshipId: Id64String = imodel.relationships.insertInstance(instance as any); // initElementRefersToElementsProps lies about return type.\n imodel.saveChanges();\n\n // verify inserted properties\n const actualRelationshipValue = imodel.relationships.getInstance<TestElementRefersToElements>(expectedRelationshipValue.classFullName, relationshipId);\n assert.exists(actualRelationshipValue);\n\n verifyTestElementRefersToElements(actualRelationshipValue, expectedRelationshipValue);\n\n // verify via concurrent query\n let rowCount = 0;\n for await (const row of imodel.createQueryReader(\"SELECT * FROM ts.TestElementRefersToElements\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n const val = row.toRow() as TestElementRefersToElements;\n verifyTestElementRefersToElements(val, expectedRelationshipValue);\n rowCount++;\n }\n assert.equal(rowCount, 1);\n\n // verify via ecsql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await imodel.withPreparedStatement(\"SELECT * FROM ts.TestElementRefersToElements\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const stmtRow = stmt.getRow() as TestElementRefersToElements;\n verifyTestElementRefersToElements(stmtRow, expectedRelationshipValue);\n });\n\n const expectedSystemProperties = {\n id: expectedRelationshipValue.id,\n className: `ElementRoundTripTest.TestElementRefersToElements`,\n sourceId: elId1,\n sourceClassName: `ElementRoundTripTest.TestElement`,\n targetId: elId2,\n targetClassName: `ElementRoundTripTest.TestElement`,\n } as unknown as TestElementRefersToElements;\n\n const classMetaData = await imodel.schemaContext.getSchemaItem(\"ElementRoundTripTest.TestElementRefersToElements\", RelationshipClass);\n assert.isDefined(classMetaData);\n const elementMetaData = await imodel.schemaContext.getSchemaItem(\"ElementRoundTripTest.TestElement\", EntityClass);\n assert.isDefined(elementMetaData);\n\n // verify system properties via concurrent query\n let reader = imodel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, SourceECInstanceId, ec_classname(SourceECClassId, 's.c') as srcClassName, TargetECInstanceid, ec_classname(TargetECClassId, 's.c') as trgtClassName FROM ts.TestElementRefersToElements\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n assert.isTrue(await reader.step());\n assert.equal(reader.current.ECInstanceId, relationshipId);\n assert.equal(reader.current.className, classMetaData?.fullName);\n assert.equal(reader.current.SourceECInstanceId, elId1);\n assert.equal(reader.current.srcClassName, elementMetaData?.fullName);\n assert.equal(reader.current.TargetECInstanceid, elId2);\n assert.equal(reader.current.trgtClassName, elementMetaData?.fullName);\n assert.isFalse(await reader.step());\n\n // verify system properties via ecsql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await imodel.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, SourceECInstanceId, SourceECClassId, TargetECInstanceid, TargetECClassId FROM ts.TestElementRefersToElements\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n verifySystemProperty(stmt.getRow() as TestElementRefersToElements, expectedSystemProperties);\n });\n\n const updatedExpectedValue = actualRelationshipValue;\n // update the element autohandled properties\n Object.assign(updatedExpectedValue, {\n ...primInst2,\n ...primArrInst2,\n /* st: { ...primArrInst1, ...primInst2 },\n array_st: [{ ...primInst2, ...primArrInst2 }, { ...primInst1, ...primArrInst1 }],*/\n });\n\n // update\n imodel.relationships.updateInstance(updatedExpectedValue.toJSON());\n imodel.saveChanges();\n\n // verify updated values\n const updatedValue = imodel.relationships.getInstance<TestElementRefersToElements>(expectedRelationshipValue.classFullName, relationshipId);\n verifyTestElementRefersToElements(updatedValue, updatedExpectedValue);\n\n // verify via concurrent query\n rowCount = 0;\n for await (const row of imodel.createQueryReader(\"SELECT * FROM ts.TestElementRefersToElements\", undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n verifyTestElementRefersToElements(row.toRow() as TestElementRefersToElements, updatedExpectedValue);\n rowCount++;\n }\n assert.equal(rowCount, 1);\n\n // verify via ecsql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await imodel.withPreparedStatement(\"SELECT * FROM ts.TestElementRefersToElements\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n const stmtRow = stmt.getRow() as TestElementRefersToElements;\n verifyTestElementRefersToElements(stmtRow, updatedExpectedValue);\n });\n\n // verify system properties via concurrent query\n reader = imodel.createQueryReader(\"SELECT ECInstanceId, ec_classname(ECClassId, 's.c') as className, SourceECInstanceId, ec_classname(SourceECClassId, 's.c') as srcClassName, TargetECInstanceid, ec_classname(TargetECClassId, 's.c') as trgtClassName FROM ts.TestElementRefersToElements\", undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\n assert.isTrue(await reader.step());\n assert.equal(reader.current.ECInstanceId, relationshipId);\n assert.equal(reader.current.className, classMetaData?.fullName);\n assert.equal(reader.current.SourceECInstanceId, elId1);\n assert.equal(reader.current.srcClassName, elementMetaData?.fullName);\n assert.equal(reader.current.TargetECInstanceid, elId2);\n assert.equal(reader.current.trgtClassName, elementMetaData?.fullName);\n assert.isFalse(await reader.step());\n\n // verify system properties via ecsql statement\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await imodel.withPreparedStatement(\"SELECT ECInstanceId, ECClassId, SourceECInstanceId, SourceECClassId, TargetECInstanceid, TargetECClassId FROM ts.TestElementRefersToElements\", async (stmt: ECSqlStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n verifySystemProperty(stmt.getRow() as TestElementRefersToElements, expectedSystemProperties);\n });\n\n imodel.close();\n });\n\n it(\"Roundtrip placement when geom is undefined\", async () => {\n const placement = {\n origin: { x: 10, y: 20, z: 30 },\n angles: {\n yaw: Angle.createDegrees(90),\n pitch: Angle.createDegrees(180),\n roll: Angle.createDegrees(270),\n },\n bbox: {\n low: { x: -1, y: -2, z: -3 },\n high: { x: 1, y: 2, z: 3 },\n },\n } as const;\n\n const insertAndVerifyPlacement = (\n name: string,\n extraProps: Partial<PhysicalElementProps> = {},\n {\n /**\n * setting some geometry will override the passed bounding box with a calculated one,\n * so we need to be able to override parts of the expected placement based on the geometry used\n */\n expectedPlacementOverrides = {},\n }: {\n expectedPlacementOverrides?: Partial<Placement3dProps>;\n } = {},\n ) => {\n const imodelPath = IModelTestUtils.prepareOutputFile(subDirName, `roundtrip_placement-${name}.bim`);\n let imodel = IModelTestUtils.createSnapshotFromSeed(imodelPath, iModelPath);\n const modelId = PhysicalModel.insert(imodel, IModelDb.rootSubjectId, \"model\");\n const categoryId = SpatialCategory.insert(imodel, IModelDb.dictionaryId, \"model\", {});\n\n const expectedPlacement = { ...placement, ...expectedPlacementOverrides };\n\n const objId = imodel.elements.insertElement({\n classFullName: PhysicalObject.classFullName,\n code: Code.createEmpty(),\n model: modelId,\n placement,\n category: categoryId,\n ...extraProps,\n });\n\n imodel.saveChanges();\n\n const inMemoryCopy = imodel.elements.getElement<PhysicalObject>({ id: objId, wantGeometry: true }, PhysicalObject);\n expect(inMemoryCopy.placement).to.deep.advancedEqual(expectedPlacement);\n\n // reload db since there is a different path for loading properties not in memory that we want to force\n imodel.close();\n imodel = SnapshotDb.openFile(imodelPath);\n\n const readFromDbCopy = imodel.elements.getElement<PhysicalObject>({ id: objId, wantGeometry: true }, PhysicalObject);\n expect(readFromDbCopy.placement).to.deep.advancedEqual(expectedPlacement);\n\n imodel.close();\n };\n\n insertAndVerifyPlacement(\"no-geom\", {\n geom: undefined,\n elementGeometryBuilderParams: undefined,\n });\n\n const pts = [Point3d.create(5, 10, 0), Point3d.create(10, 10, 0)];\n const geomEntry = ElementGeometry.fromGeometryQuery(LineSegment3d.create(pts[0], pts[1]));\n assert(geomEntry !== undefined);\n\n const elementGeometryBuilderParams = { entryArray: [geomEntry] };\n insertAndVerifyPlacement(\n \"geom-through-elementGeometryBuilderParams\",\n {\n geom: undefined,\n elementGeometryBuilderParams,\n },\n {\n expectedPlacementOverrides: {\n bbox: {\n low: { x: 5, y: 10, z: 0 },\n high: { x: 10, y: 10, z: 0 },\n },\n },\n },\n );\n\n interface TestBoxProps {\n originX?: number;\n baseOriginX?: number;\n }\n\n // Previously, TypeScript BoxProps defined \"origin\" but native code only understood \"baseOrigin\".\n // Now, native code accepts either, preferring \"origin\" if both are specified.\n const testBox = (props: TestBoxProps, expectedXOffset: number) => {\n const box: any = {};\n if (undefined !== props.originX)\n box.origin = [props.originX, 1, 2];\n\n if (undefined !== props.baseOriginX)\n box.baseOrigin = [props.baseOriginX, 1, 2];\n\n const geom = [\n { header: { flags: 0 } },\n { box: { ...box, baseX: 10, baseY: 20 } },\n ];\n\n insertAndVerifyPlacement(\n \"geom-through-json\",\n {\n geom,\n elementGeometryBuilderParams: undefined,\n },\n {\n expectedPlacementOverrides: {\n bbox: {\n low: { x: expectedXOffset, y: 1, z: 2 },\n high: { x: expectedXOffset + 10, y: 21, z: 12 },\n },\n },\n },\n );\n };\n\n testBox({ originX: 0 }, 0);\n testBox({ baseOriginX: 5 }, 5);\n testBox({ originX: 2, baseOriginX: 4 }, 2);\n });\n\n it(\"Roundtrip updating properties to null\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_properties_null_update.bim\");\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName)!;\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n\n // Create an element to be used\n const expectedValue = initElemProps(\"TestElement\", imodel, newModelId, spatialCategoryId, {\n ...primInst1,\n ...primArrInst1,\n st: { ...primArrInst2, ...primInst1 },\n array_st: [{ ...primInst1, ...primArrInst2 }, { ...primInst2, ...primArrInst1 }],\n }) as TestElement;\n\n // Insert an element\n const geomElement = imodel.elements.createElement(expectedValue);\n const id = imodel.elements.insertElement(geomElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n imodel.saveChanges();\n\n // Verify inserted element properties\n const actualValue = imodel.elements.getElementProps<TestElement>(id);\n verifyTestElement(actualValue, expectedValue);\n\n // Update all properties to null\n {\n Object.assign(actualValue, {\n i: null,\n l: null,\n d: null,\n b: null,\n dt: null,\n s: null,\n bin: null,\n p2d: null,\n p3d: null,\n g: null,\n st: null,\n array_i: null,\n array_l: null,\n array_d: null,\n array_b: null,\n array_dt: null,\n array_s: null,\n array_bin: null,\n array_p2d: null,\n array_p3d: null,\n array_g: null,\n array_st: null,\n });\n\n // Update the element\n imodel.elements.updateElement(actualValue);\n imodel.saveChanges();\n\n // Verify updated value properties\n const updatedValue = imodel.elements.getElementProps<TestElement>(id);\n verifyTestElement(updatedValue, actualValue);\n }\n\n imodel.close();\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExcludedElements.test.js","sourceRoot":"","sources":["../../../../src/test/element/ExcludedElements.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"ExcludedElements.test.js","sourceRoot":"","sources":["../../../../src/test/element/ExcludedElements.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*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { BisCodeSpec, DisplayStyleProps, IModel, QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { DisplayStyle3d, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\n// spell-checker: disable\n\ndescribe(\"ExcludedElements\", () => {\n let imodel: SnapshotDb;\n\n before(() => {\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"test.bim\"), IModelTestUtils.resolveAssetFile(\"test.bim\"));\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"should persist as a string and return as requested type\", async () => {\n const test = async (compressed: boolean) => {\n const excludedElements = \"+123\";\n const excludedElementIds = [\"0x123\"];\n const props: DisplayStyleProps = {\n classFullName: DisplayStyle3d.classFullName,\n model: IModel.dictionaryId,\n code: { spec: BisCodeSpec.displayStyle, scope: IModel.dictionaryId },\n isPrivate: false,\n jsonProperties: {\n styles: {\n excludedElements: compressed ? excludedElements : excludedElementIds,\n },\n },\n };\n\n const styleId = imodel.elements.insertElement(props);\n expect(styleId).not.to.equal(Id64.invalid);\n imodel.saveChanges();\n\n const rows: any[] = [];\n for await (const queryRow of imodel.createQueryReader(\"SELECT jsonProperties FROM bis.Element WHERE ECInstanceId=?\", QueryBinder.from([styleId]), { rowFormat: QueryRowFormat.UseJsPropertyNames }))\n rows.push(queryRow.toRow());\n\n expect(rows.length).to.equal(1);\n const json = JSON.parse(rows[0].jsonProperties);\n expect(json.styles.excludedElements).to.equal(excludedElements);\n\n const getStyle = (compressExcludedElementIds?: boolean) => {\n const loadProps = { id: styleId, displayStyle: { compressExcludedElementIds } };\n return imodel.elements.getElement<DisplayStyle3d>(loadProps);\n };\n\n // Unless compressed Ids explicitly requested, the Ids are always decompressed regardless of how they are stored.\n // This is to preserve compatibility with older front-ends that don't understand the compressed Ids; it's an unfortunate default.\n expect(getStyle().jsonProperties.styles.excludedElements).to.deep.equal(excludedElementIds);\n expect(getStyle(false).jsonProperties.styles.excludedElements).to.deep.equal(excludedElementIds);\n expect(getStyle(true).jsonProperties.styles.excludedElements).to.equal(excludedElements);\n };\n\n await test(true);\n await test(false);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalSource.test.js","sourceRoot":"","sources":["../../../../src/test/element/ExternalSource.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Code, ExternalSourceAttachmentProps, ExternalSourceProps, IModel, RepositoryLinkProps, SynchronizationConfigLinkProps,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n ExternalSource, ExternalSourceAttachment, ExternalSourceAttachmentAttachesSource, ExternalSourceGroup, ExternalSourceGroupGroupsSources,\r\n ExternalSourceIsInRepository, ExternalSourceOwnsAttachments, FolderContainsRepositories, FolderLink, IModelDb, LinkElement, RepositoryLink,\r\n SnapshotDb, SynchronizationConfigLink, SynchronizationConfigProcessesSources, SynchronizationConfigSpecifiesRootSources,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"ExternalSource\", () => {\r\n\r\n it(\"should create elements and relationships like an iModel Connector would\", () => {\r\n const iModelFileName = IModelTestUtils.prepareOutputFile(\"ExternalSource\", \"ExternalSource.bim\");\r\n const iModelDb = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"ExternalSource Test\" } });\r\n\r\n assert.isTrue(iModelDb.containsClass(SynchronizationConfigLink.classFullName));\r\n assert.isTrue(iModelDb.containsClass(ExternalSource.classFullName));\r\n assert.isTrue(iModelDb.containsClass(ExternalSourceIsInRepository.classFullName));\r\n assert.isTrue(iModelDb.containsClass(ExternalSourceAttachment.classFullName));\r\n assert.isTrue(iModelDb.containsClass(ExternalSourceGroup.classFullName));\r\n\r\n const syncJob = insertSynchronizationConfigLink(iModelDb, \"Synchronization Job\");\r\n\r\n const folder = insertFolderLink(iModelDb, \"Folder\", \"https://test.bentley.com/folder\");\r\n\r\n const repositoryM = insertRepositoryLink(iModelDb, folder, \"master.dgn\", \"https://test.bentley.com/folder/master.dgn\", \"DGN\");\r\n const repositoryA = insertRepositoryLink(iModelDb, folder, \"a.dgn\", \"https://test.bentley.com/folder/a.dgn\", \"DGN\");\r\n const repositoryB = insertRepositoryLink(iModelDb, folder, \"b.dgn\", \"https://test.bentley.com/folder/b.dgn\", \"DGN\");\r\n const repositoryC = insertRepositoryLink(iModelDb, folder, \"c.dgn\", \"https://test.bentley.com/folder/c.dgn\", \"DGN\");\r\n\r\n const modelM = insertExternalSource(iModelDb, repositoryM, \"M\");\r\n const modelA = insertExternalSource(iModelDb, repositoryA, \"A\");\r\n const modelB = insertExternalSource(iModelDb, repositoryB, \"B\");\r\n const modelC = insertExternalSource(iModelDb, repositoryC, \"C\");\r\n\r\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigSpecifiesRootSources.classFullName, sourceId: syncJob, targetId: modelM });\r\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelA });\r\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelB });\r\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelC });\r\n\r\n const group1 = insertExternalSourceGroup(iModelDb, \"Group1\");\r\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelA });\r\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelB });\r\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelC });\r\n\r\n const _attachmentMA = insertExternalSourceAttachment(iModelDb, modelM, modelA, \"A\");\r\n const _attachmentMB = insertExternalSourceAttachment(iModelDb, modelM, modelB, \"B\");\r\n const _attachmentAC = insertExternalSourceAttachment(iModelDb, modelA, modelC, \"C\");\r\n const _attachmentBC = insertExternalSourceAttachment(iModelDb, modelB, modelC, \"C\");\r\n\r\n iModelDb.saveChanges();\r\n iModelDb.close();\r\n });\r\n\r\n function insertSynchronizationConfigLink(iModelDb: IModelDb, name: string): Id64String {\r\n const configProps: SynchronizationConfigLinkProps = {\r\n classFullName: SynchronizationConfigLink.classFullName,\r\n model: IModel.repositoryModelId,\r\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, name),\r\n };\r\n return iModelDb.elements.insertElement(configProps);\r\n }\r\n\r\n function insertFolderLink(iModelDb: IModelDb, codeValue: string, url: string): Id64String {\r\n const folderLinkProps: RepositoryLinkProps = {\r\n classFullName: FolderLink.classFullName,\r\n model: IModel.repositoryModelId,\r\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),\r\n url,\r\n };\r\n return iModelDb.elements.insertElement(folderLinkProps);\r\n }\r\n\r\n function insertRepositoryLink(iModelDb: IModelDb, folderId: Id64String, codeValue: string, url: string, format: string): Id64String {\r\n const repositoryLinkProps: RepositoryLinkProps = {\r\n classFullName: RepositoryLink.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new FolderContainsRepositories(folderId),\r\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),\r\n url,\r\n format,\r\n };\r\n return iModelDb.elements.insertElement(repositoryLinkProps);\r\n }\r\n\r\n function insertExternalSource(iModelDb: IModelDb, repository: Id64String, userLabel: string): Id64String {\r\n const externalSourceProps: ExternalSourceProps = {\r\n classFullName: ExternalSource.classFullName,\r\n model: IModel.repositoryModelId,\r\n code: Code.createEmpty(),\r\n userLabel,\r\n repository: new ExternalSourceIsInRepository(repository),\r\n connectorName: \"Connector\",\r\n connectorVersion: \"0.0.1\",\r\n };\r\n return iModelDb.elements.insertElement(externalSourceProps);\r\n }\r\n\r\n function insertExternalSourceAttachment(iModelDb: IModelDb, masterModel: Id64String, attachedModel: Id64String, label: string): Id64String {\r\n const attachmentProps: ExternalSourceAttachmentProps = {\r\n classFullName: ExternalSource.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new ExternalSourceOwnsAttachments(masterModel),\r\n code: Code.createEmpty(),\r\n userLabel: label,\r\n attaches: new ExternalSourceAttachmentAttachesSource(attachedModel),\r\n };\r\n return iModelDb.elements.insertElement(attachmentProps);\r\n }\r\n\r\n function insertExternalSourceGroup(iModelDb: IModelDb, userLabel: string): Id64String {\r\n const groupProps: ExternalSourceProps = {\r\n classFullName: ExternalSourceGroup.classFullName,\r\n model: IModel.repositoryModelId,\r\n code: Code.createEmpty(),\r\n userLabel,\r\n repository: undefined,\r\n connectorName: \"Connector\",\r\n connectorVersion: \"0.0.1\",\r\n };\r\n return iModelDb.elements.insertElement(groupProps);\r\n }\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"ExternalSource.test.js","sourceRoot":"","sources":["../../../../src/test/element/ExternalSource.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 } from \"chai\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport {\n Code, ExternalSourceAttachmentProps, ExternalSourceProps, IModel, RepositoryLinkProps, SynchronizationConfigLinkProps,\n} from \"@itwin/core-common\";\nimport {\n ExternalSource, ExternalSourceAttachment, ExternalSourceAttachmentAttachesSource, ExternalSourceGroup, ExternalSourceGroupGroupsSources,\n ExternalSourceIsInRepository, ExternalSourceOwnsAttachments, FolderContainsRepositories, FolderLink, IModelDb, LinkElement, RepositoryLink,\n SnapshotDb, SynchronizationConfigLink, SynchronizationConfigProcessesSources, SynchronizationConfigSpecifiesRootSources,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"ExternalSource\", () => {\n\n it(\"should create elements and relationships like an iModel Connector would\", () => {\n const iModelFileName = IModelTestUtils.prepareOutputFile(\"ExternalSource\", \"ExternalSource.bim\");\n const iModelDb = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"ExternalSource Test\" } });\n\n assert.isTrue(iModelDb.containsClass(SynchronizationConfigLink.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSource.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceIsInRepository.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceAttachment.classFullName));\n assert.isTrue(iModelDb.containsClass(ExternalSourceGroup.classFullName));\n\n const syncJob = insertSynchronizationConfigLink(iModelDb, \"Synchronization Job\");\n\n const folder = insertFolderLink(iModelDb, \"Folder\", \"https://test.bentley.com/folder\");\n\n const repositoryM = insertRepositoryLink(iModelDb, folder, \"master.dgn\", \"https://test.bentley.com/folder/master.dgn\", \"DGN\");\n const repositoryA = insertRepositoryLink(iModelDb, folder, \"a.dgn\", \"https://test.bentley.com/folder/a.dgn\", \"DGN\");\n const repositoryB = insertRepositoryLink(iModelDb, folder, \"b.dgn\", \"https://test.bentley.com/folder/b.dgn\", \"DGN\");\n const repositoryC = insertRepositoryLink(iModelDb, folder, \"c.dgn\", \"https://test.bentley.com/folder/c.dgn\", \"DGN\");\n\n const modelM = insertExternalSource(iModelDb, repositoryM, \"M\");\n const modelA = insertExternalSource(iModelDb, repositoryA, \"A\");\n const modelB = insertExternalSource(iModelDb, repositoryB, \"B\");\n const modelC = insertExternalSource(iModelDb, repositoryC, \"C\");\n\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigSpecifiesRootSources.classFullName, sourceId: syncJob, targetId: modelM });\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelA });\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelB });\n iModelDb.relationships.insertInstance({ classFullName: SynchronizationConfigProcessesSources.classFullName, sourceId: syncJob, targetId: modelC });\n\n const group1 = insertExternalSourceGroup(iModelDb, \"Group1\");\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelA });\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelB });\n iModelDb.relationships.insertInstance({ classFullName: ExternalSourceGroupGroupsSources.classFullName, sourceId: group1, targetId: modelC });\n\n const _attachmentMA = insertExternalSourceAttachment(iModelDb, modelM, modelA, \"A\");\n const _attachmentMB = insertExternalSourceAttachment(iModelDb, modelM, modelB, \"B\");\n const _attachmentAC = insertExternalSourceAttachment(iModelDb, modelA, modelC, \"C\");\n const _attachmentBC = insertExternalSourceAttachment(iModelDb, modelB, modelC, \"C\");\n\n iModelDb.saveChanges();\n iModelDb.close();\n });\n\n function insertSynchronizationConfigLink(iModelDb: IModelDb, name: string): Id64String {\n const configProps: SynchronizationConfigLinkProps = {\n classFullName: SynchronizationConfigLink.classFullName,\n model: IModel.repositoryModelId,\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, name),\n };\n return iModelDb.elements.insertElement(configProps);\n }\n\n function insertFolderLink(iModelDb: IModelDb, codeValue: string, url: string): Id64String {\n const folderLinkProps: RepositoryLinkProps = {\n classFullName: FolderLink.classFullName,\n model: IModel.repositoryModelId,\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),\n url,\n };\n return iModelDb.elements.insertElement(folderLinkProps);\n }\n\n function insertRepositoryLink(iModelDb: IModelDb, folderId: Id64String, codeValue: string, url: string, format: string): Id64String {\n const repositoryLinkProps: RepositoryLinkProps = {\n classFullName: RepositoryLink.classFullName,\n model: IModel.repositoryModelId,\n parent: new FolderContainsRepositories(folderId),\n code: LinkElement.createCode(iModelDb, IModel.repositoryModelId, codeValue),\n url,\n format,\n };\n return iModelDb.elements.insertElement(repositoryLinkProps);\n }\n\n function insertExternalSource(iModelDb: IModelDb, repository: Id64String, userLabel: string): Id64String {\n const externalSourceProps: ExternalSourceProps = {\n classFullName: ExternalSource.classFullName,\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n userLabel,\n repository: new ExternalSourceIsInRepository(repository),\n connectorName: \"Connector\",\n connectorVersion: \"0.0.1\",\n };\n return iModelDb.elements.insertElement(externalSourceProps);\n }\n\n function insertExternalSourceAttachment(iModelDb: IModelDb, masterModel: Id64String, attachedModel: Id64String, label: string): Id64String {\n const attachmentProps: ExternalSourceAttachmentProps = {\n classFullName: ExternalSource.classFullName,\n model: IModel.repositoryModelId,\n parent: new ExternalSourceOwnsAttachments(masterModel),\n code: Code.createEmpty(),\n userLabel: label,\n attaches: new ExternalSourceAttachmentAttachesSource(attachedModel),\n };\n return iModelDb.elements.insertElement(attachmentProps);\n }\n\n function insertExternalSourceGroup(iModelDb: IModelDb, userLabel: string): Id64String {\n const groupProps: ExternalSourceProps = {\n classFullName: ExternalSourceGroup.classFullName,\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n userLabel,\n repository: undefined,\n connectorName: \"Connector\",\n connectorVersion: \"0.0.1\",\n };\n return iModelDb.elements.insertElement(groupProps);\n }\n});\n"]}
|