@itwin/core-backend 5.9.0-dev.8 → 5.9.0-dev.9
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.d.ts +38 -0
- package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
- 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/ECSqlRowExecutor.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/EditTxn.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 +9 -9
- 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.d.ts.map +1 -1
- package/lib/cjs/IpcHost.js +13 -4
- 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.d.ts +85 -1
- package/lib/cjs/LockControl.d.ts.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.d.ts +100 -4
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +171 -8
- 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.d.ts +2 -0
- package/lib/cjs/internal/HubMock.d.ts.map +1 -1
- package/lib/cjs/internal/HubMock.js +7 -0
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.d.ts.map +1 -1
- package/lib/cjs/internal/NoLocks.js +6 -0
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.d.ts +12 -0
- package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js +285 -4
- 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/SettingsEditorImpl.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/SettingsDb.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.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.d.ts +38 -0
- package/lib/esm/BackendHubAccess.d.ts.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/ECSqlRowExecutor.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/EditTxn.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 +9 -9
- 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.d.ts.map +1 -1
- package/lib/esm/IpcHost.js +13 -4
- 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.d.ts +85 -1
- package/lib/esm/LockControl.d.ts.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.d.ts +100 -4
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +171 -8
- 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.d.ts +2 -0
- package/lib/esm/internal/HubMock.d.ts.map +1 -1
- package/lib/esm/internal/HubMock.js +7 -0
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.d.ts.map +1 -1
- package/lib/esm/internal/NoLocks.js +6 -0
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.d.ts +12 -0
- package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js +286 -5
- 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/SettingsEditorImpl.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/SquashSchemaAndDataChanges.test.js +129 -129
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestEditTxn.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 +19 -19
- 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 +4 -4
- package/lib/esm/test/ecdb/ECSqlQuery.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/ECSqlSyncReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
- package/lib/esm/test/ecdb/QueryReaders.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 +56 -56
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
- package/lib/esm/test/hubaccess/SemanticRebase.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 +13 -13
- 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/TestContext.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 +9 -9
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
- package/lib/esm/test/schema/SchemaImportCallbacks.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 +135 -135
- 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/EditTxn.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/ITwinWorkspace.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.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 +907 -3
- 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/StandaloneDb.test.js +20 -20
- package/lib/esm/test/standalone/StandaloneDb.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/test/standalone/iModelDb.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.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 +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergeConflict.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/MergeConflict.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 { GuidString, Id64String } from \"@itwin/core-bentley\";\r\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\r\nimport {\r\n ElementAspectProps,\r\n IModel,\r\n SubCategoryAppearance,\r\n} from \"@itwin/core-common\";\r\nimport * as chai from \"chai\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { HubWrappers, KnownTestLocations } from \"../\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport {\r\n BriefcaseDb,\r\n ChannelControl,\r\n DictionaryModel,\r\n ExternalSourceAspect,\r\n SpatialCategory,\r\n SqliteChangeOp,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\r\nimport { RebaseChangesetConflictArgs, SqliteConflictCause } from \"../../internal/ChangesetConflictArgs\";\r\nchai.use(chaiAsPromised);\r\nimport * as sinon from \"sinon\";\r\n\r\nexport async function createNewModelAndCategory(txn: EditTxn, parent?: Id64String) {\r\n const rwIModel = txn.iModel as BriefcaseDb;\r\n // Create a new physical model.\r\n const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(txn, IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"), true, parent);\r\n\r\n // Find or create a SpatialCategory.\r\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);\r\n const spatialCategoryId = txn.insertElement(category.toJSON());\r\n category.setDefaultAppearance(txn, new SubCategoryAppearance({ color: 0xff0000 }));\r\n\r\n return { modelId, spatialCategoryId };\r\n}\r\n\r\nasync function assertThrowsAsync<T>(test: () => Promise<T>, msg?: string) {\r\n try {\r\n await test();\r\n } catch (e) {\r\n if (e instanceof Error && msg) {\r\n assert.equal(e.message, msg);\r\n }\r\n return;\r\n }\r\n throw new Error(`Failed to throw error with message: \"${msg}\"`);\r\n}\r\n\r\ndescribe.skip(\"Merge conflict & locking\", () => { // ###TODO FLAKY https://github.com/iTwin/itwinjs-core/issues/7730\r\n let iTwinId: GuidString;\r\n\r\n before(() => {\r\n HubMock.startup(\"MergeConflictTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n after(() => HubMock.shutdown());\r\n\r\n it(\"pull/merge causing update conflict - dirty read/modify (with no lock)\", async () => {\r\n /**\r\n * To simulate a a data conflict for dirty read we update same aspect from two different briefcases\r\n * and when the second briefcase try to push its changes it will fail with following error.\r\n * \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\"\r\n */\r\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\r\n\r\n // Delete any existing iModels with the same name as the read-write test iModel\r\n const iModelName = \"TestIModel\";\r\n\r\n // Create a new empty iModel on the Hub & obtain a briefcase\r\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // to reproduce the issue we will disable locks altogether.\r\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId, noLock: true });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId, noLock: true });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId, noLock: true });\r\n const b1Txn = new EditTxn(b1, \"merge conflict\");\r\n b1Txn.start();\r\n const b2Txn = new EditTxn(b2, \"merge conflict\");\r\n b2Txn.start();\r\n\r\n // create and insert a new model with code1\r\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\r\n b1Txn,\r\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\r\n true);\r\n\r\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n\r\n const spatialCategoryId = SpatialCategory.insert(\r\n b1Txn,\r\n dictionary.id,\r\n newCategoryCode.value,\r\n new SubCategoryAppearance({ color: 0xff0000 }),\r\n );\r\n\r\n // insert element and aspect\r\n const el1 = b1Txn.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\r\n await b1.pullChanges();\r\n const aspectId1 = b1Txn.insertAspect({\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier\",\r\n } as ElementAspectProps);\r\n b1Txn.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` });\r\n\r\n // b1 same as b2 and now both will modify same aspect\r\n await b2.pullChanges();\r\n\r\n // b1 will change identifier from \"test identifier\" to \"test identifier (modified by b1)\"\r\n b1Txn.updateAspect({\r\n id: aspectId1,\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier (modified by b1)\",\r\n } as ElementAspectProps);\r\n b1Txn.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `modify aspect ${aspectId1} with no lock` });\r\n\r\n // b2 will change identifier from \"test identifier\" to \"test identifier (modified by b2)\"\r\n b2Txn.updateAspect({\r\n id: aspectId1,\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier (modified by b2)\",\r\n } as ElementAspectProps);\r\n b2Txn.saveChanges();\r\n\r\n const conflicts: {\r\n cause: SqliteConflictCause,\r\n tableName: string,\r\n opcode?: SqliteChangeOp,\r\n id: Id64String,\r\n }[] = [];\r\n\r\n // we will not handle conflict and let the default conflict handler deal with it.\r\n b2.txns.rebaser.addConflictHandler({\r\n id: \"custom\", handler: (arg: RebaseChangesetConflictArgs) => {\r\n conflicts.push({\r\n cause: arg.cause,\r\n tableName: arg.tableName,\r\n opcode: arg.opcode,\r\n id: arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String,\r\n });\r\n return undefined;\r\n }\r\n });\r\n\r\n await b2.pushChanges({ accessToken: accessToken1, description: `modify aspect ${aspectId1} with no lock` });\r\n\r\n expect(conflicts.length).to.be.equals(3);\r\n\r\n chai.expect(\r\n [\r\n {\r\n \"cause\": \"Data\",\r\n \"tableName\": \"bis_Element\",\r\n \"opcode\": \"Updated\",\r\n \"id\": \"0x20000000004\"\r\n },\r\n {\r\n \"cause\": \"Data\",\r\n \"tableName\": \"bis_ElementMultiAspect\",\r\n \"opcode\": \"Updated\",\r\n \"id\": \"0x20000000001\"\r\n },\r\n {\r\n \"cause\": \"Data\",\r\n \"tableName\": \"bis_Model\",\r\n \"opcode\": \"Updated\",\r\n \"id\": \"0x20000000001\"\r\n }\r\n ]).to.be.deep.equals(conflicts);\r\n\r\n await b3.pullChanges();\r\n await b1.pullChanges();\r\n\r\n // b2 win as default conflict handler choose Replace to override local changes over master.\r\n (b2.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\r\n (b3.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\r\n (b1.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\r\n\r\n b1.close();\r\n b2.close();\r\n b3.close();\r\n });\r\n it(\"pull/merge causing update conflict - update causing local changes (with no lock)\", async () => {\r\n /**\r\n * To simulate a a data conflict for dirty read we update same aspect from two different briefcases\r\n * and when the second briefcase try to push its changes it will fail with following error.\r\n * \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\"\r\n */\r\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\r\n\r\n // Delete any existing iModels with the same name as the read-write test iModel\r\n const iModelName = \"TestIModel\";\r\n\r\n // Create a new empty iModel on the Hub & obtain a briefcase\r\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // to reproduce the issue we will disable locks altogether.\r\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId, noLock: true });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId, noLock: true });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId, noLock: true });\r\n const b1Txn = new EditTxn(b1, \"merge conflict\");\r\n b1Txn.start();\r\n const b2Txn = new EditTxn(b2, \"merge conflict\");\r\n b2Txn.start();\r\n\r\n // create and insert a new model with code1\r\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\r\n b1Txn,\r\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\r\n true);\r\n\r\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n\r\n const spatialCategoryId = SpatialCategory.insert(\r\n b1Txn,\r\n dictionary.id,\r\n newCategoryCode.value,\r\n new SubCategoryAppearance({ color: 0xff0000 }),\r\n );\r\n\r\n // insert element and aspect\r\n const el1 = b1Txn.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\r\n b1Txn.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` });\r\n\r\n await b2.pullChanges();\r\n const aspectId1 = b2Txn.insertAspect({\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier\",\r\n } as ElementAspectProps);\r\n b2Txn.saveChanges();\r\n\r\n b1Txn.deleteElement(el1);\r\n b1Txn.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `deleted element ${el1}` });\r\n\r\n const conflicts: {\r\n cause: SqliteConflictCause,\r\n tableName: string,\r\n opcode?: SqliteChangeOp,\r\n id: Id64String | undefined,\r\n }[] = [];\r\n\r\n // we will not handle conflict and let the default conflict handler deal with it.\r\n b2.txns.rebaser.addConflictHandler({\r\n id: \"custom\", handler: (arg: RebaseChangesetConflictArgs) => {\r\n let id;\r\n if (arg.cause !== \"ForeignKey\") {\r\n id = arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String;\r\n }\r\n conflicts.push({\r\n cause: arg.cause,\r\n tableName: arg.tableName,\r\n opcode: arg.opcode,\r\n id,\r\n });\r\n return undefined;\r\n }\r\n });\r\n\r\n\r\n await assertThrowsAsync(\r\n async () => b2.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` }),\r\n \"Foreign key conflicts in ChangeSet. Aborting rebase.\");\r\n\r\n expect(conflicts.length).to.be.equals(3);\r\n expect(conflicts).to.deep.equal([\r\n {\r\n cause: \"NotFound\",\r\n tableName: \"bis_Element\",\r\n opcode: \"Updated\",\r\n id: \"0x20000000004\"\r\n },\r\n {\r\n cause: \"Data\",\r\n tableName: \"bis_Model\",\r\n opcode: \"Updated\",\r\n id: \"0x20000000001\"\r\n },\r\n {\r\n cause: \"ForeignKey\",\r\n tableName: \"\",\r\n opcode: undefined,\r\n id: undefined\r\n }\r\n ]);\r\n\r\n b2.txns.rebaser.addConflictHandler({\r\n id: \"delete_aspect_when_element_is_deleted\", handler: (arg: RebaseChangesetConflictArgs) => {\r\n if (arg.cause === \"NotFound\" && arg.tableName === \"bis_Element\") {\r\n // if element does not exist any more let delete the aspects as well.\r\n const elId = arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String;\r\n withEditTxn(b2, (txn) => {\r\n b2.elements.getAspects(elId).forEach((aspect) => {\r\n txn.deleteAspect(aspect.id);\r\n });\r\n });\r\n }\r\n return undefined;\r\n }\r\n });\r\n\r\n b2Txn.saveChanges();\r\n conflicts.length = 0;\r\n\r\n await b2.pushChanges({ accessToken: accessToken1, description: `nothing is pushed as the only change we made is reverted` });\r\n await b3.pullChanges();\r\n await b1.pullChanges();\r\n\r\n expect(() => b1.elements.getElement(el1)).throws(`Element=${el1}`);\r\n expect(() => b2.elements.getElement(el1)).throws(`Element=${el1}`);\r\n expect(() => b3.elements.getElement(el1)).throws(`Element=${el1}`);\r\n\r\n expect(() => b1.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\r\n expect(() => b2.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\r\n expect(() => b3.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\r\n\r\n b1.close();\r\n b2.close();\r\n b3.close();\r\n });\r\n\r\n it(\"aspect insert, update & delete requires exclusive lock\", async () => {\r\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\r\n\r\n // Delete any existing iModels with the same name as the read-write test iModel\r\n const iModelName = \"TestIModel\";\r\n\r\n // Create a new empty iModel on the Hub & obtain a briefcase\r\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId });\r\n const b1Txn = new EditTxn(b1, \"merge conflict\");\r\n b1Txn.start();\r\n const b2Txn = new EditTxn(b2, \"merge conflict\");\r\n b2Txn.start();\r\n\r\n await b1.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n await b2.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n\r\n // create and insert a new model with code1\r\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\r\n b1Txn,\r\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\r\n true);\r\n\r\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n\r\n await b1.locks.acquireLocks({ shared: dictionary.id });\r\n const spatialCategoryId = SpatialCategory.insert(\r\n b1Txn,\r\n dictionary.id,\r\n newCategoryCode.value,\r\n new SubCategoryAppearance({ color: 0xff0000 }),\r\n );\r\n const el1 = b1Txn.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\r\n b1Txn.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element ${el1}` });\r\n\r\n await b2.pullChanges();\r\n let aspectId: Id64String;\r\n const insertAspectIntoB2 = () => {\r\n aspectId = b2Txn.insertAspect({\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier\",\r\n } as ElementAspectProps);\r\n };\r\n\r\n /* attempt to insert aspect without a lock */\r\n assert.throws(insertAspectIntoB2, \"Error inserting ElementAspect [exclusive lock not held on element for insert aspect (id=0x20000000004)], class: BisCore:ExternalSourceAspect\");\r\n\r\n /* acquire lock and try again */\r\n await b2.locks.acquireLocks({ exclusive: el1 });\r\n insertAspectIntoB2();\r\n\r\n /* b1 cannot acquire lock on el1 as its already taken by b2 */\r\n await expect(b1.locks.acquireLocks({ exclusive: el1 })).to.be.rejectedWith(\"exclusive lock is already held\");\r\n\r\n /* push changes on b2 to release lock on el1 */\r\n b2Txn.saveChanges();\r\n await b2.pushChanges({ accessToken: accessToken2, description: `add aspect to element ${el1}` });\r\n\r\n await b1.pullChanges();\r\n\r\n const updateAspectIntoB1 = () => {\r\n b1Txn.updateAspect({\r\n id: aspectId,\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier (modified)\",\r\n } as ElementAspectProps);\r\n };\r\n\r\n /* attempt to update aspect without a lock */\r\n assert.throws(updateAspectIntoB1, \"Error updating ElementAspect [exclusive lock not held on element for update aspect (id=0x20000000004)], id: 0x30000000001\");\r\n\r\n /* acquire lock and try again */\r\n await b1.locks.acquireLocks({ exclusive: el1 });\r\n updateAspectIntoB1();\r\n\r\n /* delete the element */\r\n b1Txn.deleteElement(el1);\r\n b1Txn.saveChanges();\r\n\r\n await b1.pushChanges({ accessToken: accessToken1, description: `deleted element ${el1}` });\r\n\r\n const onChangesetConflictStub = sinon.stub(BriefcaseDb.prototype, \"onChangesetConflict\" as any);\r\n /* we should be able to apply all changesets */\r\n await b3.pullChanges();\r\n expect(onChangesetConflictStub.callCount).eq(0, \"native conflict handler should not be called BriefcaseDb.onChangesetConflict()\");\r\n onChangesetConflictStub.restore();\r\n b1.close();\r\n b2.close();\r\n b3.close();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"MergeConflict.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/MergeConflict.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 { GuidString, Id64String } from \"@itwin/core-bentley\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport {\n ElementAspectProps,\n IModel,\n SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport { assert, expect } from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { HubWrappers, KnownTestLocations } from \"../\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport {\n BriefcaseDb,\n ChannelControl,\n DictionaryModel,\n ExternalSourceAspect,\n SpatialCategory,\n SqliteChangeOp,\n} from \"../../core-backend\";\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\nimport { RebaseChangesetConflictArgs, SqliteConflictCause } from \"../../internal/ChangesetConflictArgs\";\nchai.use(chaiAsPromised);\nimport * as sinon from \"sinon\";\n\nexport async function createNewModelAndCategory(txn: EditTxn, parent?: Id64String) {\n const rwIModel = txn.iModel as BriefcaseDb;\n // Create a new physical model.\n const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(txn, IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"), true, parent);\n\n // Find or create a SpatialCategory.\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);\n const spatialCategoryId = txn.insertElement(category.toJSON());\n category.setDefaultAppearance(txn, new SubCategoryAppearance({ color: 0xff0000 }));\n\n return { modelId, spatialCategoryId };\n}\n\nasync function assertThrowsAsync<T>(test: () => Promise<T>, msg?: string) {\n try {\n await test();\n } catch (e) {\n if (e instanceof Error && msg) {\n assert.equal(e.message, msg);\n }\n return;\n }\n throw new Error(`Failed to throw error with message: \"${msg}\"`);\n}\n\ndescribe.skip(\"Merge conflict & locking\", () => { // ###TODO FLAKY https://github.com/iTwin/itwinjs-core/issues/7730\n let iTwinId: GuidString;\n\n before(() => {\n HubMock.startup(\"MergeConflictTest\", KnownTestLocations.outputDir);\n iTwinId = HubMock.iTwinId;\n });\n after(() => HubMock.shutdown());\n\n it(\"pull/merge causing update conflict - dirty read/modify (with no lock)\", async () => {\n /**\n * To simulate a a data conflict for dirty read we update same aspect from two different briefcases\n * and when the second briefcase try to push its changes it will fail with following error.\n * \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\"\n */\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\n\n // Delete any existing iModels with the same name as the read-write test iModel\n const iModelName = \"TestIModel\";\n\n // Create a new empty iModel on the Hub & obtain a briefcase\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\n assert.isNotEmpty(rwIModelId);\n\n // to reproduce the issue we will disable locks altogether.\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId, noLock: true });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId, noLock: true });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId, noLock: true });\n const b1Txn = new EditTxn(b1, \"merge conflict\");\n b1Txn.start();\n const b2Txn = new EditTxn(b2, \"merge conflict\");\n b2Txn.start();\n\n // create and insert a new model with code1\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\n b1Txn,\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\n true);\n\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n\n const spatialCategoryId = SpatialCategory.insert(\n b1Txn,\n dictionary.id,\n newCategoryCode.value,\n new SubCategoryAppearance({ color: 0xff0000 }),\n );\n\n // insert element and aspect\n const el1 = b1Txn.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\n await b1.pullChanges();\n const aspectId1 = b1Txn.insertAspect({\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier\",\n } as ElementAspectProps);\n b1Txn.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` });\n\n // b1 same as b2 and now both will modify same aspect\n await b2.pullChanges();\n\n // b1 will change identifier from \"test identifier\" to \"test identifier (modified by b1)\"\n b1Txn.updateAspect({\n id: aspectId1,\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier (modified by b1)\",\n } as ElementAspectProps);\n b1Txn.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `modify aspect ${aspectId1} with no lock` });\n\n // b2 will change identifier from \"test identifier\" to \"test identifier (modified by b2)\"\n b2Txn.updateAspect({\n id: aspectId1,\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier (modified by b2)\",\n } as ElementAspectProps);\n b2Txn.saveChanges();\n\n const conflicts: {\n cause: SqliteConflictCause,\n tableName: string,\n opcode?: SqliteChangeOp,\n id: Id64String,\n }[] = [];\n\n // we will not handle conflict and let the default conflict handler deal with it.\n b2.txns.rebaser.addConflictHandler({\n id: \"custom\", handler: (arg: RebaseChangesetConflictArgs) => {\n conflicts.push({\n cause: arg.cause,\n tableName: arg.tableName,\n opcode: arg.opcode,\n id: arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String,\n });\n return undefined;\n }\n });\n\n await b2.pushChanges({ accessToken: accessToken1, description: `modify aspect ${aspectId1} with no lock` });\n\n expect(conflicts.length).to.be.equals(3);\n\n chai.expect(\n [\n {\n \"cause\": \"Data\",\n \"tableName\": \"bis_Element\",\n \"opcode\": \"Updated\",\n \"id\": \"0x20000000004\"\n },\n {\n \"cause\": \"Data\",\n \"tableName\": \"bis_ElementMultiAspect\",\n \"opcode\": \"Updated\",\n \"id\": \"0x20000000001\"\n },\n {\n \"cause\": \"Data\",\n \"tableName\": \"bis_Model\",\n \"opcode\": \"Updated\",\n \"id\": \"0x20000000001\"\n }\n ]).to.be.deep.equals(conflicts);\n\n await b3.pullChanges();\n await b1.pullChanges();\n\n // b2 win as default conflict handler choose Replace to override local changes over master.\n (b2.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\n (b3.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\n (b1.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\n\n b1.close();\n b2.close();\n b3.close();\n });\n it(\"pull/merge causing update conflict - update causing local changes (with no lock)\", async () => {\n /**\n * To simulate a a data conflict for dirty read we update same aspect from two different briefcases\n * and when the second briefcase try to push its changes it will fail with following error.\n * \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\"\n */\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\n\n // Delete any existing iModels with the same name as the read-write test iModel\n const iModelName = \"TestIModel\";\n\n // Create a new empty iModel on the Hub & obtain a briefcase\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\n assert.isNotEmpty(rwIModelId);\n\n // to reproduce the issue we will disable locks altogether.\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId, noLock: true });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId, noLock: true });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId, noLock: true });\n const b1Txn = new EditTxn(b1, \"merge conflict\");\n b1Txn.start();\n const b2Txn = new EditTxn(b2, \"merge conflict\");\n b2Txn.start();\n\n // create and insert a new model with code1\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\n b1Txn,\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\n true);\n\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n\n const spatialCategoryId = SpatialCategory.insert(\n b1Txn,\n dictionary.id,\n newCategoryCode.value,\n new SubCategoryAppearance({ color: 0xff0000 }),\n );\n\n // insert element and aspect\n const el1 = b1Txn.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\n b1Txn.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` });\n\n await b2.pullChanges();\n const aspectId1 = b2Txn.insertAspect({\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier\",\n } as ElementAspectProps);\n b2Txn.saveChanges();\n\n b1Txn.deleteElement(el1);\n b1Txn.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `deleted element ${el1}` });\n\n const conflicts: {\n cause: SqliteConflictCause,\n tableName: string,\n opcode?: SqliteChangeOp,\n id: Id64String | undefined,\n }[] = [];\n\n // we will not handle conflict and let the default conflict handler deal with it.\n b2.txns.rebaser.addConflictHandler({\n id: \"custom\", handler: (arg: RebaseChangesetConflictArgs) => {\n let id;\n if (arg.cause !== \"ForeignKey\") {\n id = arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String;\n }\n conflicts.push({\n cause: arg.cause,\n tableName: arg.tableName,\n opcode: arg.opcode,\n id,\n });\n return undefined;\n }\n });\n\n\n await assertThrowsAsync(\n async () => b2.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` }),\n \"Foreign key conflicts in ChangeSet. Aborting rebase.\");\n\n expect(conflicts.length).to.be.equals(3);\n expect(conflicts).to.deep.equal([\n {\n cause: \"NotFound\",\n tableName: \"bis_Element\",\n opcode: \"Updated\",\n id: \"0x20000000004\"\n },\n {\n cause: \"Data\",\n tableName: \"bis_Model\",\n opcode: \"Updated\",\n id: \"0x20000000001\"\n },\n {\n cause: \"ForeignKey\",\n tableName: \"\",\n opcode: undefined,\n id: undefined\n }\n ]);\n\n b2.txns.rebaser.addConflictHandler({\n id: \"delete_aspect_when_element_is_deleted\", handler: (arg: RebaseChangesetConflictArgs) => {\n if (arg.cause === \"NotFound\" && arg.tableName === \"bis_Element\") {\n // if element does not exist any more let delete the aspects as well.\n const elId = arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String;\n withEditTxn(b2, (txn) => {\n b2.elements.getAspects(elId).forEach((aspect) => {\n txn.deleteAspect(aspect.id);\n });\n });\n }\n return undefined;\n }\n });\n\n b2Txn.saveChanges();\n conflicts.length = 0;\n\n await b2.pushChanges({ accessToken: accessToken1, description: `nothing is pushed as the only change we made is reverted` });\n await b3.pullChanges();\n await b1.pullChanges();\n\n expect(() => b1.elements.getElement(el1)).throws(`Element=${el1}`);\n expect(() => b2.elements.getElement(el1)).throws(`Element=${el1}`);\n expect(() => b3.elements.getElement(el1)).throws(`Element=${el1}`);\n\n expect(() => b1.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\n expect(() => b2.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\n expect(() => b3.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\n\n b1.close();\n b2.close();\n b3.close();\n });\n\n it(\"aspect insert, update & delete requires exclusive lock\", async () => {\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\n\n // Delete any existing iModels with the same name as the read-write test iModel\n const iModelName = \"TestIModel\";\n\n // Create a new empty iModel on the Hub & obtain a briefcase\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\n assert.isNotEmpty(rwIModelId);\n\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId });\n const b1Txn = new EditTxn(b1, \"merge conflict\");\n b1Txn.start();\n const b2Txn = new EditTxn(b2, \"merge conflict\");\n b2Txn.start();\n\n await b1.locks.acquireLocks({ shared: IModel.repositoryModelId });\n await b2.locks.acquireLocks({ shared: IModel.repositoryModelId });\n\n // create and insert a new model with code1\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\n b1Txn,\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\n true);\n\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n\n await b1.locks.acquireLocks({ shared: dictionary.id });\n const spatialCategoryId = SpatialCategory.insert(\n b1Txn,\n dictionary.id,\n newCategoryCode.value,\n new SubCategoryAppearance({ color: 0xff0000 }),\n );\n const el1 = b1Txn.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\n b1Txn.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element ${el1}` });\n\n await b2.pullChanges();\n let aspectId: Id64String;\n const insertAspectIntoB2 = () => {\n aspectId = b2Txn.insertAspect({\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier\",\n } as ElementAspectProps);\n };\n\n /* attempt to insert aspect without a lock */\n assert.throws(insertAspectIntoB2, \"Error inserting ElementAspect [exclusive lock not held on element for insert aspect (id=0x20000000004)], class: BisCore:ExternalSourceAspect\");\n\n /* acquire lock and try again */\n await b2.locks.acquireLocks({ exclusive: el1 });\n insertAspectIntoB2();\n\n /* b1 cannot acquire lock on el1 as its already taken by b2 */\n await expect(b1.locks.acquireLocks({ exclusive: el1 })).to.be.rejectedWith(\"exclusive lock is already held\");\n\n /* push changes on b2 to release lock on el1 */\n b2Txn.saveChanges();\n await b2.pushChanges({ accessToken: accessToken2, description: `add aspect to element ${el1}` });\n\n await b1.pullChanges();\n\n const updateAspectIntoB1 = () => {\n b1Txn.updateAspect({\n id: aspectId,\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier (modified)\",\n } as ElementAspectProps);\n };\n\n /* attempt to update aspect without a lock */\n assert.throws(updateAspectIntoB1, \"Error updating ElementAspect [exclusive lock not held on element for update aspect (id=0x20000000004)], id: 0x30000000001\");\n\n /* acquire lock and try again */\n await b1.locks.acquireLocks({ exclusive: el1 });\n updateAspectIntoB1();\n\n /* delete the element */\n b1Txn.deleteElement(el1);\n b1Txn.saveChanges();\n\n await b1.pushChanges({ accessToken: accessToken1, description: `deleted element ${el1}` });\n\n const onChangesetConflictStub = sinon.stub(BriefcaseDb.prototype, \"onChangesetConflict\" as any);\n /* we should be able to apply all changesets */\n await b3.pullChanges();\n expect(onChangesetConflictStub.callCount).eq(0, \"native conflict handler should not be called BriefcaseDb.onChangesetConflict()\");\n onChangesetConflictStub.restore();\n b1.close();\n b2.close();\n b3.close();\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeAppStorage.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/NativeAppStorage.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\nimport { assert, expect } from \"chai\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { NativeHost } from \"../../NativeHost\";\r\nimport { NativeAppStorage } from \"../../NativeAppStorage\";\r\n\r\ndescribe(\"NativeApp storage backend\", () => {\r\n before(async () => {\r\n IModelJsFs.purgeDirSync(NativeHost.appSettingsCacheDir);\r\n });\r\n\r\n it(\"should persistence primitive type values\", () => {\r\n const test1 = NativeAppStorage.open(\"backend_test_1\");\r\n test1.removeAll();\r\n const dataset = [\r\n { key: \"a\", value: 100 },\r\n { key: \"b\", value: 11.22 },\r\n { key: \"c\", value: \"Hello World\" },\r\n { key: \"d\", value: Uint8Array.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) },\r\n { key: \"e\", value: undefined },\r\n ];\r\n\r\n for (const item of dataset) {\r\n test1.setData(item.key, item.value);\r\n if (item.value instanceof Uint8Array) {\r\n assert.equal((test1.getData(item.key) as Uint8Array).length, item.value.length);\r\n } else {\r\n assert.equal(test1.getData(item.key), item.value, `${item.key} -> ${item.value} <> ${String(test1.getData(item.key))}`);\r\n }\r\n }\r\n assert.equal(test1.getKeys().length, dataset.length, \"Number keys must match\");\r\n\r\n // Close storage show now all function to throw exception\r\n test1.close();\r\n assert.throw(() => test1.close());\r\n assert.throw(() => test1.setData(\"t\", \"\"));\r\n assert.throw(() => test1.getData(\"t\"));\r\n assert.throw(() => test1.removeData(\"t\"));\r\n\r\n // Reopen it.\r\n const test2 = NativeAppStorage.open(\"backend_test_1\");\r\n\r\n // reopen and test it\r\n for (const item of dataset) {\r\n test2.setData(item.key, item.value);\r\n if (item.value instanceof Uint8Array) {\r\n assert.equal((test2.getData(item.key) as Uint8Array).length, item.value.length);\r\n } else {\r\n assert.equal(test2.getData(item.key), item.value, `${item.key} -> ${item.value} <> ${String(test2.getData(item.key))}`);\r\n }\r\n }\r\n\r\n const test3 = NativeAppStorage.open(\"backend_test_1\");\r\n // return same storage if it was previously opened\r\n assert.equal(test3, test2);\r\n test2.close(true);\r\n assert.throw(() => test3.close());\r\n });\r\n\r\n it(\"should override and type check\", () => {\r\n const test1 = NativeAppStorage.open(\"backend_test_2\");\r\n test1.removeAll();\r\n test1.setData(\"key1\", undefined);\r\n assert.isUndefined(test1.getData(\"key1\"));\r\n assert.isTrue(test1.hasNullValue(\"key1\"));\r\n\r\n test1.setData(\"key1\", 2222);\r\n assert.isNumber(test1.getData(\"key1\"));\r\n assert.equal(test1.getValueType(\"key1\"), \"number\");\r\n assert.equal(test1.getData(\"key1\"), 2222);\r\n assert.equal(test1.getNumber(\"key1\"), 2222);\r\n assert.equal(test1.getString(\"key1\"), undefined);\r\n assert.equal(test1.getUint8Array(\"key1\"), undefined);\r\n assert.equal(test1.getBoolean(\"key1\"), undefined);\r\n\r\n test1.setData(\"key1\", \"Hello, World\");\r\n assert.isString(test1.getData(\"key1\"));\r\n assert.equal(test1.getData(\"key1\"), \"Hello, World\");\r\n assert.equal(test1.getString(\"key1\"), \"Hello, World\");\r\n assert.equal(test1.getUint8Array(\"key1\"), undefined);\r\n assert.equal(test1.getBoolean(\"key1\"), undefined);\r\n assert.equal(test1.getNumber(\"key1\"), undefined);\r\n\r\n test1.setData(\"key1\", true);\r\n assert.isBoolean(test1.getData(\"key1\"));\r\n assert.equal(test1.getData(\"key1\"), true);\r\n assert.equal(test1.getBoolean(\"key1\"), true);\r\n assert.equal(test1.getString(\"key1\"), undefined);\r\n assert.equal(test1.getUint8Array(\"key1\"), undefined);\r\n assert.equal(test1.getNumber(\"key1\"), undefined);\r\n\r\n test1.setData(\"key1\", false);\r\n assert.isBoolean(test1.getData(\"key1\"));\r\n assert.equal(test1.getData(\"key1\"), false);\r\n assert.equal(test1.getBoolean(\"key1\"), false);\r\n\r\n const testArray = new Uint8Array([1, 2, 3, 4, 5]);\r\n test1.setData(\"key1\", testArray);\r\n assert.isTrue(test1.getData(\"key1\") instanceof Uint8Array);\r\n assert.equal(test1.getUint8Array(\"key1\")!.length, testArray.length);\r\n assert.equal(test1.getBoolean(\"key1\"), undefined);\r\n assert.equal(test1.getString(\"key1\"), undefined);\r\n assert.equal(test1.getNumber(\"key1\"), undefined);\r\n test1.removeAll();\r\n assert.isFalse(test1.hasNullValue(\"key1\"));\r\n assert.equal(test1.getKeys().length, 0);\r\n test1.close(true);\r\n });\r\n\r\n it(\"storage open/close\", () => {\r\n const storages: NativeAppStorage[] = [];\r\n for (let i = 0; i < 20; i++) {\r\n storages.push(NativeAppStorage.open(`backend_test_3-${i}`));\r\n }\r\n storages.forEach((storage) => {\r\n storage.setData(\"name\", storage.id);\r\n storage.setData(\"created_on\", Date.now());\r\n });\r\n storages.forEach((storage) => {\r\n storage.close(true);\r\n });\r\n });\r\n\r\n it(\"should not allow null in the name\", async () => {\r\n expect(() => NativeAppStorage.open(\"my-storage\\x00-name\")).to.throw();\r\n });\r\n\r\n it(\"should not allow names which points to the parent directory\", async () => {\r\n expect(() => NativeAppStorage.open(\"dir/../../storage\")).to.throw();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"NativeAppStorage.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/NativeAppStorage.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 { IModelJsFs } from \"../../IModelJsFs\";\nimport { NativeHost } from \"../../NativeHost\";\nimport { NativeAppStorage } from \"../../NativeAppStorage\";\n\ndescribe(\"NativeApp storage backend\", () => {\n before(async () => {\n IModelJsFs.purgeDirSync(NativeHost.appSettingsCacheDir);\n });\n\n it(\"should persistence primitive type values\", () => {\n const test1 = NativeAppStorage.open(\"backend_test_1\");\n test1.removeAll();\n const dataset = [\n { key: \"a\", value: 100 },\n { key: \"b\", value: 11.22 },\n { key: \"c\", value: \"Hello World\" },\n { key: \"d\", value: Uint8Array.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) },\n { key: \"e\", value: undefined },\n ];\n\n for (const item of dataset) {\n test1.setData(item.key, item.value);\n if (item.value instanceof Uint8Array) {\n assert.equal((test1.getData(item.key) as Uint8Array).length, item.value.length);\n } else {\n assert.equal(test1.getData(item.key), item.value, `${item.key} -> ${item.value} <> ${String(test1.getData(item.key))}`);\n }\n }\n assert.equal(test1.getKeys().length, dataset.length, \"Number keys must match\");\n\n // Close storage show now all function to throw exception\n test1.close();\n assert.throw(() => test1.close());\n assert.throw(() => test1.setData(\"t\", \"\"));\n assert.throw(() => test1.getData(\"t\"));\n assert.throw(() => test1.removeData(\"t\"));\n\n // Reopen it.\n const test2 = NativeAppStorage.open(\"backend_test_1\");\n\n // reopen and test it\n for (const item of dataset) {\n test2.setData(item.key, item.value);\n if (item.value instanceof Uint8Array) {\n assert.equal((test2.getData(item.key) as Uint8Array).length, item.value.length);\n } else {\n assert.equal(test2.getData(item.key), item.value, `${item.key} -> ${item.value} <> ${String(test2.getData(item.key))}`);\n }\n }\n\n const test3 = NativeAppStorage.open(\"backend_test_1\");\n // return same storage if it was previously opened\n assert.equal(test3, test2);\n test2.close(true);\n assert.throw(() => test3.close());\n });\n\n it(\"should override and type check\", () => {\n const test1 = NativeAppStorage.open(\"backend_test_2\");\n test1.removeAll();\n test1.setData(\"key1\", undefined);\n assert.isUndefined(test1.getData(\"key1\"));\n assert.isTrue(test1.hasNullValue(\"key1\"));\n\n test1.setData(\"key1\", 2222);\n assert.isNumber(test1.getData(\"key1\"));\n assert.equal(test1.getValueType(\"key1\"), \"number\");\n assert.equal(test1.getData(\"key1\"), 2222);\n assert.equal(test1.getNumber(\"key1\"), 2222);\n assert.equal(test1.getString(\"key1\"), undefined);\n assert.equal(test1.getUint8Array(\"key1\"), undefined);\n assert.equal(test1.getBoolean(\"key1\"), undefined);\n\n test1.setData(\"key1\", \"Hello, World\");\n assert.isString(test1.getData(\"key1\"));\n assert.equal(test1.getData(\"key1\"), \"Hello, World\");\n assert.equal(test1.getString(\"key1\"), \"Hello, World\");\n assert.equal(test1.getUint8Array(\"key1\"), undefined);\n assert.equal(test1.getBoolean(\"key1\"), undefined);\n assert.equal(test1.getNumber(\"key1\"), undefined);\n\n test1.setData(\"key1\", true);\n assert.isBoolean(test1.getData(\"key1\"));\n assert.equal(test1.getData(\"key1\"), true);\n assert.equal(test1.getBoolean(\"key1\"), true);\n assert.equal(test1.getString(\"key1\"), undefined);\n assert.equal(test1.getUint8Array(\"key1\"), undefined);\n assert.equal(test1.getNumber(\"key1\"), undefined);\n\n test1.setData(\"key1\", false);\n assert.isBoolean(test1.getData(\"key1\"));\n assert.equal(test1.getData(\"key1\"), false);\n assert.equal(test1.getBoolean(\"key1\"), false);\n\n const testArray = new Uint8Array([1, 2, 3, 4, 5]);\n test1.setData(\"key1\", testArray);\n assert.isTrue(test1.getData(\"key1\") instanceof Uint8Array);\n assert.equal(test1.getUint8Array(\"key1\")!.length, testArray.length);\n assert.equal(test1.getBoolean(\"key1\"), undefined);\n assert.equal(test1.getString(\"key1\"), undefined);\n assert.equal(test1.getNumber(\"key1\"), undefined);\n test1.removeAll();\n assert.isFalse(test1.hasNullValue(\"key1\"));\n assert.equal(test1.getKeys().length, 0);\n test1.close(true);\n });\n\n it(\"storage open/close\", () => {\n const storages: NativeAppStorage[] = [];\n for (let i = 0; i < 20; i++) {\n storages.push(NativeAppStorage.open(`backend_test_3-${i}`));\n }\n storages.forEach((storage) => {\n storage.setData(\"name\", storage.id);\n storage.setData(\"created_on\", Date.now());\n });\n storages.forEach((storage) => {\n storage.close(true);\n });\n });\n\n it(\"should not allow null in the name\", async () => {\n expect(() => NativeAppStorage.open(\"my-storage\\x00-name\")).to.throw();\n });\n\n it(\"should not allow names which points to the parent directory\", async () => {\n expect(() => NativeAppStorage.open(\"dir/../../storage\")).to.throw();\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderMaterialElement.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/RenderMaterialElement.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAgI,MAAM,oBAAoB,CAAC;AAC7L,OAAO,EAAE,cAAc,EAA6B,qBAAqB,EAA+B,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACxJ,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,SAAS,eAAe,CAAC,UAAoC;IAC3D,MAAM,KAAK,GAAG,UAAiB,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;YAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAU,CAAC;IACnC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS;oBAC3B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,UAAoC;IAC3D,MAAM,QAAQ,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,CAAU,CAAC;IAC1I,KAAK,MAAM,OAAO,IAAI,QAAQ;QAC5B,IAAI,SAAS,KAAK,UAAU,CAAC,OAAO,CAAC;YACnC,UAAU,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IAEhC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,MAAkB,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;QACnF,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;QACnG,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAE5B,SAAS,IAAI,CAAC,MAAwD,EAAE,QAAmC;QACzG,MAAM,IAAI,GAAG,WAAW,EAAE,cAAc,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,SAAS,CAAC;QAC9B,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAClI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAExC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAwB,EAAE,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAChF,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,cAAe,CAAC,cAAe,CAAC,cAAe,CAAC,CAAC;QAErF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,aAAa;QACpB,kHAAkH;QAClH,sDAAsD;QACtD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC;YAC7B,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG;YACxG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;YACpH,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACjH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAC3H,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;SAC1C,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,UAAU,EAAE,aAAa,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACtI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,+GAA+G,EAAE,KAAK,IAAI,EAAE;YAC7H,2HAA2H;YAC3H,oLAAoL;YACpL,kHAAkH;YAClH,mHAAmH;YACnH,4HAA4H;YAC5H,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,yCAAyC,CAAC,CAAC;YAEjG,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,EAAc,CAAC;YACnB,4DAA4D;YAC5D,EAAE,CAAC,aAAa,CAAC,6CAA6C,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACrD,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,MAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAwB,EAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACrF,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAChI,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC7H,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC/H,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,yDAAyD;YACzD,MAAM,IAAI,GAAiC;gBACzC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;gBACzB,MAAM,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,wCAAwC;gBACnF,IAAI,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,qDAAqD;gBAC9F,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,kFAAkF;gBAC9H,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;gBACxB,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;gBAC3B,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;gBACzB,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;gBAC1B,iBAAiB,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,sCAAsC;gBACjF,gBAAgB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,gDAAgD;gBACnG,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;gBAClC,aAAa,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,uBAAuB;aAC3D,CAAC;YACT,wDAAwD;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAuD,CAAC;YACnF,MAAM,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,IAAI,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;YAC/G,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;YACnD,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAEnD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YACjC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,oFAAoF;YAEpG,MAAM,GAAG,UAAU,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAEpE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAwB,QAAQ,CAAC,EAAE,CAAC,CAAC;YAE3E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACtF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC5G,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACjH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAChH,MAAM,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,iBAAyB,CAAA,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1H,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/G,MAAM,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,gBAAwB,CAAA,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3G,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAW,CAAA,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,MAAM,GAAqD;gBAC/D,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAChB,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,GAAG;gBACb,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;gBACb,OAAO,EAAE,GAAG;gBACZ,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACxB,CAAC;YAEF,yDAAyD;YACzD,IAAI,CAAC,MAAM,EAAE;gBACX,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;gBACvC,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,aAAa;gBAC5D,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;gBACtC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBAC5C,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACzC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBAC5C,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACzC,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,YAAY;aAC1D,CAAC,CAAC;YAEH,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC5B,yDAAyD;YACzD,IAAI,CAAC,MAAM,EAAE;gBACX,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;gBACvC,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,aAAa;gBAC5D,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;gBACtC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACzC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBAC5C,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACzC,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,YAAY;aAC1D,CAAC,CAAC;YAEH,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC;YACtB,yDAAyD;YACzD,IAAI,CAAC,MAAM,EAAE;gBACX,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;gBACvC,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,aAAa;gBAC5D,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;gBACtC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBAC5C,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACzC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBAC5C,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACzC,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,YAAY;aAC1D,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,UAAU,EAAE;oBACV,SAAS,EAAE,SAAS;iBACrB;aACF,EAAE;gBACD,GAAG,EAAE;oBACH,OAAO,EAAE;wBACP,SAAS,EAAE,SAAS;qBACrB;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,UAAU,GAAoB;gBAClC,SAAS,EAAE,aAAa,EAAE;gBAC1B,aAAa,EAAE,CAAC;gBAChB,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtB,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvB,iBAAiB,EAAE,CAAC;gBACpB,eAAe,EAAE,CAAC;gBAClB,cAAc,EAAE,GAAG;aACpB,CAAC;YAEF,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,UAAU,GAAoB;gBAClC,SAAS,EAAE,aAAa,EAAE;gBAC1B,aAAa,EAAE,CAAC;gBAChB,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtB,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvB,iBAAiB,EAAE,CAAC;gBACpB,eAAe,EAAE,CAAC;gBAClB,cAAc,EAAE,GAAG;gBACnB,sBAAsB,EAAE,IAAI;gBAC5B,+BAA+B,EAAE,KAAK;gBACtC,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;gBACxC,oCAAoC,EAAE,CAAC;gBACvC,oCAAoC,EAAE,GAAG;aAC1C,CAAC;YAEF,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEzC,IAAI,CAAC;gBACH,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBACpC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;aACnC,EAAE;gBACD,GAAG,EAAE;oBACH,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;oBACjC,MAAM,EAAE;wBACN,SAAS,EAAE,QAAQ;qBACpB;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEzC,MAAM,UAAU,GAAoB;gBAClC,SAAS,EAAE,SAAS;gBACpB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtB,cAAc,EAAE,GAAG;aACpB,CAAC;YAEF,MAAM,SAAS,GAAmB;gBAChC,SAAS,EAAE,QAAQ;gBACnB,aAAa,EAAE,GAAG;gBAClB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,GAAG;aACpB,CAAC;YAEF,MAAM,WAAW,GAAuC;gBACtD,aAAa,EAAE,UAAU,CAAC,aAAa;gBACvC,cAAc,EAAE,UAAU,CAAC,cAAc;gBACzC,aAAa,EAAE,SAAS,CAAC,aAAa;gBACtC,YAAY,EAAE,SAAS,CAAC,YAAY;aACrC,CAAC;YAEF,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;gBAC9B,GAAG,EAAE;oBACH,OAAO,EAAE;wBACP,GAAG,WAAW;wBACd,SAAS,EAAE,SAAS;qBACrB;oBACD,MAAM,EAAE;wBACN,GAAG,WAAW;wBACd,SAAS,EAAE,QAAQ;qBACpB;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,SAAS,EAAE;oBACT,SAAS,EAAE,EAAE;oBACb,WAAW,EAAE,CAAC;iBACf;aACF,EAAE;gBACD,GAAG,EAAE;oBACH,MAAM,EAAE;wBACN,WAAW,EAAE,CAAC;wBACd,SAAS,EAAE,EAAE;qBACd;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,GAAG,CAAC;YAClB,IAAI,CAAC;gBACH,SAAS,EAAE;oBACT,SAAS,EAAE,EAAE;oBACb,KAAK;iBACN;aACF,EAAE;gBACD,UAAU,EAAE,GAAG;gBACf,GAAG,EAAE;oBACH,MAAM,EAAE;wBACN,SAAS,EAAE,EAAE;qBACd;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,SAAS,EAAE;oBACT,SAAS,EAAE,EAAE;oBACb,WAAW,EAAE,MAAwB;iBACtC;aACF,EAAE;gBACD,GAAG,EAAE;oBACH,MAAM,EAAE;wBACN,SAAS,EAAE,EAAE;wBACb,WAAW,EAAE,MAAwB;qBACtC;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,SAAS,GAAmB;gBAChC,SAAS,EAAE,aAAa,EAAE;gBAC1B,WAAW,EAAE,CAAC;gBACd,+BAA+B,EAAE,KAAK;gBACtC,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;gBACxC,oCAAoC,EAAE,CAAC;gBACvC,oCAAoC,EAAE,GAAG;aAC1C,CAAC;YACF,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;YAClC,MAAM,gBAAgB,GAAG,UAAU,CAAC;YAEpC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAE7E,MAAM,IAAI,GAAiC;gBACzC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBACjC,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBAChC,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBAC9B,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBACjC,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBAChC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBACnC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBACjC,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBAClC,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBAC3C,gBAAgB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBAC1C,YAAY,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBACtC,CAAC,SAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;gBAC5C,CAAC,gBAAuB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;gBACtD,CAAC,gBAAuB,CAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAC1D,CAAC,aAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;aACzC,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAuD,CAAC;YACnF,MAAM,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,IAAI,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;YAC/G,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;YACnD,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAEnD,MAAM,OAAO,GAAG;gBACd,mBAAmB,EAAE,CAAC,QAAoB,EAAE,EAAE;oBAC5C,MAAM,CAAC,OAAO,QAAQ,EAAE,WAAW,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAClE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,WAAW,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;oBAChE,OAAO,QAAQ,CAAC;gBAClB,CAAC;aACkC,CAAC;YAEtC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;YAEjD,2DAA2D;YAC3D,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAE3E,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACpF,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAChC,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAC/B,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAC7B,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAChC,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAC/B,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAClC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAChC,QAAQ,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBACjC,iBAAiB,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAC1C,gBAAgB,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBACzC,YAAY,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBACrC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAChC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC3C,cAAc,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;gBACvC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;aAC9B,CAAC,CAAC;YAEH,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YACrE,2DAA2D;YAC3D,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAC3E,6CAA6C;YAC7C,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;YACtH,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,IAAW,EAAE,CAAC;YACvE,2DAA2D;YAC3D,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAC3E,6CAA6C;YAC7C,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACnH,CAAC,CAAC,CAAC;IACL,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\n\r\nimport { assert, expect } from \"chai\";\r\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { ImageSourceFormat, IModel, NormalMapFlags, NormalMapProps, RenderMaterialAssetMapsProps, RenderMaterialAssetProps, RenderMaterialProps, TextureMapProps } from \"@itwin/core-common\";\r\nimport { ChannelControl, IModelElementCloneContext, RenderMaterialElement, RenderMaterialElementParams, SnapshotDb, Texture } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\nfunction removeUndefined(assetProps: RenderMaterialAssetProps): RenderMaterialAssetProps {\r\n const input = assetProps as any;\r\n for (const key of Object.keys(input))\r\n if (input[key] === undefined)\r\n delete input[key];\r\n\r\n const maps = assetProps.Map as any;\r\n if (maps) {\r\n for (const mapsKey of Object.keys(maps)) {\r\n const map = maps[mapsKey];\r\n for (const mapKey of Object.keys(map))\r\n if (map[mapKey] === undefined)\r\n delete map[mapKey];\r\n }\r\n }\r\n\r\n return assetProps;\r\n}\r\n\r\nfunction defaultBooleans(assetProps: RenderMaterialAssetProps): RenderMaterialAssetProps {\r\n const boolKeys = [\"HasBaseColor\", \"HasDiffuse\", \"HasFinish\", \"HasReflect\", \"HasReflectColor\", \"HasSpecular\", \"HasSpecularColor\"] as const;\r\n for (const boolKey of boolKeys)\r\n if (undefined === assetProps[boolKey])\r\n assetProps[boolKey] = false;\r\n\r\n return assetProps;\r\n}\r\n\r\ndescribe(\"RenderMaterialElement\", () => {\r\n let imodel: SnapshotDb;\r\n let materialNumber = 0;\r\n let textureNumber = 0;\r\n\r\n before(() => {\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"ExportGraphics\", \"ExportGraphicsTest.bim\");\r\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\r\n });\r\n\r\n after(() => imodel.close());\r\n\r\n function test(params: Omit<RenderMaterialElementParams, \"paletteName\">, expected?: RenderMaterialAssetProps): RenderMaterialElement {\r\n const name = `material${++materialNumber}`;\r\n const paletteName = \"palette\";\r\n const id = withEditTxn(imodel, (txn) => RenderMaterialElement.insert(txn, IModel.dictionaryId, name, { ...params, paletteName }));\r\n expect(Id64.isValidId64(id)).to.be.true;\r\n\r\n const mat = imodel.elements.getElement<RenderMaterialElement>(id);\r\n const json = mat.toJSON();\r\n expect(json.jsonProperties?.materialAssets?.renderMaterial).not.to.be.undefined;\r\n const actual = removeUndefined(json.jsonProperties!.materialAssets!.renderMaterial!);\r\n\r\n if (expected !== undefined) {\r\n expected = defaultBooleans(expected);\r\n expect(actual).to.deep.equal(expected);\r\n }\r\n\r\n return mat;\r\n }\r\n\r\n function insertTexture(): Id64String {\r\n // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in\r\n // bottom right pixel. The rest of the square is red.\r\n const pngData = new Uint8Array([\r\n 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217,\r\n 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252,\r\n 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65,\r\n 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0,\r\n 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,\r\n ]);\r\n\r\n const name = `texture${++textureNumber}`;\r\n const textureId = withEditTxn(imodel, (txn) => Texture.insertTexture(txn, IModel.dictionaryId, name, ImageSourceFormat.Png, pngData));\r\n expect(Id64.isValidId64(textureId)).to.be.true;\r\n return textureId;\r\n }\r\n\r\n describe(\"read\", () => {\r\n it(\"should be able to convert TextureId to hexadecimal string outside javascript's double precision range of 2^53\", async () => {\r\n // LargeNumericRenderMaterialTextureId is a database with a single RenderMaterial whose jsonProperties look something like:\r\n // {\"materialAssets\":{\"renderMaterial\":{\"Map\":{\"Diffuse\":{\"TextureId\":9223372036854775807},\"Bump\":{\"TextureId\":18446744073709551615},\"Finish\":{\"TextureId\":13835058055282163712}}}}}\r\n // 9223372036854775807 is equivalent to 2^63 - 1 which is equivalent to the hexadecimal string 0x7fffffffffffffff.\r\n // 18446744073709551615 is equivalent to 2^64 - 1 which is equivalent to the hexadecimal string 0xffffffffffffffff.\r\n // 13835058055282163712 is equivalent to 2^63 + (2^63 / 2) which is equivalent to the hexadecimal string 0xc000000000000000.\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"LargeNumericRenderMaterialTextureId.bim\");\r\n\r\n const db = SnapshotDb.openFile(seedFileName);\r\n let id: Id64String;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n db.withStatement(`SELECT ECInstanceId from Bis.RenderMaterial`, (stmt) => {\r\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\r\n id = stmt.getRow().id;\r\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_DONE);\r\n });\r\n const renderMatElement = db.elements.getElement<RenderMaterialElement>(id!).toJSON();\r\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Diffuse?.TextureId).to.equal(\"0x7fffffffffffffff\");\r\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Bump?.TextureId).to.equal(\"0xffffffffffffffff\");\r\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Finish?.TextureId).to.equal(\"0xc000000000000000\");\r\n db.close();\r\n });\r\n });\r\n\r\n describe(\"insert\", () => {\r\n it(\"with default values\", () => {\r\n test({}, {});\r\n });\r\n\r\n it(\"should convert TextureIds to hexadecimal string when loading element\", () => {\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n const maps: RenderMaterialAssetMapsProps = {\r\n Pattern: { TextureId: 1 },\r\n Normal: { TextureId: 0x0000bc0000001234 }, // TextureId has a non-zero briefcase Id\r\n Bump: { TextureId: 0x000000123456789a }, // TextureId has non-zero digits in the upper 32 bits\r\n Diffuse: { TextureId: 0x0000bc123456789a }, // TextureId has a non-zero briefcase Id and non-zero digits in the upper 32 bits.\r\n Finish: { TextureId: 5 },\r\n GlowColor: { TextureId: 6 },\r\n Reflect: { TextureId: 7 },\r\n Specular: { TextureId: 8 },\r\n TranslucencyColor: { OtherProp2: \"test\" }, // Should be unchanged, still present.\r\n TransparentColor: { TextureId: 10, OtherProp: 1 }, // OtherProp should be unchanged, still present.\r\n Displacement: { TextureId: \"0x1\" },\r\n OtherProperty: { OtherProperty: \"test\" }, // Should be unchanged.\r\n } as any;\r\n /* eslint-enable @typescript-eslint/naming-convention */\r\n const material = test({});\r\n const jsonProps = material.jsonProperties as RenderMaterialProps[\"jsonProperties\"];\r\n assert(jsonProps?.materialAssets?.renderMaterial && jsonProps.materialAssets.renderMaterial.Map === undefined);\r\n jsonProps.materialAssets.renderMaterial.Map = maps;\r\n withEditTxn(imodel, (txn) => material.update(txn));\r\n\r\n const pathName = imodel.pathName;\r\n imodel.close(); // Need to close so we can load the element back in with strings instead of numbers.\r\n\r\n imodel = SnapshotDb.openForApplyChangesets(pathName);\r\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n const mat = imodel.elements.getElement<RenderMaterialElement>(material.id);\r\n\r\n const props = mat.toJSON();\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map).to.not.be.undefined;\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Pattern?.TextureId).to.equal(\"0x1\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Normal?.TextureId).to.equal(\"0xbc0000001234\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Bump?.TextureId).to.equal(\"0x123456789a\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Diffuse?.TextureId).to.equal(\"0xbc123456789a\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Finish?.TextureId).to.equal(\"0x5\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.GlowColor?.TextureId).to.equal(\"0x6\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Reflect?.TextureId).to.equal(\"0x7\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Specular?.TextureId).to.equal(\"0x8\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TranslucencyColor?.TextureId).to.be.undefined;\r\n expect((props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TranslucencyColor as any).OtherProp2).to.equal(\"test\");\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TransparentColor?.TextureId).to.equal(\"0xa\");\r\n expect((props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TransparentColor as any).OtherProp).to.equal(1);\r\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Displacement?.TextureId).to.equal(\"0x1\");\r\n expect(((props.jsonProperties?.materialAssets?.renderMaterial?.Map as any).OtherProperty).OtherProperty).to.equal(\"test\");\r\n });\r\n\r\n it(\"with custom values\", () => {\r\n const params: Omit<RenderMaterialElementParams, \"paletteName\"> = {\r\n color: [1, 0, 0],\r\n specularColor: [0, 1, 0],\r\n finish: 21,\r\n transmit: 0.5,\r\n diffuse: 0.2,\r\n specular: 0.8,\r\n reflect: 0.5,\r\n reflectColor: [0, 0, 1],\r\n };\r\n\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n test(params, {\r\n HasBaseColor: true, color: params.color,\r\n HasSpecularColor: true, specular_color: params.specularColor,\r\n HasFinish: true, finish: params.finish,\r\n HasTransmit: true, transmit: params.transmit,\r\n HasDiffuse: true, diffuse: params.diffuse,\r\n HasSpecular: true, specular: params.specular,\r\n HasReflect: true, reflect: params.reflect,\r\n HasReflectColor: true, reflect_color: params.reflectColor,\r\n });\r\n\r\n params.transmit = undefined;\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n test(params, {\r\n HasBaseColor: true, color: params.color,\r\n HasSpecularColor: true, specular_color: params.specularColor,\r\n HasFinish: true, finish: params.finish,\r\n HasDiffuse: true, diffuse: params.diffuse,\r\n HasSpecular: true, specular: params.specular,\r\n HasReflect: true, reflect: params.reflect,\r\n HasReflectColor: true, reflect_color: params.reflectColor,\r\n });\r\n\r\n params.transmit = 0.0;\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n test(params, {\r\n HasBaseColor: true, color: params.color,\r\n HasSpecularColor: true, specular_color: params.specularColor,\r\n HasFinish: true, finish: params.finish,\r\n HasTransmit: true, transmit: params.transmit,\r\n HasDiffuse: true, diffuse: params.diffuse,\r\n HasSpecular: true, specular: params.specular,\r\n HasReflect: true, reflect: params.reflect,\r\n HasReflectColor: true, reflect_color: params.reflectColor,\r\n });\r\n });\r\n\r\n it(\"pattern map with default values\", () => {\r\n const textureId = insertTexture();\r\n test({\r\n patternMap: {\r\n TextureId: textureId,\r\n },\r\n }, {\r\n Map: {\r\n Pattern: {\r\n TextureId: textureId,\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"pattern map with custom values\", () => {\r\n const patternMap: TextureMapProps = {\r\n TextureId: insertTexture(),\r\n pattern_angle: 1,\r\n pattern_u_flip: true,\r\n pattern_flip: true,\r\n pattern_scale: [-1, 2],\r\n pattern_offset: [-2, 1],\r\n pattern_scalemode: 3,\r\n pattern_mapping: 4,\r\n pattern_weight: 0.5,\r\n };\r\n\r\n test({ patternMap }, { Map: { Pattern: patternMap } });\r\n });\r\n\r\n it(\"pattern map with constant lod parameters\", () => {\r\n const patternMap: TextureMapProps = {\r\n TextureId: insertTexture(),\r\n pattern_angle: 1,\r\n pattern_u_flip: true,\r\n pattern_flip: true,\r\n pattern_scale: [-1, 2],\r\n pattern_offset: [-2, 1],\r\n pattern_scalemode: 3,\r\n pattern_mapping: 4,\r\n pattern_weight: 0.5,\r\n pattern_useconstantlod: true,\r\n pattern_constantlod_repetitions: 0.333,\r\n pattern_constantlod_offset: [1000, 2000],\r\n pattern_constantlod_mindistanceclamp: 4,\r\n pattern_constantlod_maxdistanceclamp: 256,\r\n };\r\n\r\n test({ patternMap }, { Map: { Pattern: patternMap } });\r\n });\r\n\r\n it(\"normal and pattern maps with default values\", () => {\r\n const normalId = insertTexture();\r\n const patternId = insertTexture();\r\n expect(normalId).not.to.equal(patternId);\r\n\r\n test({\r\n patternMap: { TextureId: patternId },\r\n normalMap: { TextureId: normalId },\r\n }, {\r\n Map: {\r\n Pattern: { TextureId: patternId },\r\n Normal: {\r\n TextureId: normalId,\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"merges mapping params from normal and pattern maps\", () => {\r\n const normalId = insertTexture();\r\n const patternId = insertTexture();\r\n expect(normalId).not.to.equal(patternId);\r\n\r\n const patternMap: TextureMapProps = {\r\n TextureId: patternId,\r\n pattern_scale: [-1, 2],\r\n pattern_weight: 0.5,\r\n };\r\n\r\n const normalMap: NormalMapProps = {\r\n TextureId: normalId,\r\n pattern_angle: 0.8,\r\n pattern_flip: true,\r\n pattern_weight: 1.5,\r\n };\r\n\r\n const sharedProps: Omit<TextureMapProps, \"TextureId\"> = {\r\n pattern_scale: patternMap.pattern_scale,\r\n pattern_weight: patternMap.pattern_weight,\r\n pattern_angle: normalMap.pattern_angle,\r\n pattern_flip: normalMap.pattern_flip,\r\n };\r\n\r\n test({ patternMap, normalMap }, {\r\n Map: {\r\n Pattern: {\r\n ...sharedProps,\r\n TextureId: patternId,\r\n },\r\n Normal: {\r\n ...sharedProps,\r\n TextureId: normalId,\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"normal map with default values\", () => {\r\n const id = insertTexture();\r\n test({ normalMap: { TextureId: id } }, { Map: { Normal: { TextureId: id } } });\r\n });\r\n\r\n it(\"normal map with inverted green channel\", () => {\r\n const id = insertTexture();\r\n test({\r\n normalMap: {\r\n TextureId: id,\r\n NormalFlags: 1,\r\n },\r\n }, {\r\n Map: {\r\n Normal: {\r\n NormalFlags: 1,\r\n TextureId: id,\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"normal map with scale\", () => {\r\n const id = insertTexture();\r\n const scale = 2.5;\r\n test({\r\n normalMap: {\r\n TextureId: id,\r\n scale,\r\n },\r\n }, {\r\n pbr_normal: 2.5,\r\n Map: {\r\n Normal: {\r\n TextureId: id,\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"normal map with flags\", () => {\r\n const id = insertTexture();\r\n test({\r\n normalMap: {\r\n TextureId: id,\r\n NormalFlags: 0xff00 as NormalMapFlags,\r\n },\r\n }, {\r\n Map: {\r\n Normal: {\r\n TextureId: id,\r\n NormalFlags: 0xff00 as NormalMapFlags,\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"normal map with constant lod parameters\", () => {\r\n const normalMap: NormalMapProps = {\r\n TextureId: insertTexture(),\r\n NormalFlags: 2,\r\n pattern_constantlod_repetitions: 0.333,\r\n pattern_constantlod_offset: [1000, 2000],\r\n pattern_constantlod_mindistanceclamp: 4,\r\n pattern_constantlod_maxdistanceclamp: 256,\r\n };\r\n test({ normalMap }, { Map: { Normal: normalMap } });\r\n });\r\n });\r\n\r\n describe(\"clone\", () => {\r\n it(\"clone maps\", async () => {\r\n const textureId = insertTexture();\r\n const unknownTextureId = \"0xffffff\";\r\n\r\n expect(Id64.isValidId64(unknownTextureId)).to.be.true;\r\n expect(imodel.elements.tryGetElementProps(unknownTextureId)).to.be.undefined;\r\n\r\n const maps: RenderMaterialAssetMapsProps = {\r\n Pattern: { TextureId: textureId },\r\n Normal: { TextureId: textureId },\r\n Bump: { TextureId: textureId },\r\n Diffuse: { TextureId: textureId },\r\n Finish: { TextureId: textureId },\r\n GlowColor: { TextureId: textureId },\r\n Reflect: { TextureId: textureId },\r\n Specular: { TextureId: textureId },\r\n TranslucencyColor: { TextureId: textureId },\r\n TransparentColor: { TextureId: textureId },\r\n Displacement: { TextureId: textureId },\r\n [\"Unknown\" as any]: { TextureId: textureId },\r\n [\"InvalidTexture\" as any]: { TextureId: Id64.invalid },\r\n [\"UnknownTexture\" as any]: { TextureId: unknownTextureId },\r\n [\"NoTextureId\" as any]: { OtherProp: 1 },\r\n };\r\n\r\n const material = test({});\r\n const jsonProps = material.jsonProperties as RenderMaterialProps[\"jsonProperties\"];\r\n assert(jsonProps?.materialAssets?.renderMaterial && jsonProps.materialAssets.renderMaterial.Map === undefined);\r\n jsonProps.materialAssets.renderMaterial.Map = maps;\r\n withEditTxn(imodel, (txn) => material.update(txn));\r\n\r\n const context = {\r\n findTargetElementId: (sourceId: Id64String) => {\r\n expect(typeof sourceId, `bad id: ${sourceId}`).to.equal(\"string\");\r\n expect(Id64.isId64(sourceId), `bad id: ${sourceId}`).to.be.true;\r\n return \"CLONED\";\r\n },\r\n } as any as IModelElementCloneContext;\r\n\r\n const sourceProps = material.toJSON();\r\n const targetProps = structuredClone(sourceProps);\r\n\r\n // eslint-disable-next-line @typescript-eslint/dot-notation\r\n await RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\r\n\r\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.deep.equal({\r\n Pattern: { TextureId: \"CLONED\" },\r\n Normal: { TextureId: \"CLONED\" },\r\n Bump: { TextureId: \"CLONED\" },\r\n Diffuse: { TextureId: \"CLONED\" },\r\n Finish: { TextureId: \"CLONED\" },\r\n GlowColor: { TextureId: \"CLONED\" },\r\n Reflect: { TextureId: \"CLONED\" },\r\n Specular: { TextureId: \"CLONED\" },\r\n TranslucencyColor: { TextureId: \"CLONED\" },\r\n TransparentColor: { TextureId: \"CLONED\" },\r\n Displacement: { TextureId: \"CLONED\" },\r\n Unknown: { TextureId: \"CLONED\" },\r\n InvalidTexture: { TextureId: Id64.invalid },\r\n UnknownTexture: { TextureId: \"CLONED\" },\r\n NoTextureId: { OtherProp: 1 },\r\n });\r\n\r\n jsonProps.materialAssets.renderMaterial.Map = { Pattern: undefined };\r\n // eslint-disable-next-line @typescript-eslint/dot-notation\r\n await RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\r\n // keep the sourceMap the same in targetProps\r\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.have.property(\"Pattern\").that.is.undefined;\r\n jsonProps.materialAssets.renderMaterial.Map = { Pattern: null as any };\r\n // eslint-disable-next-line @typescript-eslint/dot-notation\r\n await RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\r\n // keep the sourceMap the same in targetProps\r\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.have.property(\"Pattern\").that.is.null;\r\n });\r\n });\r\n});\r\n\r\n\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"RenderMaterialElement.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/RenderMaterialElement.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert, expect } from \"chai\";\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { ImageSourceFormat, IModel, NormalMapFlags, NormalMapProps, RenderMaterialAssetMapsProps, RenderMaterialAssetProps, RenderMaterialProps, TextureMapProps } from \"@itwin/core-common\";\nimport { ChannelControl, IModelElementCloneContext, RenderMaterialElement, RenderMaterialElementParams, SnapshotDb, Texture } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { withEditTxn } from \"../../EditTxn\";\n\nfunction removeUndefined(assetProps: RenderMaterialAssetProps): RenderMaterialAssetProps {\n const input = assetProps as any;\n for (const key of Object.keys(input))\n if (input[key] === undefined)\n delete input[key];\n\n const maps = assetProps.Map as any;\n if (maps) {\n for (const mapsKey of Object.keys(maps)) {\n const map = maps[mapsKey];\n for (const mapKey of Object.keys(map))\n if (map[mapKey] === undefined)\n delete map[mapKey];\n }\n }\n\n return assetProps;\n}\n\nfunction defaultBooleans(assetProps: RenderMaterialAssetProps): RenderMaterialAssetProps {\n const boolKeys = [\"HasBaseColor\", \"HasDiffuse\", \"HasFinish\", \"HasReflect\", \"HasReflectColor\", \"HasSpecular\", \"HasSpecularColor\"] as const;\n for (const boolKey of boolKeys)\n if (undefined === assetProps[boolKey])\n assetProps[boolKey] = false;\n\n return assetProps;\n}\n\ndescribe(\"RenderMaterialElement\", () => {\n let imodel: SnapshotDb;\n let materialNumber = 0;\n let textureNumber = 0;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ExportGraphics\", \"ExportGraphicsTest.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n });\n\n after(() => imodel.close());\n\n function test(params: Omit<RenderMaterialElementParams, \"paletteName\">, expected?: RenderMaterialAssetProps): RenderMaterialElement {\n const name = `material${++materialNumber}`;\n const paletteName = \"palette\";\n const id = withEditTxn(imodel, (txn) => RenderMaterialElement.insert(txn, IModel.dictionaryId, name, { ...params, paletteName }));\n expect(Id64.isValidId64(id)).to.be.true;\n\n const mat = imodel.elements.getElement<RenderMaterialElement>(id);\n const json = mat.toJSON();\n expect(json.jsonProperties?.materialAssets?.renderMaterial).not.to.be.undefined;\n const actual = removeUndefined(json.jsonProperties!.materialAssets!.renderMaterial!);\n\n if (expected !== undefined) {\n expected = defaultBooleans(expected);\n expect(actual).to.deep.equal(expected);\n }\n\n return mat;\n }\n\n function insertTexture(): Id64String {\n // This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in\n // bottom right pixel. The rest of the square is red.\n const pngData = new Uint8Array([\n 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217,\n 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252,\n 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65,\n 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0,\n 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,\n ]);\n\n const name = `texture${++textureNumber}`;\n const textureId = withEditTxn(imodel, (txn) => Texture.insertTexture(txn, IModel.dictionaryId, name, ImageSourceFormat.Png, pngData));\n expect(Id64.isValidId64(textureId)).to.be.true;\n return textureId;\n }\n\n describe(\"read\", () => {\n it(\"should be able to convert TextureId to hexadecimal string outside javascript's double precision range of 2^53\", async () => {\n // LargeNumericRenderMaterialTextureId is a database with a single RenderMaterial whose jsonProperties look something like:\n // {\"materialAssets\":{\"renderMaterial\":{\"Map\":{\"Diffuse\":{\"TextureId\":9223372036854775807},\"Bump\":{\"TextureId\":18446744073709551615},\"Finish\":{\"TextureId\":13835058055282163712}}}}}\n // 9223372036854775807 is equivalent to 2^63 - 1 which is equivalent to the hexadecimal string 0x7fffffffffffffff.\n // 18446744073709551615 is equivalent to 2^64 - 1 which is equivalent to the hexadecimal string 0xffffffffffffffff.\n // 13835058055282163712 is equivalent to 2^63 + (2^63 / 2) which is equivalent to the hexadecimal string 0xc000000000000000.\n const seedFileName = IModelTestUtils.resolveAssetFile(\"LargeNumericRenderMaterialTextureId.bim\");\n\n const db = SnapshotDb.openFile(seedFileName);\n let id: Id64String;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withStatement(`SELECT ECInstanceId from Bis.RenderMaterial`, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n id = stmt.getRow().id;\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_DONE);\n });\n const renderMatElement = db.elements.getElement<RenderMaterialElement>(id!).toJSON();\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Diffuse?.TextureId).to.equal(\"0x7fffffffffffffff\");\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Bump?.TextureId).to.equal(\"0xffffffffffffffff\");\n expect(renderMatElement.jsonProperties?.materialAssets?.renderMaterial?.Map?.Finish?.TextureId).to.equal(\"0xc000000000000000\");\n db.close();\n });\n });\n\n describe(\"insert\", () => {\n it(\"with default values\", () => {\n test({}, {});\n });\n\n it(\"should convert TextureIds to hexadecimal string when loading element\", () => {\n /* eslint-disable @typescript-eslint/naming-convention */\n const maps: RenderMaterialAssetMapsProps = {\n Pattern: { TextureId: 1 },\n Normal: { TextureId: 0x0000bc0000001234 }, // TextureId has a non-zero briefcase Id\n Bump: { TextureId: 0x000000123456789a }, // TextureId has non-zero digits in the upper 32 bits\n Diffuse: { TextureId: 0x0000bc123456789a }, // TextureId has a non-zero briefcase Id and non-zero digits in the upper 32 bits.\n Finish: { TextureId: 5 },\n GlowColor: { TextureId: 6 },\n Reflect: { TextureId: 7 },\n Specular: { TextureId: 8 },\n TranslucencyColor: { OtherProp2: \"test\" }, // Should be unchanged, still present.\n TransparentColor: { TextureId: 10, OtherProp: 1 }, // OtherProp should be unchanged, still present.\n Displacement: { TextureId: \"0x1\" },\n OtherProperty: { OtherProperty: \"test\" }, // Should be unchanged.\n } as any;\n /* eslint-enable @typescript-eslint/naming-convention */\n const material = test({});\n const jsonProps = material.jsonProperties as RenderMaterialProps[\"jsonProperties\"];\n assert(jsonProps?.materialAssets?.renderMaterial && jsonProps.materialAssets.renderMaterial.Map === undefined);\n jsonProps.materialAssets.renderMaterial.Map = maps;\n withEditTxn(imodel, (txn) => material.update(txn));\n\n const pathName = imodel.pathName;\n imodel.close(); // Need to close so we can load the element back in with strings instead of numbers.\n\n imodel = SnapshotDb.openForApplyChangesets(pathName);\n imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const mat = imodel.elements.getElement<RenderMaterialElement>(material.id);\n\n const props = mat.toJSON();\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map).to.not.be.undefined;\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Pattern?.TextureId).to.equal(\"0x1\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Normal?.TextureId).to.equal(\"0xbc0000001234\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Bump?.TextureId).to.equal(\"0x123456789a\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Diffuse?.TextureId).to.equal(\"0xbc123456789a\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Finish?.TextureId).to.equal(\"0x5\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.GlowColor?.TextureId).to.equal(\"0x6\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Reflect?.TextureId).to.equal(\"0x7\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Specular?.TextureId).to.equal(\"0x8\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TranslucencyColor?.TextureId).to.be.undefined;\n expect((props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TranslucencyColor as any).OtherProp2).to.equal(\"test\");\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TransparentColor?.TextureId).to.equal(\"0xa\");\n expect((props.jsonProperties?.materialAssets?.renderMaterial?.Map!.TransparentColor as any).OtherProp).to.equal(1);\n expect(props.jsonProperties?.materialAssets?.renderMaterial?.Map!.Displacement?.TextureId).to.equal(\"0x1\");\n expect(((props.jsonProperties?.materialAssets?.renderMaterial?.Map as any).OtherProperty).OtherProperty).to.equal(\"test\");\n });\n\n it(\"with custom values\", () => {\n const params: Omit<RenderMaterialElementParams, \"paletteName\"> = {\n color: [1, 0, 0],\n specularColor: [0, 1, 0],\n finish: 21,\n transmit: 0.5,\n diffuse: 0.2,\n specular: 0.8,\n reflect: 0.5,\n reflectColor: [0, 0, 1],\n };\n\n /* eslint-disable @typescript-eslint/naming-convention */\n test(params, {\n HasBaseColor: true, color: params.color,\n HasSpecularColor: true, specular_color: params.specularColor,\n HasFinish: true, finish: params.finish,\n HasTransmit: true, transmit: params.transmit,\n HasDiffuse: true, diffuse: params.diffuse,\n HasSpecular: true, specular: params.specular,\n HasReflect: true, reflect: params.reflect,\n HasReflectColor: true, reflect_color: params.reflectColor,\n });\n\n params.transmit = undefined;\n /* eslint-disable @typescript-eslint/naming-convention */\n test(params, {\n HasBaseColor: true, color: params.color,\n HasSpecularColor: true, specular_color: params.specularColor,\n HasFinish: true, finish: params.finish,\n HasDiffuse: true, diffuse: params.diffuse,\n HasSpecular: true, specular: params.specular,\n HasReflect: true, reflect: params.reflect,\n HasReflectColor: true, reflect_color: params.reflectColor,\n });\n\n params.transmit = 0.0;\n /* eslint-disable @typescript-eslint/naming-convention */\n test(params, {\n HasBaseColor: true, color: params.color,\n HasSpecularColor: true, specular_color: params.specularColor,\n HasFinish: true, finish: params.finish,\n HasTransmit: true, transmit: params.transmit,\n HasDiffuse: true, diffuse: params.diffuse,\n HasSpecular: true, specular: params.specular,\n HasReflect: true, reflect: params.reflect,\n HasReflectColor: true, reflect_color: params.reflectColor,\n });\n });\n\n it(\"pattern map with default values\", () => {\n const textureId = insertTexture();\n test({\n patternMap: {\n TextureId: textureId,\n },\n }, {\n Map: {\n Pattern: {\n TextureId: textureId,\n },\n },\n });\n });\n\n it(\"pattern map with custom values\", () => {\n const patternMap: TextureMapProps = {\n TextureId: insertTexture(),\n pattern_angle: 1,\n pattern_u_flip: true,\n pattern_flip: true,\n pattern_scale: [-1, 2],\n pattern_offset: [-2, 1],\n pattern_scalemode: 3,\n pattern_mapping: 4,\n pattern_weight: 0.5,\n };\n\n test({ patternMap }, { Map: { Pattern: patternMap } });\n });\n\n it(\"pattern map with constant lod parameters\", () => {\n const patternMap: TextureMapProps = {\n TextureId: insertTexture(),\n pattern_angle: 1,\n pattern_u_flip: true,\n pattern_flip: true,\n pattern_scale: [-1, 2],\n pattern_offset: [-2, 1],\n pattern_scalemode: 3,\n pattern_mapping: 4,\n pattern_weight: 0.5,\n pattern_useconstantlod: true,\n pattern_constantlod_repetitions: 0.333,\n pattern_constantlod_offset: [1000, 2000],\n pattern_constantlod_mindistanceclamp: 4,\n pattern_constantlod_maxdistanceclamp: 256,\n };\n\n test({ patternMap }, { Map: { Pattern: patternMap } });\n });\n\n it(\"normal and pattern maps with default values\", () => {\n const normalId = insertTexture();\n const patternId = insertTexture();\n expect(normalId).not.to.equal(patternId);\n\n test({\n patternMap: { TextureId: patternId },\n normalMap: { TextureId: normalId },\n }, {\n Map: {\n Pattern: { TextureId: patternId },\n Normal: {\n TextureId: normalId,\n },\n },\n });\n });\n\n it(\"merges mapping params from normal and pattern maps\", () => {\n const normalId = insertTexture();\n const patternId = insertTexture();\n expect(normalId).not.to.equal(patternId);\n\n const patternMap: TextureMapProps = {\n TextureId: patternId,\n pattern_scale: [-1, 2],\n pattern_weight: 0.5,\n };\n\n const normalMap: NormalMapProps = {\n TextureId: normalId,\n pattern_angle: 0.8,\n pattern_flip: true,\n pattern_weight: 1.5,\n };\n\n const sharedProps: Omit<TextureMapProps, \"TextureId\"> = {\n pattern_scale: patternMap.pattern_scale,\n pattern_weight: patternMap.pattern_weight,\n pattern_angle: normalMap.pattern_angle,\n pattern_flip: normalMap.pattern_flip,\n };\n\n test({ patternMap, normalMap }, {\n Map: {\n Pattern: {\n ...sharedProps,\n TextureId: patternId,\n },\n Normal: {\n ...sharedProps,\n TextureId: normalId,\n },\n },\n });\n });\n\n it(\"normal map with default values\", () => {\n const id = insertTexture();\n test({ normalMap: { TextureId: id } }, { Map: { Normal: { TextureId: id } } });\n });\n\n it(\"normal map with inverted green channel\", () => {\n const id = insertTexture();\n test({\n normalMap: {\n TextureId: id,\n NormalFlags: 1,\n },\n }, {\n Map: {\n Normal: {\n NormalFlags: 1,\n TextureId: id,\n },\n },\n });\n });\n\n it(\"normal map with scale\", () => {\n const id = insertTexture();\n const scale = 2.5;\n test({\n normalMap: {\n TextureId: id,\n scale,\n },\n }, {\n pbr_normal: 2.5,\n Map: {\n Normal: {\n TextureId: id,\n },\n },\n });\n });\n\n it(\"normal map with flags\", () => {\n const id = insertTexture();\n test({\n normalMap: {\n TextureId: id,\n NormalFlags: 0xff00 as NormalMapFlags,\n },\n }, {\n Map: {\n Normal: {\n TextureId: id,\n NormalFlags: 0xff00 as NormalMapFlags,\n },\n },\n });\n });\n\n it(\"normal map with constant lod parameters\", () => {\n const normalMap: NormalMapProps = {\n TextureId: insertTexture(),\n NormalFlags: 2,\n pattern_constantlod_repetitions: 0.333,\n pattern_constantlod_offset: [1000, 2000],\n pattern_constantlod_mindistanceclamp: 4,\n pattern_constantlod_maxdistanceclamp: 256,\n };\n test({ normalMap }, { Map: { Normal: normalMap } });\n });\n });\n\n describe(\"clone\", () => {\n it(\"clone maps\", async () => {\n const textureId = insertTexture();\n const unknownTextureId = \"0xffffff\";\n\n expect(Id64.isValidId64(unknownTextureId)).to.be.true;\n expect(imodel.elements.tryGetElementProps(unknownTextureId)).to.be.undefined;\n\n const maps: RenderMaterialAssetMapsProps = {\n Pattern: { TextureId: textureId },\n Normal: { TextureId: textureId },\n Bump: { TextureId: textureId },\n Diffuse: { TextureId: textureId },\n Finish: { TextureId: textureId },\n GlowColor: { TextureId: textureId },\n Reflect: { TextureId: textureId },\n Specular: { TextureId: textureId },\n TranslucencyColor: { TextureId: textureId },\n TransparentColor: { TextureId: textureId },\n Displacement: { TextureId: textureId },\n [\"Unknown\" as any]: { TextureId: textureId },\n [\"InvalidTexture\" as any]: { TextureId: Id64.invalid },\n [\"UnknownTexture\" as any]: { TextureId: unknownTextureId },\n [\"NoTextureId\" as any]: { OtherProp: 1 },\n };\n\n const material = test({});\n const jsonProps = material.jsonProperties as RenderMaterialProps[\"jsonProperties\"];\n assert(jsonProps?.materialAssets?.renderMaterial && jsonProps.materialAssets.renderMaterial.Map === undefined);\n jsonProps.materialAssets.renderMaterial.Map = maps;\n withEditTxn(imodel, (txn) => material.update(txn));\n\n const context = {\n findTargetElementId: (sourceId: Id64String) => {\n expect(typeof sourceId, `bad id: ${sourceId}`).to.equal(\"string\");\n expect(Id64.isId64(sourceId), `bad id: ${sourceId}`).to.be.true;\n return \"CLONED\";\n },\n } as any as IModelElementCloneContext;\n\n const sourceProps = material.toJSON();\n const targetProps = structuredClone(sourceProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n await RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.deep.equal({\n Pattern: { TextureId: \"CLONED\" },\n Normal: { TextureId: \"CLONED\" },\n Bump: { TextureId: \"CLONED\" },\n Diffuse: { TextureId: \"CLONED\" },\n Finish: { TextureId: \"CLONED\" },\n GlowColor: { TextureId: \"CLONED\" },\n Reflect: { TextureId: \"CLONED\" },\n Specular: { TextureId: \"CLONED\" },\n TranslucencyColor: { TextureId: \"CLONED\" },\n TransparentColor: { TextureId: \"CLONED\" },\n Displacement: { TextureId: \"CLONED\" },\n Unknown: { TextureId: \"CLONED\" },\n InvalidTexture: { TextureId: Id64.invalid },\n UnknownTexture: { TextureId: \"CLONED\" },\n NoTextureId: { OtherProp: 1 },\n });\n\n jsonProps.materialAssets.renderMaterial.Map = { Pattern: undefined };\n // eslint-disable-next-line @typescript-eslint/dot-notation\n await RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n // keep the sourceMap the same in targetProps\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.have.property(\"Pattern\").that.is.undefined;\n jsonProps.materialAssets.renderMaterial.Map = { Pattern: null as any };\n // eslint-disable-next-line @typescript-eslint/dot-notation\n await RenderMaterialElement[\"onCloned\"](context, sourceProps, targetProps);\n // keep the sourceMap the same in targetProps\n expect(targetProps.jsonProperties?.materialAssets?.renderMaterial?.Map).to.have.property(\"Pattern\").that.is.null;\n });\n });\n});\n\n\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderTimeline.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/RenderTimeline.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"RenderTimeline.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/RenderTimeline.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, Id64String, OpenMode } from \"@itwin/core-bentley\";\nimport { Code, IModel, RenderSchedule, RenderTimelineProps } from \"@itwin/core-common\";\nimport { GenericSchema, IModelJsFs, RenderTimeline, StandaloneDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"RenderTimeline\", () => {\n before(() => {\n GenericSchema.registerSchema();\n });\n\n function makeScriptProps(): RenderSchedule.ScriptProps {\n return [{\n modelId: \"0x123\",\n elementTimelines: [{\n batchId: 1,\n elementIds: [\"0xabc\", \"0xdef\"],\n visibilityTimeline: [{ time: 42, value: 50 }],\n }],\n }];\n }\n\n function insertTimeline(imodel: StandaloneDb, scriptProps?: RenderSchedule.ScriptProps): Id64String {\n const script = JSON.stringify(scriptProps ?? makeScriptProps());\n const props: RenderTimelineProps = {\n model: IModel.dictionaryId,\n classFullName: RenderTimeline.classFullName,\n code: Code.createEmpty(),\n script,\n };\n return withEditTxn(imodel, (txn) => txn.insertElement(props));\n }\n\n function createIModel(name: string): StandaloneDb {\n const props = {\n rootSubject: {\n name,\n },\n enableTransactions: true,\n };\n const filename = IModelTestUtils.prepareOutputFile(\"RenderTimeline\", `${name}.bim`);\n return StandaloneDb.createEmpty(filename, props);\n }\n\n it(\"requires BisCore >= 1.0.13\", () => {\n const filename = IModelTestUtils.prepareOutputFile(\"RenderTimeline.SchemaTooOld\", \"testImodel.bim\");\n const seedFileName = IModelTestUtils.resolveAssetFile(\"testImodel.bim\");\n IModelJsFs.copySync(seedFileName, filename);\n\n const imodel = StandaloneDb.openFile(filename, OpenMode.ReadWrite);\n expect(() => insertTimeline(imodel)).to.throw(\"ecClass not found\");\n imodel.close();\n });\n\n it(\"creates, queries, and updates\", () => {\n const imodel = createIModel(\"CRUD\");\n const timelineId = insertTimeline(imodel);\n expect(Id64.isValid(timelineId)).to.be.true;\n\n let timeline = imodel.elements.getElement<RenderTimeline>(timelineId);\n expect(timeline).instanceof(RenderTimeline);\n expect(timeline.scriptProps).to.deep.equal(makeScriptProps());\n expect(timeline.description).to.equal(\"\");\n\n timeline.description = \"My timeline\";\n const scriptProps = makeScriptProps();\n scriptProps.push(makeScriptProps()[0]);\n timeline.scriptProps = scriptProps;\n\n withEditTxn(imodel, (txn) => timeline.update(txn));\n timeline = imodel.elements.getElement<RenderTimeline>(timelineId);\n expect(timeline.description).to.equal(\"My timeline\");\n expect(timeline.scriptProps).to.deep.equal(scriptProps);\n\n imodel.close();\n });\n});\n\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLiteDb.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SQLiteDb.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"SQLiteDb.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SQLiteDb.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport { BeDuration, DbResult, OpenMode } from \"@itwin/core-bentley\";\nimport { SQLiteDb } from \"../../SQLiteDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"SQLiteDb\", () => {\n\n it(\"should create new SQLiteDb\", async () => {\n const fileName = IModelTestUtils.prepareOutputFile(\"SQLiteDb\", \"db1.db\");\n const db = new SQLiteDb();\n db.createDb(fileName, undefined, { rawSQLite: true, pageSize: 8 * 1024 });\n db.executeSQL(\"CREATE TABLE test1(id INTEGER PRIMARY KEY,val TEXT)\");\n db.executeSQL(`INSERT INTO test1(id,val) VALUES (1,\"val1\")`);\n db.executeSQL(`INSERT INTO test1(id,val) VALUES (2,\"val2\")`);\n db.saveChanges();\n\n const testDb = () => {\n db.withSqliteStatement(\"SELECT id,val from test1\", (stmt) => {\n stmt.step();\n expect(stmt.getValue(0).getInteger()).equal(1);\n expect(stmt.getValue(1).getString()).equal(\"val1\");\n stmt.step();\n expect(stmt.getValue(0).getInteger()).equal(2);\n expect(stmt.getValue(1).getString()).equal(\"val2\");\n });\n db.closeDb();\n };\n testDb();\n\n // now test immutable flag\n db.openDb(fileName, { openMode: OpenMode.Readonly, skipFileCheck: true, immutable: true, defaultTxn: SQLiteDb.DefaultTxnMode.None, rawSQLite: true });\n testDb();\n\n expect(db.isOpen).false;\n expect(() => db.vacuum()).throws(\"not open\");\n\n let val = db.withOpenDb({ dbName: fileName, openMode: { openMode: OpenMode.ReadWrite, rawSQLite: true } }, () => {\n expect(db.isOpen);\n db.vacuum();\n return 22;\n });\n expect(val).equal(22);\n expect(db.isOpen).false;\n\n val = await db.withOpenDb({ dbName: fileName, openMode: { openMode: OpenMode.ReadWrite, rawSQLite: true } }, async () => {\n expect(db.isOpen);\n await BeDuration.fromMilliseconds(10).wait();\n return 100;\n });\n expect(val).equal(100);\n expect(db.isOpen).false;\n });\n\n it(\"should be able to open existing .bim file with SQLiteDb\", () => {\n const testFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = new SQLiteDb();\n db.withOpenDb({ dbName: testFileName }, () => {\n db.withSqliteStatement(`SELECT StrData FROM be_Prop WHERE Namespace=\"ec_Db\" AND Name=\"SchemaVersion\"`, (stmt) => {\n expect(stmt.step()).equal(DbResult.BE_SQLITE_ROW);\n const val = JSON.parse(stmt.getValue(0).getString());\n expect(val.major).equal(4, \"read major version\");\n expect(val.minor).equal(0, \"read minor version\");\n });\n });\n });\n\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaUtils.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SchemaUtils.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IAErC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAElE,qCAAqC;QAErC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"SchemaUtils.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SchemaUtils.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IAErC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAElE,qCAAqC;QAErC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { Schema } from \"../../Schema\";\nimport * as Semver from \"semver\";\n\ndescribe(\"Schema Utilities Test\", () => {\n\n it(\"paddedVersionToSemver\", async () => {\n assert.equal(Schema.toSemverString(\"1.00.00\"), \"1.0.0\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.00.00\")));\n\n assert.equal(Schema.toSemverString(\"01.0.0\"), \"1.0.0\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"01.0.0\")));\n\n assert.equal(Schema.toSemverString(\"1.2.3\"), \"1.2.3\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.2.3\")));\n\n assert.equal(Schema.toSemverString(\"012.0013\"), \"12.0.13\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"012.0013\")));\n\n // bad inputs with undefined behavior\n\n assert.equal(Schema.toSemverString(\"bad.input\"), \"NaN.0.NaN\");\n assert.isNull(Semver.valid(Schema.toSemverString(\"bad.input\")));\n\n assert.equal(Schema.toSemverString(\"1..2\"), \"1.0.2\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1..2\")));\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SectionDrawing.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SectionDrawing.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"SectionDrawing.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SectionDrawing.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 { Transform } from \"@itwin/core-geometry\";\nimport { RelatedElement, SectionDrawingProps, SectionType } from \"@itwin/core-common\";\nimport { Drawing, SectionDrawing } from \"../../Element\";\nimport { DocumentListModel, DrawingModel, SectionDrawingModel } from \"../../Model\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"SectionDrawing\", () => {\n let imodel: SnapshotDb;\n let documentListModelId: string;\n before(() => {\n const iModelPath = IModelTestUtils.prepareOutputFile(\"SectionDrawing\", \"SectionDrawing.bim\");\n imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"SectionDrawingTest\" } });\n documentListModelId = withEditTxn(imodel, (txn) => DocumentListModel.insert(txn, SnapshotDb.rootSubjectId, \"DocumentList\"));\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"should round-trip through JSON\", () => {\n // Insert a SectionDrawing\n const drawingId = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: SectionDrawing.classFullName,\n model: documentListModelId,\n code: Drawing.createCode(imodel, documentListModelId, \"SectionDrawingRoundTrip\"),\n }));\n expect(Id64.isValidId64(drawingId)).to.be.true;\n\n const model = imodel.models.createModel({\n classFullName: DrawingModel.classFullName,\n modeledElement: { id: drawingId },\n });\n const modelId = withEditTxn(imodel, (txn) => txn.insertModel(model.toJSON()));\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n let drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\n expect(drawing instanceof SectionDrawing).to.be.true;\n\n // Expect default values\n expect(Id64.isValidId64(drawing.spatialView.id)).to.be.false;\n expect(drawing.sectionType).to.equal(SectionType.Section);\n expect(drawing.jsonProperties.drawingToSpatialTransform).to.be.undefined;\n expect(drawing.jsonProperties.sheetToSpatialTransform).to.be.undefined;\n expect(drawing.drawingToSpatialTransform).to.be.undefined;\n expect(drawing.sheetToSpatialTransform).to.be.undefined;\n\n // Modify values\n const drawingToSpatial = Transform.createTranslationXYZ(1, 2, 3);\n const sheetToSpatial = Transform.createTranslationXYZ(4, 5, 6);\n drawing.spatialView = new RelatedElement({ id: \"0x123\" });\n drawing.sectionType = SectionType.Elevation;\n drawing.drawingToSpatialTransform = drawingToSpatial;\n drawing.sheetToSpatialTransform = sheetToSpatial;\n\n // Expect updated values\n const expectProps = (json: SectionDrawingProps | SectionDrawing) => {\n expect(json.spatialView).not.to.be.undefined;\n expect(json.spatialView?.id).to.equal(\"0x123\");\n expect(json.sectionType).to.equal(SectionType.Elevation);\n expect(Transform.fromJSON(json.jsonProperties?.drawingToSpatialTransform).isAlmostEqual(drawingToSpatial)).to.be.true;\n expect(Transform.fromJSON(json.jsonProperties?.sheetToSpatialTransform).isAlmostEqual(sheetToSpatial)).to.be.true;\n };\n\n const props = drawing.toJSON();\n expectProps(props);\n\n // Persist changes\n withEditTxn(imodel, (txn) => txn.updateElement(props));\n\n // Obtain persistent element\n drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\n\n // Expect persistent values\n expectProps(drawing);\n expectProps(drawing.toJSON());\n });\n\n it(\"should create a SectionDrawing and SectionDrawingModel on insert\", () => {\n const sectionDrawingId = withEditTxn(imodel, (txn) => SectionDrawing.insert(txn, documentListModelId, \"SectionDrawingInsert\"));\n\n expect(Id64.isValidId64(sectionDrawingId)).to.be.true;\n\n const insertedSectionDrawing = imodel.elements.getElement(sectionDrawingId);\n\n expect(insertedSectionDrawing instanceof SectionDrawing).to.be.true;\n\n const insertedSectionDrawingModel = imodel.models.getModel(sectionDrawingId);\n\n expect(insertedSectionDrawingModel.className).to.equal(\"SectionDrawingModel\");\n expect(insertedSectionDrawingModel instanceof SectionDrawingModel).to.be.true;\n });\n});\n"]}
|