@itwin/core-backend 5.9.0-dev.1 → 5.9.0-dev.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -1
- 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 +3 -3
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.d.ts +37 -7
- package/lib/cjs/Category.d.ts.map +1 -1
- package/lib/cjs/Category.js +33 -42
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +253 -250
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.d.ts +29 -0
- package/lib/cjs/ChannelControl.d.ts.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +1 -1
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js +68 -13
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +32 -3
- package/lib/cjs/CodeSpecs.d.ts.map +1 -1
- package/lib/cjs/CodeSpecs.js +48 -20
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/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.d.ts +18 -3
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +10 -21
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/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.d.ts +262 -0
- package/lib/cjs/EditTxn.d.ts.map +1 -0
- package/lib/cjs/EditTxn.js +548 -0
- package/lib/cjs/EditTxn.js.map +1 -0
- package/lib/cjs/Element.d.ts +74 -5
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +63 -75
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +10 -0
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +21 -12
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +56 -3
- package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
- package/lib/cjs/ElementTreeWalker.js +53 -40
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/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.d.ts +11 -2
- package/lib/cjs/ExternalSource.d.ts.map +1 -1
- package/lib/cjs/ExternalSource.js +10 -8
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/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.d.ts +74 -23
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +193 -297
- 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.d.ts +58 -1
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +89 -0
- 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 +35 -15
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +47 -7
- package/lib/cjs/LineStyle.d.ts.map +1 -1
- package/lib/cjs/LineStyle.js +38 -33
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/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.d.ts +8 -1
- package/lib/cjs/Material.d.ts.map +1 -1
- package/lib/cjs/Material.js +6 -12
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +59 -20
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +38 -80
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/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.d.ts +72 -7
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +39 -21
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/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 +4 -4
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.d.ts +9 -0
- package/lib/cjs/SheetIndex.d.ts.map +1 -1
- package/lib/cjs/SheetIndex.js +38 -35
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.d.ts +6 -0
- package/lib/cjs/Texture.d.ts.map +1 -1
- package/lib/cjs/Texture.js +6 -14
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +105 -9
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +194 -15
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +21 -1
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +27 -66
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +33 -27
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +6 -5
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/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.d.ts +1 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +1 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.d.ts +6 -2
- package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js +8 -13
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.d.ts +11 -4
- package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
- package/lib/cjs/domains/GenericElements.js +13 -24
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.d.ts +15 -0
- package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js +5 -3
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/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.d.ts +4 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +5 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.d.ts +3 -2
- package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
- package/lib/cjs/internal/annotations/fields.js +7 -6
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +18 -3
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js +49 -242
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts.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.d.ts +0 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +70 -41
- 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.d.ts.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.d.ts +11 -5
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsDb.d.ts +20 -99
- package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsDb.js +23 -7
- package/lib/cjs/workspace/SettingsDb.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.d.ts +40 -226
- package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.js +86 -25
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +7 -11
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts +14 -0
- package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js +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 +3 -3
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.d.ts +37 -7
- package/lib/esm/Category.d.ts.map +1 -1
- package/lib/esm/Category.js +33 -42
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +253 -250
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.d.ts +29 -0
- package/lib/esm/ChannelControl.d.ts.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +1 -1
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js +69 -14
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +32 -3
- package/lib/esm/CodeSpecs.d.ts.map +1 -1
- package/lib/esm/CodeSpecs.js +49 -21
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/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.d.ts +18 -3
- package/lib/esm/DisplayStyle.d.ts.map +1 -1
- package/lib/esm/DisplayStyle.js +10 -21
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/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.d.ts +262 -0
- package/lib/esm/EditTxn.d.ts.map +1 -0
- package/lib/esm/EditTxn.js +543 -0
- package/lib/esm/EditTxn.js.map +1 -0
- package/lib/esm/Element.d.ts +74 -5
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +64 -76
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +10 -0
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +22 -13
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.d.ts +56 -3
- package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
- package/lib/esm/ElementTreeWalker.js +53 -40
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/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.d.ts +11 -2
- package/lib/esm/ExternalSource.d.ts.map +1 -1
- package/lib/esm/ExternalSource.js +10 -8
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/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.d.ts +74 -23
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +195 -299
- 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.d.ts +58 -1
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +91 -2
- 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 +36 -16
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.d.ts +47 -7
- package/lib/esm/LineStyle.d.ts.map +1 -1
- package/lib/esm/LineStyle.js +38 -33
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/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.d.ts +8 -1
- package/lib/esm/Material.d.ts.map +1 -1
- package/lib/esm/Material.js +6 -12
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +59 -20
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js +39 -81
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/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.d.ts +72 -7
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +40 -22
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/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 +5 -5
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.d.ts +9 -0
- package/lib/esm/SheetIndex.d.ts.map +1 -1
- package/lib/esm/SheetIndex.js +38 -35
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.d.ts +6 -0
- package/lib/esm/Texture.d.ts.map +1 -1
- package/lib/esm/Texture.js +6 -14
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +105 -9
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +194 -15
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +21 -1
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +27 -66
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +33 -27
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +6 -5
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/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.d.ts +1 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +1 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.d.ts +6 -2
- package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
- package/lib/esm/domains/FunctionalElements.js +8 -13
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.d.ts +11 -4
- package/lib/esm/domains/GenericElements.d.ts.map +1 -1
- package/lib/esm/domains/GenericElements.js +13 -24
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.d.ts +15 -0
- package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js +6 -4
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/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.d.ts +4 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +4 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.d.ts +3 -2
- package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
- package/lib/esm/internal/annotations/fields.js +7 -6
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +18 -3
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsEditorImpl.js +52 -246
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.d.ts.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.d.ts +0 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +71 -41
- 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.d.ts.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.d.ts +20 -19
- package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +134 -119
- 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 +56 -2
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts +23 -23
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +466 -449
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js +112 -0
- 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 +2 -2
- 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 +156 -147
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js +11 -7
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestEditTxn.d.ts +8 -0
- package/lib/esm/test/TestEditTxn.d.ts.map +1 -0
- package/lib/esm/test/TestEditTxn.js +34 -0
- package/lib/esm/test/TestEditTxn.js.map +1 -0
- package/lib/esm/test/TestUtils.d.ts +1 -0
- package/lib/esm/test/TestUtils.d.ts.map +1 -1
- package/lib/esm/test/TestUtils.js +8 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +135 -143
- 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 +156 -99
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js +5 -3
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js +63 -3
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js +88 -5
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/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 +68 -67
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +6 -6
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -333
- 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 +47 -44
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -2
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +30 -28
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +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 +159 -143
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +90 -82
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js +51 -43
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +176 -177
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js +2 -2
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js +40 -38
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +23 -22
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js +5 -2
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js +43 -11
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js +2 -2
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js +87 -73
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +194 -155
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js +2 -4
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +369 -303
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +467 -392
- 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 +31 -31
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js +57 -48
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +463 -388
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js +2 -2
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js +77 -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.d.ts.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js +2 -2
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
- package/lib/esm/test/index.d.ts +1 -0
- package/lib/esm/test/index.d.ts.map +1 -1
- package/lib/esm/test/index.js +1 -0
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/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 +122 -121
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js +36 -34
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js +114 -94
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +11 -10
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +226 -211
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +1 -3
- package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -247
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js +101 -82
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +242 -213
- 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 +43 -40
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js +4 -3
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/EditTxn.test.d.ts +2 -0
- package/lib/esm/test/standalone/EditTxn.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/EditTxn.test.js +219 -0
- package/lib/esm/test/standalone/EditTxn.test.js.map +1 -0
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js +16 -13
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +40 -34
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js +11 -15
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js +212 -165
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js +31 -25
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js +11 -8
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.d.ts +2 -2
- package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +211 -169
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts +2 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.js +236 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -0
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +25 -22
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js +20 -18
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.d.ts +2 -2
- package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js +49 -33
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js +5 -5
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js +3 -2
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/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 +7 -7
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js +928 -22
- 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 +26 -4
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js +2 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js +3 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/StandaloneDb.test.js +27 -26
- package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js +5 -4
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js +5 -3
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js +35 -31
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +700 -653
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js +295 -229
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +72 -22
- 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 +28 -456
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
- package/lib/esm/workspace/Settings.d.ts +11 -5
- package/lib/esm/workspace/Settings.d.ts.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.d.ts +20 -99
- package/lib/esm/workspace/SettingsDb.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsDb.js +20 -6
- package/lib/esm/workspace/SettingsDb.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.d.ts +40 -226
- package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsEditor.js +85 -24
- package/lib/esm/workspace/SettingsEditor.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +7 -11
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts +14 -0
- package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +0 -38
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
- package/lib/cjs/internal/workspace/SettingsDbImpl.js +0 -108
- package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +0 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +0 -14
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js +0 -40
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +0 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +0 -38
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.js +0 -104
- package/lib/esm/internal/workspace/SettingsDbImpl.js.map +0 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +0 -14
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.js +0 -36
- package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementAspect.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementAspect.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 { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { ElementAspectProps, ExternalSourceAspectProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport {\n Element, ElementAspect, ElementMultiAspect, ElementUniqueAspect, ExternalSourceAspect, PhysicalElement, SnapshotDb, SpatialCategory,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"ElementAspect\", () => {\n\n let iModel: SnapshotDb;\n\n before(() => {\n // NOTE: see ElementAspectTests.PresentationRuleScenarios in DgnPlatform\\Tests\\DgnProject\\NonPublished\\ElementAspect_Test.cpp for how ElementAspectTest.bim was created\n const seedFileName = IModelTestUtils.resolveAssetFile(\"ElementAspectTest.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ElementAspectTest.bim\");\n iModel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n });\n\n after(() => {\n iModel.close();\n });\n\n it(\"should be able to get aspects from test file\", () => {\n const element = iModel.elements.getElement(\"0x17\");\n assert.exists(element);\n assert.isTrue(element instanceof PhysicalElement);\n\n const aspect1: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestUniqueAspectNoHandler\")[0];\n assert.exists(aspect1);\n assert.isTrue(aspect1 instanceof ElementUniqueAspect);\n assert.equal(aspect1.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\n assert.equal(aspect1.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\n assert.equal(aspect1.asAny.length, 1);\n assert.equal(JSON.stringify(aspect1), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n // Test getAspects with dot separator\n const aspect1DotSeparator: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestUniqueAspectNoHandler\")[0];\n assert.exists(aspect1DotSeparator);\n assert.isTrue(aspect1DotSeparator instanceof ElementUniqueAspect);\n assert.equal(aspect1DotSeparator.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\n assert.equal(aspect1DotSeparator.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\n assert.equal(aspect1DotSeparator.asAny.length, 1);\n assert.equal(JSON.stringify(aspect1DotSeparator), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n // cross-check getAspects against getAspect\n const aspect1X: ElementAspect = iModel.elements.getAspect(aspect1.id);\n assert.exists(aspect1X);\n assert.isTrue(aspect1X instanceof ElementUniqueAspect);\n assert.equal(aspect1X.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\n assert.equal(aspect1X.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\n assert.equal(aspect1X.asAny.length, 1);\n assert.equal(JSON.stringify(aspect1X), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n const aspect2: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestUniqueAspect\")[0];\n assert.exists(aspect2);\n assert.isTrue(aspect2 instanceof ElementUniqueAspect);\n assert.equal(aspect2.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\n assert.equal(aspect2.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\n assert.isUndefined(aspect2.asAny.length);\n assert.equal(JSON.stringify(aspect2), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n // Test getAspects with dot separator\n const aspect2DotSeparator: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestUniqueAspect\")[0];\n assert.exists(aspect2DotSeparator);\n assert.isTrue(aspect2DotSeparator instanceof ElementUniqueAspect);\n assert.equal(aspect2DotSeparator.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\n assert.equal(aspect2DotSeparator.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\n assert.isUndefined(aspect2DotSeparator.asAny.length);\n assert.equal(JSON.stringify(aspect2DotSeparator), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n // cross-check getAspects against getAspect\n const aspect2X: ElementAspect = iModel.elements.getAspect(aspect2.id);\n assert.exists(aspect2X);\n assert.isTrue(aspect2X instanceof ElementUniqueAspect);\n assert.equal(aspect2X.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\n assert.equal(aspect2X.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\n assert.isUndefined(aspect2X.asAny.length);\n assert.equal(JSON.stringify(aspect2X), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\n\n const uniqueAspects: ElementUniqueAspect[] = iModel.elements.getAspects(element.id, ElementUniqueAspect.classFullName);\n assert.equal(uniqueAspects.length, 2);\n uniqueAspects.forEach((aspect) => {\n assert.isTrue(aspect.classFullName === aspect1.classFullName || aspect.classFullName === aspect2.classFullName);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.exists(aspectX);\n assert.equal(aspectX.schemaName, aspect.schemaName);\n assert.equal(aspectX.className, aspect.className);\n });\n assert.equal(JSON.stringify(uniqueAspects), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}},\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`.replace(/\\s+/g, \"\"));\n\n const multiAspectsA: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestMultiAspectNoHandler\");\n assert.exists(multiAspectsA);\n assert.isArray(multiAspectsA);\n assert.equal(multiAspectsA.length, 2);\n multiAspectsA.forEach((aspect) => {\n assert.isTrue(aspect instanceof ElementMultiAspect);\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\n assert.equal(aspect.className, \"TestMultiAspectNoHandler\");\n assert.exists(aspect.asAny.testMultiAspectProperty);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.exists(aspectX);\n assert.equal(aspectX.schemaName, aspect.schemaName);\n assert.equal(aspectX.className, aspect.className);\n assert.exists(aspectX.asAny.testMultiAspectProperty);\n assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);\n });\n assert.equal(JSON.stringify(multiAspectsA), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\n\n // Test getAspects with dot separator\n const multiAspectsADotSeparator: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestMultiAspectNoHandler\");\n assert.exists(multiAspectsADotSeparator);\n assert.isArray(multiAspectsADotSeparator);\n assert.equal(multiAspectsADotSeparator.length, 2);\n multiAspectsADotSeparator.forEach((aspect) => {\n assert.isTrue(aspect instanceof ElementMultiAspect);\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\n assert.equal(aspect.className, \"TestMultiAspectNoHandler\");\n assert.exists(aspect.asAny.testMultiAspectProperty);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.exists(aspectX);\n assert.equal(aspectX.schemaName, aspect.schemaName);\n assert.equal(aspectX.className, aspect.className);\n assert.exists(aspectX.asAny.testMultiAspectProperty);\n assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);\n });\n assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\n\n const multiAspectsB: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestMultiAspect\");\n assert.exists(multiAspectsB);\n assert.isArray(multiAspectsB);\n assert.equal(multiAspectsB.length, 2);\n multiAspectsB.forEach((aspect) => {\n assert.isTrue(aspect instanceof ElementMultiAspect);\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\n assert.equal(aspect.className, \"TestMultiAspect\");\n assert.exists(aspect.asAny.testMultiAspectProperty);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.isTrue(aspectX instanceof ElementMultiAspect);\n assert.equal(aspectX.schemaName, \"DgnPlatformTest\");\n assert.equal(aspectX.className, \"TestMultiAspect\");\n assert.exists(aspectX.asAny.testMultiAspectProperty);\n });\n assert.equal(JSON.stringify(multiAspectsB), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n\n const multiAspects: ElementAspect[] = iModel.elements.getAspects(element.id, ElementMultiAspect.classFullName);\n assert.equal(multiAspects.length, 4);\n multiAspects.forEach((aspect) => {\n assert.isTrue(aspect.classFullName === multiAspectsA[0].classFullName || aspect.classFullName === multiAspectsB[0].classFullName);\n // cross-check against getting the aspects individually\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\n assert.exists(aspectX);\n assert.equal(aspectX.schemaName, aspect.schemaName);\n assert.equal(aspectX.className, aspect.className);\n });\n assert.equal(JSON.stringify(multiAspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\n\n const rootSubject = iModel.elements.getRootSubject();\n assert.equal(0, iModel.elements.getAspects(rootSubject.id, \"DgnPlatformTest:TestUniqueAspect\").length, \"Don't expect DgnPlatformTest:TestUniqueAspect aspects on the root Subject\");\n assert.equal(0, iModel.elements.getAspects(rootSubject.id, \"DgnPlatformTest:TestMultiAspect\").length, \"Don't expect DgnPlatformTest:TestMultiAspect aspects on the root Subject\");\n assert.equal(0, iModel.elements.getAspects(rootSubject.id).length, \"Don't expect any aspects on the root Subject\");\n\n // The 'Element' property is introduced by ElementUniqueAspect and ElementMultiAspect, but is not available at the ElementAspect base class.\n // Since we're now using instance queries to query ElementUniqueAspect and ElementMultiAspect directly in getAspects(), we can provide ElementAspect to the function as well.\n const aspectList = `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}},\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`.replace(/\\s+/g, \"\");\n\n const aspects: ElementAspect[] = iModel.elements.getAspects(element.id, ElementAspect.classFullName);\n assert.equal(aspects.length, 6);\n assert.equal(JSON.stringify(aspects), aspectList);\n\n const allAspects: ElementAspect[] = iModel.elements.getAspects(element.id);\n assert.equal(allAspects.length, 6);\n assert.equal(JSON.stringify(allAspects), aspectList);\n });\n\n it(\"should be able to insert, update, and delete MultiAspects\", () => {\n const element: Element = iModel.elements.getElement(\"0x17\");\n assert.exists(element);\n assert.isTrue(element instanceof PhysicalElement);\n\n interface Props extends ElementAspectProps { testMultiAspectProperty: string }\n const aspectProps: Props = {\n classFullName: \"DgnPlatformTest:TestMultiAspectNoHandler\",\n element: { id: element.id },\n testMultiAspectProperty: \"MultiAspectInsertTest1\",\n };\n iModel.elements.insertAspect(aspectProps);\n let aspects: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.isAtLeast(aspects.length, 1);\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x21\",\"testMultiAspectProperty\":\"MultiAspectInsertTest1\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n const numAspects = aspects.length;\n\n let found: boolean = false;\n let foundIndex: number = -1;\n for (const aspect of aspects) {\n foundIndex++;\n if (aspect.asAny.testMultiAspectProperty === aspectProps.testMultiAspectProperty) {\n found = true;\n break;\n }\n }\n assert.isTrue(found);\n\n aspects[foundIndex].asAny.testMultiAspectProperty = \"MultiAspectInsertTest1-Updated\";\n iModel.elements.updateAspect(aspects[foundIndex].toJSON());\n\n const aspectsUpdated: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.equal(aspectsUpdated.length, aspects.length);\n assert.equal(aspectsUpdated[foundIndex].asAny.testMultiAspectProperty, \"MultiAspectInsertTest1-Updated\");\n // Check if aspect was updated\n assert.equal(JSON.stringify(aspectsUpdated), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x21\",\"testMultiAspectProperty\":\"MultiAspectInsertTest1-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n\n iModel.elements.deleteAspect(aspects[foundIndex].id);\n aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.equal(numAspects, aspects.length + 1);\n // Check if aspect was deleted\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\n });\n\n it(\"should be able to insert, update, and delete UniqueAspects\", () => {\n const element: Element = iModel.elements.getElement(\"0x17\");\n assert.exists(element);\n assert.isTrue(element instanceof PhysicalElement);\n\n const aspectProps = {\n classFullName: \"DgnPlatformTest:TestUniqueAspectNoHandler\",\n element: { id: element.id },\n testUniqueAspectProperty: \"UniqueAspectInsertTest1\",\n };\n iModel.elements.insertAspect(aspectProps);\n const aspects: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.isTrue(aspects.length === 1);\n assert.equal(aspects[0].asAny.testUniqueAspectProperty, aspectProps.testUniqueAspectProperty);\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"UniqueAspectInsertTest1\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`);\n\n aspects[0].asAny.testUniqueAspectProperty = \"UniqueAspectInsertTest1-Updated\";\n iModel.elements.updateAspect(aspects[0].toJSON());\n const aspectsUpdated: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.equal(aspectsUpdated.length, 1);\n assert.equal(aspectsUpdated[0].asAny.testUniqueAspectProperty, \"UniqueAspectInsertTest1-Updated\");\n assert.equal(JSON.stringify(aspectsUpdated), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"UniqueAspectInsertTest1-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`);\n\n iModel.elements.deleteAspect(aspects[0].id);\n try {\n const noAspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);\n assert.equal(noAspects.length, 0);\n assert.isTrue(false, \"Expected this line to be skipped\");\n } catch (error) {\n assert.isTrue(error instanceof Error);\n }\n });\n\n it(\"should be able to insert ExternalSourceAspects\", () => {\n const fileName = IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ExternalSourceAspect.bim\");\n let iModelDb = SnapshotDb.createEmpty(fileName, { rootSubject: { name: \"ExternalSourceAspect\" } });\n const elementId: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category\", new SubCategoryAppearance());\n assert.isTrue(Id64.isValidId64(elementId));\n\n const aspectProps: ExternalSourceAspectProps = {\n classFullName: ExternalSourceAspect.classFullName,\n element: { id: elementId },\n scope: { id: IModel.rootSubjectId },\n identifier: \"A\",\n kind: \"Letter\",\n checksum: \"1\",\n version: \"1.0\",\n };\n const aspect = new ExternalSourceAspect(aspectProps, iModelDb);\n expect(aspect).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\n iModelDb.elements.insertAspect(aspectProps);\n\n const aspectJson = aspect.toJSON();\n iModelDb.saveChanges();\n iModelDb.close();\n iModelDb = SnapshotDb.openFile(fileName);\n\n const aspects: ElementAspect[] = iModelDb.elements.getAspects(elementId, aspectProps.classFullName);\n assert.equal(aspects.length, 1);\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x21\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"version\":\"1.0\",\"checksum\":\"1\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`);\n expect(aspects[0]).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\n\n expect(aspectJson).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\n\n assert(aspectProps.scope !== undefined);\n const foundAspects = ExternalSourceAspect.findAllBySource(iModelDb, aspectProps.scope.id, aspectProps.kind, aspectProps.identifier);\n assert.equal(foundAspects.length, 1);\n const foundAspect = foundAspects[0];\n assert.equal(foundAspect.aspectId, aspects[0].id);\n assert.equal(foundAspect.elementId, aspect.element.id);\n });\n\n it(\"should be able to insert multiple ExternalSourceAspects\", () => {\n const fileName = IModelTestUtils.prepareOutputFile(\"MultipleElementAspects\", \"ExternalSourceAspect.bim\");\n let iModelDb = SnapshotDb.createEmpty(fileName, { rootSubject: { name: \"MultipleExternalSourceAspects\" } });\n const e1: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category1\", new SubCategoryAppearance());\n const e2: Id64String = SpatialCategory.insert(iModelDb, IModel.dictionaryId, \"Category2\", new SubCategoryAppearance());\n\n const scopeId1 = IModel.rootSubjectId;\n const scopeId2 = e1;\n const kind = \"Letter\";\n const kind2 = \"Kind2\";\n\n const aspectProps: ExternalSourceAspectProps = {\n classFullName: ExternalSourceAspect.classFullName,\n element: { id: \"\" },\n scope: { id: \"\" },\n identifier: \"\",\n kind,\n };\n const a: ExternalSourceAspectProps = { ...aspectProps, identifier: \"A\", scope: { id: scopeId1 } };\n const a2: ExternalSourceAspectProps = { ...aspectProps, identifier: \"A\", scope: { id: scopeId2 } };\n const b: ExternalSourceAspectProps = { ...aspectProps, identifier: \"B\", scope: { id: scopeId1 } };\n const c: ExternalSourceAspectProps = { ...aspectProps, identifier: \"C\", scope: { id: scopeId1 } };\n const ck2: ExternalSourceAspectProps = { ...aspectProps, identifier: \"C\", scope: { id: scopeId1 }, kind: kind2 };\n\n const e1AspectProps: Array<ExternalSourceAspectProps> = [\n { ...a, element: { id: e1 } },\n { ...a, element: { id: e1 } }, // add a second aspect \"A\" in scope1\n { ...a2, element: { id: e1 } }, // add \"A\" in scope2\n { ...b, element: { id: e1 } },\n { ...ck2, element: { id: e1 } },\n ];\n const e2AspectProps: Array<ExternalSourceAspectProps> = [\n { ...a, element: { id: e2 } }, // element2 also has an \"A\" in scope1\n { ...c, element: { id: e2 } },\n ];\n e1AspectProps.forEach((aspect) => iModelDb.elements.insertAspect(aspect));\n e2AspectProps.forEach((aspect) => iModelDb.elements.insertAspect(aspect));\n iModelDb.saveChanges();\n iModelDb.close();\n iModelDb = SnapshotDb.openFile(fileName);\n\n const equalProps = (aspect: ElementAspect, wantProps: ExternalSourceAspectProps): boolean => {\n return (aspect.element.id === wantProps.element.id)\n && (aspect.asAny.scope.id === wantProps.scope.id)\n && (aspect.asAny.scope.relClassName.endsWith(\"ElementScopesExternalSourceIdentifier\"))\n && (aspect.asAny.identifier === wantProps.identifier)\n && (aspect.asAny.kind === wantProps.kind)\n && (aspect.asAny.checksum === wantProps.checksum)\n && (aspect.asAny.version === wantProps.version);\n };\n const findInProps = (have: ElementAspect, wantArray: Array<ExternalSourceAspectProps>): boolean => {\n return wantArray.find((want) => equalProps(have, want)) !== undefined;\n };\n\n const e1Aspects: ElementAspect[] = iModelDb.elements.getAspects(e1, aspectProps.classFullName);\n assert.equal(e1Aspects.length, e1AspectProps.length);\n e1Aspects.forEach((x) => {\n assert.isTrue(findInProps(x, e1AspectProps));\n });\n assert.equal(JSON.stringify(e1Aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x21\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x22\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x23\",\"scope\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x24\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"B\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x25\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"C\",\"kind\":\"Kind2\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n\n const e2Aspects: ElementAspect[] = iModelDb.elements.getAspects(e2, aspectProps.classFullName);\n assert.equal(e2Aspects.length, e2AspectProps.length);\n e2Aspects.forEach((x) => {\n assert.isTrue(findInProps(x, e2AspectProps));\n });\n assert.equal(JSON.stringify(e2Aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x26\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x13\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x27\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"C\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x13\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\n\n const allA = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"A\");\n assert.equal(allA.filter((x) => x.elementId === e1).length, 2, \"there are two A's in scope 1 on e1\");\n assert.equal(allA.filter((x) => x.elementId === e2).length, 1, \"there is one A in scope 1 on e2\");\n assert.equal(allA.length, 3);\n\n const allA2 = ExternalSourceAspect.findAllBySource(iModelDb, scopeId2, kind, \"A\");\n assert.equal(allA2.length, 1);\n assert.equal(allA2[0].elementId, e1, \"there is one A in scope 2 on e1\");\n\n const allB = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"B\");\n assert.equal(allB.length, 1);\n assert.equal(allB[0].elementId, e1, \"there is one B on e1\");\n\n const allC = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"C\");\n assert.equal(allC.length, 1);\n assert.equal(allC[0].elementId, e2, \"there is one C of kind1 on e2\");\n\n const allCK2 = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind2, \"C\");\n assert.equal(allCK2.length, 1);\n assert.equal(allCK2[0].elementId, e1, \"there is one C of kind 2 on e1\");\n\n assert.equal(ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"<notfound>\").length, 0);\n });\n\n it(\"should create ChannelRootAspect with correct relationship class\", async () => {\n const iModelDb = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ChannelRootAspectTest.bim\"), { rootSubject: { name: \"ChannelRootAspectTest\" } });\n\n const testChannelKey = \"test-channel\";\n\n // Enable the test channel\n iModelDb.channels.addAllowedChannel(testChannelKey);\n\n // Create a channel subject using insertChannelSubject\n const subjectId = iModelDb.channels.insertChannelSubject({\n subjectName: \"Test Channel Subject\",\n channelKey: testChannelKey,\n });\n iModelDb.saveChanges();\n assert.isTrue(Id64.isValidId64(subjectId), \"Subject ID should be valid\");\n\n // Get the ChannelRootAspect\n const aspects = iModelDb.elements.getAspects(subjectId, \"BisCore:ChannelRootAspect\");\n assert.equal(aspects.length, 1, \"Should be exactly one as it's a unique aspect\");\n\n const aspect = aspects[0];\n assert.exists(aspect);\n assert.equal(aspect.classFullName, \"BisCore:ChannelRootAspect\", \"Aspect class should be ChannelRootAspect\");\n\n // Verify the relationship class\n expect(aspect.element.relClassName).to.equal(\"BisCore.ElementOwnsChannelRootAspect\");\n assert.equal((aspect as any).owner, testChannelKey, \"Channel owner should match the channel key\");\n\n // Query the db to confirm the relationship class\n const reader = iModelDb.createQueryReader(\"select ec_classname(Element.RelECClassId) as relClassName from BisCore.ChannelRootAspect\");\n expect(await reader.step()).to.be.true;\n expect(reader.current.relClassName).to.equal(\"BisCore:ElementOwnsChannelRootAspect\");\n\n iModelDb.close();\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ElementAspect.test.js","sourceRoot":"","sources":["../../../../src/test/element/ElementAspect.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 { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { ElementAspectProps, ExternalSourceAspectProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\nimport {\r\n Element, ElementAspect, ElementMultiAspect, ElementUniqueAspect, ExternalSourceAspect, PhysicalElement, SnapshotDb, SpatialCategory,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"ElementAspect\", () => {\r\n\r\n let iModel: SnapshotDb;\r\n\r\n before(() => {\r\n // NOTE: see ElementAspectTests.PresentationRuleScenarios in DgnPlatform\\Tests\\DgnProject\\NonPublished\\ElementAspect_Test.cpp for how ElementAspectTest.bim was created\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"ElementAspectTest.bim\");\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ElementAspectTest.bim\");\r\n iModel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\r\n });\r\n\r\n after(() => {\r\n iModel.close();\r\n });\r\n\r\n it(\"should be able to get aspects from test file\", () => {\r\n const element = iModel.elements.getElement(\"0x17\");\r\n assert.exists(element);\r\n assert.isTrue(element instanceof PhysicalElement);\r\n\r\n const aspect1: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestUniqueAspectNoHandler\")[0];\r\n assert.exists(aspect1);\r\n assert.isTrue(aspect1 instanceof ElementUniqueAspect);\r\n assert.equal(aspect1.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\r\n assert.equal(aspect1.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\r\n assert.equal(aspect1.asAny.length, 1);\r\n assert.equal(JSON.stringify(aspect1), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n // Test getAspects with dot separator\r\n const aspect1DotSeparator: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestUniqueAspectNoHandler\")[0];\r\n assert.exists(aspect1DotSeparator);\r\n assert.isTrue(aspect1DotSeparator instanceof ElementUniqueAspect);\r\n assert.equal(aspect1DotSeparator.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\r\n assert.equal(aspect1DotSeparator.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\r\n assert.equal(aspect1DotSeparator.asAny.length, 1);\r\n assert.equal(JSON.stringify(aspect1DotSeparator), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n // cross-check getAspects against getAspect\r\n const aspect1X: ElementAspect = iModel.elements.getAspect(aspect1.id);\r\n assert.exists(aspect1X);\r\n assert.isTrue(aspect1X instanceof ElementUniqueAspect);\r\n assert.equal(aspect1X.classFullName, \"DgnPlatformTest:TestUniqueAspectNoHandler\");\r\n assert.equal(aspect1X.asAny.testUniqueAspectProperty, \"Aspect1-Updated\");\r\n assert.equal(aspect1X.asAny.length, 1);\r\n assert.equal(JSON.stringify(aspect1X), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n const aspect2: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestUniqueAspect\")[0];\r\n assert.exists(aspect2);\r\n assert.isTrue(aspect2 instanceof ElementUniqueAspect);\r\n assert.equal(aspect2.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\r\n assert.equal(aspect2.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\r\n assert.isUndefined(aspect2.asAny.length);\r\n assert.equal(JSON.stringify(aspect2), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n // Test getAspects with dot separator\r\n const aspect2DotSeparator: ElementAspect = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestUniqueAspect\")[0];\r\n assert.exists(aspect2DotSeparator);\r\n assert.isTrue(aspect2DotSeparator instanceof ElementUniqueAspect);\r\n assert.equal(aspect2DotSeparator.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\r\n assert.equal(aspect2DotSeparator.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\r\n assert.isUndefined(aspect2DotSeparator.asAny.length);\r\n assert.equal(JSON.stringify(aspect2DotSeparator), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n // cross-check getAspects against getAspect\r\n const aspect2X: ElementAspect = iModel.elements.getAspect(aspect2.id);\r\n assert.exists(aspect2X);\r\n assert.isTrue(aspect2X instanceof ElementUniqueAspect);\r\n assert.equal(aspect2X.classFullName, \"DgnPlatformTest:TestUniqueAspect\");\r\n assert.equal(aspect2X.asAny.testUniqueAspectProperty, \"Aspect2-Updated\");\r\n assert.isUndefined(aspect2X.asAny.length);\r\n assert.equal(JSON.stringify(aspect2X), `{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}`);\r\n\r\n const uniqueAspects: ElementUniqueAspect[] = iModel.elements.getAspects(element.id, ElementUniqueAspect.classFullName);\r\n assert.equal(uniqueAspects.length, 2);\r\n uniqueAspects.forEach((aspect) => {\r\n assert.isTrue(aspect.classFullName === aspect1.classFullName || aspect.classFullName === aspect2.classFullName);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.exists(aspectX);\r\n assert.equal(aspectX.schemaName, aspect.schemaName);\r\n assert.equal(aspectX.className, aspect.className);\r\n });\r\n assert.equal(JSON.stringify(uniqueAspects), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const multiAspectsA: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestMultiAspectNoHandler\");\r\n assert.exists(multiAspectsA);\r\n assert.isArray(multiAspectsA);\r\n assert.equal(multiAspectsA.length, 2);\r\n multiAspectsA.forEach((aspect) => {\r\n assert.isTrue(aspect instanceof ElementMultiAspect);\r\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\r\n assert.equal(aspect.className, \"TestMultiAspectNoHandler\");\r\n assert.exists(aspect.asAny.testMultiAspectProperty);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.exists(aspectX);\r\n assert.equal(aspectX.schemaName, aspect.schemaName);\r\n assert.equal(aspectX.className, aspect.className);\r\n assert.exists(aspectX.asAny.testMultiAspectProperty);\r\n assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);\r\n });\r\n assert.equal(JSON.stringify(multiAspectsA), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n // Test getAspects with dot separator\r\n const multiAspectsADotSeparator: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest.TestMultiAspectNoHandler\");\r\n assert.exists(multiAspectsADotSeparator);\r\n assert.isArray(multiAspectsADotSeparator);\r\n assert.equal(multiAspectsADotSeparator.length, 2);\r\n multiAspectsADotSeparator.forEach((aspect) => {\r\n assert.isTrue(aspect instanceof ElementMultiAspect);\r\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\r\n assert.equal(aspect.className, \"TestMultiAspectNoHandler\");\r\n assert.exists(aspect.asAny.testMultiAspectProperty);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.exists(aspectX);\r\n assert.equal(aspectX.schemaName, aspect.schemaName);\r\n assert.equal(aspectX.className, aspect.className);\r\n assert.exists(aspectX.asAny.testMultiAspectProperty);\r\n assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);\r\n });\r\n assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const multiAspectsB: ElementAspect[] = iModel.elements.getAspects(element.id, \"DgnPlatformTest:TestMultiAspect\");\r\n assert.exists(multiAspectsB);\r\n assert.isArray(multiAspectsB);\r\n assert.equal(multiAspectsB.length, 2);\r\n multiAspectsB.forEach((aspect) => {\r\n assert.isTrue(aspect instanceof ElementMultiAspect);\r\n assert.equal(aspect.schemaName, \"DgnPlatformTest\");\r\n assert.equal(aspect.className, \"TestMultiAspect\");\r\n assert.exists(aspect.asAny.testMultiAspectProperty);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.isTrue(aspectX instanceof ElementMultiAspect);\r\n assert.equal(aspectX.schemaName, \"DgnPlatformTest\");\r\n assert.equal(aspectX.className, \"TestMultiAspect\");\r\n assert.exists(aspectX.asAny.testMultiAspectProperty);\r\n });\r\n assert.equal(JSON.stringify(multiAspectsB), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const multiAspects: ElementAspect[] = iModel.elements.getAspects(element.id, ElementMultiAspect.classFullName);\r\n assert.equal(multiAspects.length, 4);\r\n multiAspects.forEach((aspect) => {\r\n assert.isTrue(aspect.classFullName === multiAspectsA[0].classFullName || aspect.classFullName === multiAspectsB[0].classFullName);\r\n // cross-check against getting the aspects individually\r\n const aspectX: ElementAspect = iModel.elements.getAspect(aspect.id);\r\n assert.exists(aspectX);\r\n assert.equal(aspectX.schemaName, aspect.schemaName);\r\n assert.equal(aspectX.className, aspect.className);\r\n });\r\n assert.equal(JSON.stringify(multiAspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const rootSubject = iModel.elements.getRootSubject();\r\n assert.equal(0, iModel.elements.getAspects(rootSubject.id, \"DgnPlatformTest:TestUniqueAspect\").length, \"Don't expect DgnPlatformTest:TestUniqueAspect aspects on the root Subject\");\r\n assert.equal(0, iModel.elements.getAspects(rootSubject.id, \"DgnPlatformTest:TestMultiAspect\").length, \"Don't expect DgnPlatformTest:TestMultiAspect aspects on the root Subject\");\r\n assert.equal(0, iModel.elements.getAspects(rootSubject.id).length, \"Don't expect any aspects on the root Subject\");\r\n\r\n // The 'Element' property is introduced by ElementUniqueAspect and ElementMultiAspect, but is not available at the ElementAspect base class.\r\n // Since we're now using instance queries to query ElementUniqueAspect and ElementMultiAspect directly in getAspects(), we can provide ElementAspect to the function as well.\r\n const aspectList = `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x2\",\"testMultiAspectProperty\":\"Aspect5-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspect\",\"id\":\"0x3\",\"testMultiAspectProperty\":\"Aspect6-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspect\",\"id\":\"0x1\",\"testUniqueAspectProperty\":\"Aspect2-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"Aspect1-Updated\",\"length\":1,\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`.replace(/\\s+/g, \"\");\r\n\r\n const aspects: ElementAspect[] = iModel.elements.getAspects(element.id, ElementAspect.classFullName);\r\n assert.equal(aspects.length, 6);\r\n assert.equal(JSON.stringify(aspects), aspectList);\r\n\r\n const allAspects: ElementAspect[] = iModel.elements.getAspects(element.id);\r\n assert.equal(allAspects.length, 6);\r\n assert.equal(JSON.stringify(allAspects), aspectList);\r\n });\r\n\r\n it(\"should be able to insert, update, and delete MultiAspects\", () => {\r\n const element: Element = iModel.elements.getElement(\"0x17\");\r\n assert.exists(element);\r\n assert.isTrue(element instanceof PhysicalElement);\r\n\r\n interface Props extends ElementAspectProps { testMultiAspectProperty: string }\r\n const aspectProps: Props = {\r\n classFullName: \"DgnPlatformTest:TestMultiAspectNoHandler\",\r\n element: { id: element.id },\r\n testMultiAspectProperty: \"MultiAspectInsertTest1\",\r\n };\r\n withEditTxn(iModel, (txn) => txn.insertAspect(aspectProps));\r\n let aspects: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.isAtLeast(aspects.length, 1);\r\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x21\",\"testMultiAspectProperty\":\"MultiAspectInsertTest1\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n const numAspects = aspects.length;\r\n\r\n let found: boolean = false;\r\n let foundIndex: number = -1;\r\n for (const aspect of aspects) {\r\n foundIndex++;\r\n if (aspect.asAny.testMultiAspectProperty === aspectProps.testMultiAspectProperty) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n assert.isTrue(found);\r\n\r\n aspects[foundIndex].asAny.testMultiAspectProperty = \"MultiAspectInsertTest1-Updated\";\r\n withEditTxn(iModel, (txn) => txn.updateAspect(aspects[foundIndex].toJSON()));\r\n\r\n const aspectsUpdated: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.equal(aspectsUpdated.length, aspects.length);\r\n assert.equal(aspectsUpdated[foundIndex].asAny.testMultiAspectProperty, \"MultiAspectInsertTest1-Updated\");\r\n // Check if aspect was updated\r\n assert.equal(JSON.stringify(aspectsUpdated), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x21\",\"testMultiAspectProperty\":\"MultiAspectInsertTest1-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n withEditTxn(iModel, (txn) => txn.deleteAspect(aspects[foundIndex].id));\r\n aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.equal(numAspects, aspects.length + 1);\r\n // Check if aspect was deleted\r\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x4\",\"testMultiAspectProperty\":\"Aspect3-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}},\r\n {\"classFullName\":\"DgnPlatformTest:TestMultiAspectNoHandler\",\"id\":\"0x5\",\"testMultiAspectProperty\":\"Aspect4-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"DgnPlatformTest.TestElement\"}}]`.replace(/\\s+/g, \"\"));\r\n });\r\n\r\n it(\"should be able to insert, update, and delete UniqueAspects\", () => {\r\n const element: Element = iModel.elements.getElement(\"0x17\");\r\n assert.exists(element);\r\n assert.isTrue(element instanceof PhysicalElement);\r\n\r\n const aspectProps = {\r\n classFullName: \"DgnPlatformTest:TestUniqueAspectNoHandler\",\r\n element: { id: element.id },\r\n testUniqueAspectProperty: \"UniqueAspectInsertTest1\",\r\n };\r\n withEditTxn(iModel, (txn) => txn.insertAspect(aspectProps));\r\n const aspects: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.isTrue(aspects.length === 1);\r\n assert.equal(aspects[0].asAny.testUniqueAspectProperty, aspectProps.testUniqueAspectProperty);\r\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"UniqueAspectInsertTest1\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`);\r\n\r\n aspects[0].asAny.testUniqueAspectProperty = \"UniqueAspectInsertTest1-Updated\";\r\n withEditTxn(iModel, (txn) => txn.updateAspect(aspects[0].toJSON()));\r\n const aspectsUpdated: ElementAspect[] = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.equal(aspectsUpdated.length, 1);\r\n assert.equal(aspectsUpdated[0].asAny.testUniqueAspectProperty, \"UniqueAspectInsertTest1-Updated\");\r\n assert.equal(JSON.stringify(aspectsUpdated), `[{\"classFullName\":\"DgnPlatformTest:TestUniqueAspectNoHandler\",\"id\":\"0x6\",\"testUniqueAspectProperty\":\"UniqueAspectInsertTest1-Updated\",\"element\":{\"id\":\"0x17\",\"relClassName\":\"BisCore.ElementOwnsUniqueAspect\"}}]`);\r\n\r\n withEditTxn(iModel, (txn) => txn.deleteAspect(aspects[0].id));\r\n try {\r\n const noAspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);\r\n assert.equal(noAspects.length, 0);\r\n assert.isTrue(false, \"Expected this line to be skipped\");\r\n } catch (error) {\r\n assert.isTrue(error instanceof Error);\r\n }\r\n });\r\n\r\n it(\"should be able to insert ExternalSourceAspects\", () => {\r\n const fileName = IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ExternalSourceAspect.bim\");\r\n let iModelDb = SnapshotDb.createEmpty(fileName, { rootSubject: { name: \"ExternalSourceAspect\" } });\r\n let elementId!: Id64String;\r\n let aspectProps!: ExternalSourceAspectProps;\r\n const aspectJson = withEditTxn(iModelDb, (txn) => {\r\n elementId = SpatialCategory.insert(txn, IModel.dictionaryId, \"Category\", new SubCategoryAppearance());\r\n assert.isTrue(Id64.isValidId64(elementId));\r\n\r\n aspectProps = {\r\n classFullName: ExternalSourceAspect.classFullName,\r\n element: { id: elementId },\r\n scope: { id: IModel.rootSubjectId },\r\n identifier: \"A\",\r\n kind: \"Letter\",\r\n checksum: \"1\",\r\n version: \"1.0\",\r\n };\r\n const aspect = new ExternalSourceAspect(aspectProps, iModelDb);\r\n expect(aspect).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\r\n txn.insertAspect(aspectProps);\r\n return aspect.toJSON();\r\n });\r\n iModelDb.close();\r\n iModelDb = SnapshotDb.openFile(fileName);\r\n\r\n const aspects: ElementAspect[] = iModelDb.elements.getAspects(elementId, aspectProps.classFullName);\r\n assert.equal(aspects.length, 1);\r\n assert.equal(JSON.stringify(aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x21\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"version\":\"1.0\",\"checksum\":\"1\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`);\r\n expect(aspects[0]).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\r\n\r\n expect(aspectJson).to.deep.subsetEqual(aspectProps, { normalizeClassNameProps: true });\r\n\r\n assert(aspectProps.scope !== undefined);\r\n const foundAspects = ExternalSourceAspect.findAllBySource(iModelDb, aspectProps.scope.id, aspectProps.kind, aspectProps.identifier);\r\n assert.equal(foundAspects.length, 1);\r\n const foundAspect = foundAspects[0];\r\n assert.equal(foundAspect.aspectId, aspects[0].id);\r\n assert.equal(foundAspect.elementId, aspectProps.element.id);\r\n });\r\n\r\n it(\"should be able to insert multiple ExternalSourceAspects\", () => {\r\n const fileName = IModelTestUtils.prepareOutputFile(\"MultipleElementAspects\", \"ExternalSourceAspect.bim\");\r\n let iModelDb = SnapshotDb.createEmpty(fileName, { rootSubject: { name: \"MultipleExternalSourceAspects\" } });\r\n let e1!: Id64String;\r\n let e2!: Id64String;\r\n\r\n const scopeId1 = IModel.rootSubjectId;\r\n const kind = \"Letter\";\r\n const kind2 = \"Kind2\";\r\n const { e1AspectProps, e2AspectProps } = withEditTxn(iModelDb, (txn) => {\r\n e1 = SpatialCategory.insert(txn, IModel.dictionaryId, \"Category1\", new SubCategoryAppearance());\r\n e2 = SpatialCategory.insert(txn, IModel.dictionaryId, \"Category2\", new SubCategoryAppearance());\r\n const scopeId2 = e1;\r\n const aspectProps: ExternalSourceAspectProps = {\r\n classFullName: ExternalSourceAspect.classFullName,\r\n element: { id: \"\" },\r\n scope: { id: \"\" },\r\n identifier: \"\",\r\n kind,\r\n };\r\n const a: ExternalSourceAspectProps = { ...aspectProps, identifier: \"A\", scope: { id: scopeId1 } };\r\n const a2: ExternalSourceAspectProps = { ...aspectProps, identifier: \"A\", scope: { id: scopeId2 } };\r\n const b: ExternalSourceAspectProps = { ...aspectProps, identifier: \"B\", scope: { id: scopeId1 } };\r\n const c: ExternalSourceAspectProps = { ...aspectProps, identifier: \"C\", scope: { id: scopeId1 } };\r\n const ck2: ExternalSourceAspectProps = { ...aspectProps, identifier: \"C\", scope: { id: scopeId1 }, kind: kind2 };\r\n\r\n const e1Props: Array<ExternalSourceAspectProps> = [\r\n { ...a, element: { id: e1 } },\r\n { ...a, element: { id: e1 } }, // add a second aspect \"A\" in scope1\r\n { ...a2, element: { id: e1 } }, // add \"A\" in scope2\r\n { ...b, element: { id: e1 } },\r\n { ...ck2, element: { id: e1 } },\r\n ];\r\n const e2Props: Array<ExternalSourceAspectProps> = [\r\n { ...a, element: { id: e2 } }, // element2 also has an \"A\" in scope1\r\n { ...c, element: { id: e2 } },\r\n ];\r\n e1Props.forEach((aspect) => txn.insertAspect(aspect));\r\n e2Props.forEach((aspect) => txn.insertAspect(aspect));\r\n return { e1AspectProps: e1Props, e2AspectProps: e2Props };\r\n });\r\n iModelDb.close();\r\n iModelDb = SnapshotDb.openFile(fileName);\r\n\r\n const equalProps = (aspect: ElementAspect, wantProps: ExternalSourceAspectProps): boolean => {\r\n return (aspect.element.id === wantProps.element.id)\r\n && (aspect.asAny.scope.id === wantProps.scope.id)\r\n && (aspect.asAny.scope.relClassName.endsWith(\"ElementScopesExternalSourceIdentifier\"))\r\n && (aspect.asAny.identifier === wantProps.identifier)\r\n && (aspect.asAny.kind === wantProps.kind)\r\n && (aspect.asAny.checksum === wantProps.checksum)\r\n && (aspect.asAny.version === wantProps.version);\r\n };\r\n const findInProps = (have: ElementAspect, wantArray: Array<ExternalSourceAspectProps>): boolean => {\r\n return wantArray.find((want) => equalProps(have, want)) !== undefined;\r\n };\r\n\r\n const e1Aspects: ElementAspect[] = iModelDb.elements.getAspects(e1, ExternalSourceAspect.classFullName);\r\n assert.equal(e1Aspects.length, e1AspectProps.length);\r\n e1Aspects.forEach((x) => {\r\n assert.isTrue(findInProps(x, e1AspectProps));\r\n });\r\n assert.equal(JSON.stringify(e1Aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x21\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x22\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x23\",\"scope\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x24\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"B\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x25\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"C\",\"kind\":\"Kind2\",\"element\":{\"id\":\"0x11\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const e2Aspects: ElementAspect[] = iModelDb.elements.getAspects(e2, ExternalSourceAspect.classFullName);\r\n assert.equal(e2Aspects.length, e2AspectProps.length);\r\n e2Aspects.forEach((x) => {\r\n assert.isTrue(findInProps(x, e2AspectProps));\r\n });\r\n assert.equal(JSON.stringify(e2Aspects), `[{\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x26\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"A\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x13\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}},\r\n {\"classFullName\":\"BisCore:ExternalSourceAspect\",\"id\":\"0x27\",\"scope\":{\"id\":\"0x1\",\"relClassName\":\"BisCore.ElementScopesExternalSourceIdentifier\"},\"identifier\":\"C\",\"kind\":\"Letter\",\"element\":{\"id\":\"0x13\",\"relClassName\":\"BisCore.ElementOwnsMultiAspects\"}}]`.replace(/\\s+/g, \"\"));\r\n\r\n const allA = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"A\");\r\n assert.equal(allA.filter((x) => x.elementId === e1).length, 2, \"there are two A's in scope 1 on e1\");\r\n assert.equal(allA.filter((x) => x.elementId === e2).length, 1, \"there is one A in scope 1 on e2\");\r\n assert.equal(allA.length, 3);\r\n\r\n const allA2 = ExternalSourceAspect.findAllBySource(iModelDb, e1, kind, \"A\");\r\n assert.equal(allA2.length, 1);\r\n assert.equal(allA2[0].elementId, e1, \"there is one A in scope 2 on e1\");\r\n\r\n const allB = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"B\");\r\n assert.equal(allB.length, 1);\r\n assert.equal(allB[0].elementId, e1, \"there is one B on e1\");\r\n\r\n const allC = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"C\");\r\n assert.equal(allC.length, 1);\r\n assert.equal(allC[0].elementId, e2, \"there is one C of kind1 on e2\");\r\n\r\n const allCK2 = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind2, \"C\");\r\n assert.equal(allCK2.length, 1);\r\n assert.equal(allCK2[0].elementId, e1, \"there is one C of kind 2 on e1\");\r\n\r\n assert.equal(ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, \"<notfound>\").length, 0);\r\n });\r\n\r\n it(\"should create ChannelRootAspect with correct relationship class\", async () => {\r\n const iModelDb = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"ElementAspect\", \"ChannelRootAspectTest.bim\"), { rootSubject: { name: \"ChannelRootAspectTest\" } });\r\n\r\n const testChannelKey = \"test-channel\";\r\n\r\n // Enable the test channel\r\n iModelDb.channels.addAllowedChannel(testChannelKey);\r\n\r\n // Create a channel subject using insertChannelSubject with explicit txn\r\n const subjectId = withEditTxn(iModelDb, (txn) => iModelDb.channels.insertChannelSubject({\r\n subjectName: \"Test Channel Subject\",\r\n channelKey: testChannelKey,\r\n txn,\r\n }));\r\n assert.isTrue(Id64.isValidId64(subjectId), \"Subject Id should be valid\");\r\n\r\n // Get the ChannelRootAspect\r\n const aspects = iModelDb.elements.getAspects(subjectId, \"BisCore:ChannelRootAspect\");\r\n assert.equal(aspects.length, 1, \"Should be exactly one as it's a unique aspect\");\r\n\r\n const aspect = aspects[0];\r\n assert.exists(aspect);\r\n assert.equal(aspect.classFullName, \"BisCore:ChannelRootAspect\", \"Aspect class should be ChannelRootAspect\");\r\n\r\n // Verify the relationship class\r\n expect(aspect.element.relClassName).to.equal(\"BisCore.ElementOwnsChannelRootAspect\");\r\n assert.equal((aspect as any).owner, testChannelKey, \"Channel owner should match the channel key\");\r\n\r\n // Query the db to confirm the relationship class\r\n const reader = iModelDb.createQueryReader(\"select ec_classname(Element.RelECClassId) as relClassName from BisCore.ChannelRootAspect\");\r\n expect(await reader.step()).to.be.true;\r\n expect(reader.current.relClassName).to.equal(\"BisCore:ElementOwnsChannelRootAspect\");\r\n\r\n iModelDb.close();\r\n });\r\n});\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementDependencyGraph.test.d.ts","sourceRoot":"","sources":["../../../../src/test/element/ElementDependencyGraph.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ElementDependencyGraph.test.d.ts","sourceRoot":"","sources":["../../../../src/test/element/ElementDependencyGraph.test.ts"],"names":[],"mappings":"AAwBA,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQpE"}
|
|
@@ -7,11 +7,15 @@ import { assert } from "chai";
|
|
|
7
7
|
import * as fs from "fs";
|
|
8
8
|
import * as path from "path";
|
|
9
9
|
import { Guid, Logger, OpenMode } from "@itwin/core-bentley";
|
|
10
|
+
import { EditTxn, withEditTxn } from "../../EditTxn";
|
|
10
11
|
import { CodeScopeSpec, CodeSpec, ColorByName, DomainOptions, GeometryStreamBuilder, IModel, SubCategoryAppearance, } from "@itwin/core-common";
|
|
11
12
|
import { LineSegment3d, Point3d, YawPitchRollAngles } from "@itwin/core-geometry";
|
|
12
13
|
import { _nativeDb, ChannelControl, IModelJsFs, PhysicalModel, SpatialCategory, StandaloneDb } from "../../core-backend";
|
|
13
14
|
import { IModelTestUtils, TestElementDrivesElement, TestPhysicalObject } from "../IModelTestUtils";
|
|
14
15
|
import { IModelNative } from "../../internal/NativePlatform";
|
|
16
|
+
function saveTestChanges(txn, args) {
|
|
17
|
+
txn.saveChanges(args);
|
|
18
|
+
}
|
|
15
19
|
export function copyFile(newName, pathToCopy) {
|
|
16
20
|
const newPath = path.join(path.dirname(pathToCopy), newName);
|
|
17
21
|
try {
|
|
@@ -36,6 +40,7 @@ class DependencyCallbackResults {
|
|
|
36
40
|
}
|
|
37
41
|
class TestHelper {
|
|
38
42
|
db;
|
|
43
|
+
txn;
|
|
39
44
|
dres = new DependencyCallbackResults();
|
|
40
45
|
removals = [];
|
|
41
46
|
codeSpecId = "";
|
|
@@ -49,11 +54,15 @@ class TestHelper {
|
|
|
49
54
|
this.db = StandaloneDb.openFile(writeDbFileName, OpenMode.ReadWrite);
|
|
50
55
|
assert.isTrue(this.db !== undefined);
|
|
51
56
|
this.db.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
57
|
+
this.txn = new EditTxn(this.db, `${testName} element dependency graph`);
|
|
58
|
+
this.txn.start();
|
|
52
59
|
this.db[_nativeDb].enableTxnTesting();
|
|
53
60
|
assert.equal(this.db[_nativeDb].addChildPropagatesChangesToParentRelationship("TestBim", "ChildPropagatesChangesToParent"), 0);
|
|
54
61
|
this.setElementDependencyGraphCallbacks();
|
|
55
62
|
}
|
|
56
63
|
terminate() {
|
|
64
|
+
if (this.txn.isActive)
|
|
65
|
+
this.txn.end("abandon");
|
|
57
66
|
this.db.close();
|
|
58
67
|
assert.isFalse(this.db.isOpen);
|
|
59
68
|
this.removeElementDependencyGraphCallbacks();
|
|
@@ -76,12 +85,12 @@ class TestHelper {
|
|
|
76
85
|
};
|
|
77
86
|
}
|
|
78
87
|
insertElement(codeValue, parent) {
|
|
79
|
-
return this.
|
|
88
|
+
return this.txn.insertElement(this.makeElement(codeValue, parent));
|
|
80
89
|
}
|
|
81
90
|
updateElement(elid, newLabel) {
|
|
82
91
|
const ed2 = this.db.elements.getElement({ id: elid });
|
|
83
92
|
ed2.userLabel = newLabel;
|
|
84
|
-
this.
|
|
93
|
+
this.txn.updateElement(ed2.toJSON());
|
|
85
94
|
}
|
|
86
95
|
fmtElem(elId) { return this.db.elements.getElement(elId).code.value; }
|
|
87
96
|
fmtRel(props) { return `${props.classFullName} ${this.fmtElem(props.sourceId)} --> ${this.fmtElem(props.targetId)}`; }
|
|
@@ -89,21 +98,21 @@ class TestHelper {
|
|
|
89
98
|
this.dres = new DependencyCallbackResults();
|
|
90
99
|
}
|
|
91
100
|
setElementDependencyGraphCallbacks() {
|
|
92
|
-
this.removals.push(TestElementDrivesElement.deletedDependency.addListener((
|
|
93
|
-
Logger.logTrace("EDGTest", `_onDeletedDependency ${this.fmtRel(
|
|
94
|
-
this.dres.deletedDependency.push(
|
|
101
|
+
this.removals.push(TestElementDrivesElement.deletedDependency.addListener((arg) => {
|
|
102
|
+
Logger.logTrace("EDGTest", `_onDeletedDependency ${this.fmtRel(arg.props)}`);
|
|
103
|
+
this.dres.deletedDependency.push(arg.props);
|
|
95
104
|
}));
|
|
96
|
-
this.removals.push(TestElementDrivesElement.rootChanged.addListener((
|
|
97
|
-
Logger.logTrace("EDGTest", `_onRootChanged ${this.fmtRel(
|
|
98
|
-
this.dres.rootChanged.push(
|
|
105
|
+
this.removals.push(TestElementDrivesElement.rootChanged.addListener((arg) => {
|
|
106
|
+
Logger.logTrace("EDGTest", `_onRootChanged ${this.fmtRel(arg.props)}`);
|
|
107
|
+
this.dres.rootChanged.push(arg.props);
|
|
99
108
|
}));
|
|
100
|
-
this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((
|
|
101
|
-
Logger.logTrace("EDGTest", `_onBeforeOutputsHandled ${this.fmtElem(elId)}`);
|
|
102
|
-
this.dres.beforeOutputs.push(elId);
|
|
109
|
+
this.removals.push(TestPhysicalObject.beforeOutputsHandled.addListener((arg) => {
|
|
110
|
+
Logger.logTrace("EDGTest", `_onBeforeOutputsHandled ${this.fmtElem(arg.elId)}`);
|
|
111
|
+
this.dres.beforeOutputs.push(arg.elId);
|
|
103
112
|
}));
|
|
104
|
-
this.removals.push(TestPhysicalObject.allInputsHandled.addListener((
|
|
105
|
-
Logger.logTrace("EDGTest", `_onAllInputsHandled ${this.fmtElem(elId)}`);
|
|
106
|
-
this.dres.allInputsHandled.push(elId);
|
|
113
|
+
this.removals.push(TestPhysicalObject.allInputsHandled.addListener((arg) => {
|
|
114
|
+
Logger.logTrace("EDGTest", `_onAllInputsHandled ${this.fmtElem(arg.elId)}`);
|
|
115
|
+
this.dres.allInputsHandled.push(arg.elId);
|
|
107
116
|
}));
|
|
108
117
|
}
|
|
109
118
|
removeElementDependencyGraphCallbacks() {
|
|
@@ -134,11 +143,10 @@ describe("ElementDependencyGraph", () => {
|
|
|
134
143
|
const imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);
|
|
135
144
|
await imodel.importSchemas([schemaFileName]); // will throw an exception if import fails
|
|
136
145
|
imodel.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
137
|
-
const physicalModelId = PhysicalModel.insert(
|
|
138
|
-
const codeSpecId = imodel.codeSpecs.insert(CodeSpec.create(imodel, "EDGTestCodeSpec", CodeScopeSpec.Type.Model));
|
|
139
|
-
const spatialCategoryId = SpatialCategory.insert(
|
|
146
|
+
const physicalModelId = withEditTxn(imodel, (txn) => PhysicalModel.insert(txn, IModel.rootSubjectId, "EDGTestModel"));
|
|
147
|
+
const codeSpecId = withEditTxn(imodel, (txn) => imodel.codeSpecs.insert(txn, CodeSpec.create(imodel, "EDGTestCodeSpec", CodeScopeSpec.Type.Model)));
|
|
148
|
+
const spatialCategoryId = withEditTxn(imodel, (txn) => SpatialCategory.insert(txn, IModel.dictionaryId, "EDGTestSpatialCategory", new SubCategoryAppearance({ color: ColorByName.darkRed })));
|
|
140
149
|
dbInfo = { physicalModelId, codeSpecId, spatialCategoryId, seedFileName: testFileName };
|
|
141
|
-
imodel.saveChanges("");
|
|
142
150
|
imodel[_nativeDb].deleteAllTxns();
|
|
143
151
|
imodel.close();
|
|
144
152
|
});
|
|
@@ -150,22 +158,22 @@ describe("ElementDependencyGraph", () => {
|
|
|
150
158
|
const e1id = helper.insertElement("e1");
|
|
151
159
|
const e2id = helper.insertElement("e2");
|
|
152
160
|
const e3id = helper.insertElement("e3");
|
|
153
|
-
helper.
|
|
161
|
+
saveTestChanges(helper.txn); // get the elements into the iModel
|
|
154
162
|
const ede_1_2 = TestElementDrivesElement.create(helper.db, e1id, e2id);
|
|
155
163
|
const ede_2_3 = TestElementDrivesElement.create(helper.db, e2id, e3id);
|
|
156
164
|
for (const ede of [ede_1_2, ede_2_3]) {
|
|
157
|
-
ede.
|
|
165
|
+
ede.id = helper.txn.insertRelationship(ede.toJSON());
|
|
158
166
|
}
|
|
159
167
|
// The full graph:
|
|
160
168
|
// e1 --> e2 --> e3
|
|
161
169
|
helper.resetDependencyResults();
|
|
162
|
-
helper.
|
|
170
|
+
saveTestChanges(helper.txn); // this will react to EDE inserts only.
|
|
163
171
|
assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
|
|
164
172
|
assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
|
|
165
173
|
assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.
|
|
166
174
|
helper.updateElement(e1id, "change e1");
|
|
167
175
|
helper.resetDependencyResults();
|
|
168
|
-
helper.
|
|
176
|
+
saveTestChanges(helper.txn);
|
|
169
177
|
assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
|
|
170
178
|
assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id]);
|
|
171
179
|
assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON()]);
|
|
@@ -175,26 +183,26 @@ describe("ElementDependencyGraph", () => {
|
|
|
175
183
|
const helper = new TestHelper("Parents", dbInfo);
|
|
176
184
|
const p2id = helper.insertElement("p2");
|
|
177
185
|
const e1id = helper.insertElement("e1", { id: p2id, relClassName: "TestBim.ChildPropagatesChangesToParent" });
|
|
178
|
-
helper.
|
|
186
|
+
saveTestChanges(helper.txn); // get the elements into the iModel
|
|
179
187
|
// The full graph:
|
|
180
188
|
// .-parent-> p2
|
|
181
189
|
// /
|
|
182
190
|
// e1
|
|
183
191
|
//
|
|
184
192
|
helper.resetDependencyResults();
|
|
185
|
-
helper.
|
|
193
|
+
saveTestChanges(helper.txn);
|
|
186
194
|
assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
|
|
187
195
|
assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
|
|
188
196
|
assertRels(helper.dres.rootChanged, []); // we send out this callback even if only the relationship itself is new or changed.
|
|
189
197
|
helper.updateElement(e1id, "change e1");
|
|
190
198
|
helper.resetDependencyResults();
|
|
191
|
-
helper.
|
|
199
|
+
saveTestChanges(helper.txn);
|
|
192
200
|
assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
|
|
193
201
|
assert.deepEqual(helper.dres.allInputsHandled, [p2id]);
|
|
194
202
|
assertRels(helper.dres.rootChanged, []);
|
|
195
203
|
helper.updateElement(p2id, "change p2");
|
|
196
204
|
helper.resetDependencyResults();
|
|
197
|
-
helper.
|
|
205
|
+
saveTestChanges(helper.txn);
|
|
198
206
|
assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements
|
|
199
207
|
assert.deepEqual(helper.dres.allInputsHandled, []);
|
|
200
208
|
assertRels(helper.dres.rootChanged, []);
|
|
@@ -207,12 +215,12 @@ describe("ElementDependencyGraph", () => {
|
|
|
207
215
|
const e1id = helper.insertElement("e1", { id: p2id, relClassName: "TestBim.ChildPropagatesChangesToParent" });
|
|
208
216
|
const e2id = helper.insertElement("e2");
|
|
209
217
|
const e3id = helper.insertElement("e3");
|
|
210
|
-
helper.
|
|
218
|
+
saveTestChanges(helper.txn); // get the elements into the iModel
|
|
211
219
|
const ede_1_2 = TestElementDrivesElement.create(helper.db, e1id, e2id);
|
|
212
220
|
const ede_2_3 = TestElementDrivesElement.create(helper.db, e2id, e3id);
|
|
213
221
|
const ede_p2_p3 = TestElementDrivesElement.create(helper.db, p2id, p3id);
|
|
214
222
|
for (const ede of [ede_1_2, ede_2_3, ede_p2_p3]) {
|
|
215
|
-
ede.
|
|
223
|
+
ede.id = helper.txn.insertRelationship(ede.toJSON());
|
|
216
224
|
}
|
|
217
225
|
// db[_nativeDb].writeFullElementDependencyGraphToFile(`${writeDbFileName}.dot`);
|
|
218
226
|
// The full graph:
|
|
@@ -221,25 +229,25 @@ describe("ElementDependencyGraph", () => {
|
|
|
221
229
|
// e1 -EDE-> e2 -EDE-> e3
|
|
222
230
|
//
|
|
223
231
|
helper.resetDependencyResults();
|
|
224
|
-
helper.
|
|
232
|
+
saveTestChanges(helper.txn); // this will react to EDE inserts only.
|
|
225
233
|
assert.deepEqual(helper.dres.beforeOutputs, []); // only roots get this callback, and only if they have been directly changed.
|
|
226
234
|
assert.deepEqual(helper.dres.allInputsHandled, []); // No input elements have changed
|
|
227
235
|
assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]); // we send out this callback even if only the relationship itself is new or changed.
|
|
228
236
|
helper.updateElement(e1id, "change e1");
|
|
229
237
|
helper.resetDependencyResults();
|
|
230
|
-
helper.
|
|
238
|
+
saveTestChanges(helper.txn);
|
|
231
239
|
assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements.
|
|
232
240
|
assert.deepEqual(helper.dres.allInputsHandled, [e2id, p2id, e3id, p3id]);
|
|
233
241
|
assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_p2_p3.toJSON()]);
|
|
234
242
|
helper.updateElement(p2id, "change p2");
|
|
235
243
|
helper.resetDependencyResults();
|
|
236
|
-
helper.
|
|
244
|
+
saveTestChanges(helper.txn);
|
|
237
245
|
assert.deepEqual(helper.dres.beforeOutputs, [p2id]); // only called on directly changed root elements.
|
|
238
246
|
assert.deepEqual(helper.dres.allInputsHandled, [p3id]);
|
|
239
247
|
assertRels(helper.dres.rootChanged, [ede_p2_p3.toJSON()]);
|
|
240
248
|
helper.updateElement(e2id, "change e2");
|
|
241
249
|
helper.resetDependencyResults();
|
|
242
|
-
helper.
|
|
250
|
+
saveTestChanges(helper.txn);
|
|
243
251
|
assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements.
|
|
244
252
|
assert.deepEqual(helper.dres.allInputsHandled, [e3id]);
|
|
245
253
|
assertRels(helper.dres.rootChanged, [ede_2_3.toJSON()]);
|
|
@@ -258,17 +266,17 @@ describe("ElementDependencyGraph", () => {
|
|
|
258
266
|
const materialDepthRange = helper.insertElement("MaterialDepthRange", { id: borehole, relClassName: "TestBim.ChildPropagatesChangesToParent" });
|
|
259
267
|
const material = helper.insertElement("Material");
|
|
260
268
|
const groundGeneration = helper.insertElement("GroundGeneration");
|
|
261
|
-
helper.
|
|
269
|
+
saveTestChanges(helper.txn); // get the elements into the iModel
|
|
262
270
|
const ede_material_materialDepthRange = TestElementDrivesElement.create(helper.db, material, materialDepthRange);
|
|
263
271
|
const ede_boreholeSource_groundGeneration = TestElementDrivesElement.create(helper.db, boreholeSource, groundGeneration);
|
|
264
272
|
for (const ede of [ede_material_materialDepthRange, ede_boreholeSource_groundGeneration]) {
|
|
265
|
-
ede.
|
|
273
|
+
ede.id = helper.txn.insertRelationship(ede.toJSON());
|
|
266
274
|
}
|
|
267
275
|
helper.resetDependencyResults();
|
|
268
|
-
helper.
|
|
276
|
+
saveTestChanges(helper.txn);
|
|
269
277
|
helper.updateElement(material, "change material");
|
|
270
278
|
helper.resetDependencyResults();
|
|
271
|
-
helper.
|
|
279
|
+
saveTestChanges(helper.txn);
|
|
272
280
|
assert.deepEqual(helper.dres.beforeOutputs, [material]); // only called on directly changed root elements.
|
|
273
281
|
assert.deepEqual(helper.dres.allInputsHandled, [materialDepthRange, borehole, boreholeSource, groundGeneration]);
|
|
274
282
|
assertRels(helper.dres.rootChanged, [ede_material_materialDepthRange.toJSON(), ede_boreholeSource_groundGeneration.toJSON()]);
|
|
@@ -288,7 +296,7 @@ describe("ElementDependencyGraph", () => {
|
|
|
288
296
|
const ede_21_3 = TestElementDrivesElement.create(helper.db, e21id, e3id);
|
|
289
297
|
const ede_3_4 = TestElementDrivesElement.create(helper.db, e3id, e4id);
|
|
290
298
|
for (const ede of [ede_1_2, ede_11_2, ede_2_3, ede_21_3, ede_3_4]) {
|
|
291
|
-
ede.
|
|
299
|
+
ede.id = helper.txn.insertRelationship(ede.toJSON());
|
|
292
300
|
}
|
|
293
301
|
// The full graph:
|
|
294
302
|
// e21
|
|
@@ -304,7 +312,7 @@ describe("ElementDependencyGraph", () => {
|
|
|
304
312
|
// /
|
|
305
313
|
// e11
|
|
306
314
|
helper.resetDependencyResults();
|
|
307
|
-
helper.
|
|
315
|
+
saveTestChanges(helper.txn);
|
|
308
316
|
assert.deepEqual(helper.dres.beforeOutputs, [e1id, e11id, e21id]); // only called on directly changed root elements.
|
|
309
317
|
assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);
|
|
310
318
|
assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_11_2.toJSON(), ede_2_3.toJSON(), ede_21_3.toJSON(), ede_3_4.toJSON()]);
|
|
@@ -316,7 +324,7 @@ describe("ElementDependencyGraph", () => {
|
|
|
316
324
|
//
|
|
317
325
|
helper.updateElement(e4id, "change e4");
|
|
318
326
|
helper.resetDependencyResults();
|
|
319
|
-
helper.
|
|
327
|
+
saveTestChanges(helper.txn);
|
|
320
328
|
assert.deepEqual(helper.dres.beforeOutputs, []); // only called on directly changed root elements.
|
|
321
329
|
assert.deepEqual(helper.dres.allInputsHandled, []);
|
|
322
330
|
assertRels(helper.dres.rootChanged, []);
|
|
@@ -330,7 +338,7 @@ describe("ElementDependencyGraph", () => {
|
|
|
330
338
|
//
|
|
331
339
|
helper.updateElement(e3id, "change e3");
|
|
332
340
|
helper.resetDependencyResults();
|
|
333
|
-
helper.
|
|
341
|
+
saveTestChanges(helper.txn);
|
|
334
342
|
assert.deepEqual(helper.dres.beforeOutputs, [e3id]); // only called on directly changed root elements.
|
|
335
343
|
assert.deepEqual(helper.dres.allInputsHandled, [e4id]);
|
|
336
344
|
assertRels(helper.dres.rootChanged, [ede_3_4.toJSON()]);
|
|
@@ -344,7 +352,7 @@ describe("ElementDependencyGraph", () => {
|
|
|
344
352
|
//
|
|
345
353
|
helper.updateElement(e2id, "change e2");
|
|
346
354
|
helper.resetDependencyResults();
|
|
347
|
-
helper.
|
|
355
|
+
saveTestChanges(helper.txn);
|
|
348
356
|
assert.deepEqual(helper.dres.beforeOutputs, [e2id]); // only called on directly changed root elements
|
|
349
357
|
assert.deepEqual(helper.dres.allInputsHandled, [e3id, e4id]);
|
|
350
358
|
assertRels(helper.dres.rootChanged, [ede_2_3.toJSON(), ede_3_4.toJSON()]);
|
|
@@ -356,7 +364,7 @@ describe("ElementDependencyGraph", () => {
|
|
|
356
364
|
//
|
|
357
365
|
helper.updateElement(e1id, "change e1");
|
|
358
366
|
helper.resetDependencyResults();
|
|
359
|
-
helper.
|
|
367
|
+
saveTestChanges(helper.txn);
|
|
360
368
|
assert.deepEqual(helper.dres.beforeOutputs, [e1id]); // only called on directly changed root elements
|
|
361
369
|
assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);
|
|
362
370
|
assertRels(helper.dres.rootChanged, [ede_1_2.toJSON(), ede_2_3.toJSON(), ede_3_4.toJSON()]);
|
|
@@ -371,7 +379,7 @@ describe("ElementDependencyGraph", () => {
|
|
|
371
379
|
// Note that the e1 -> e2 and e21 -> e3 edges are NOT in the sub-graph. These edges should be validated, nevertheless -- TBD
|
|
372
380
|
helper.updateElement(e11id, "change e11");
|
|
373
381
|
helper.resetDependencyResults();
|
|
374
|
-
helper.
|
|
382
|
+
saveTestChanges(helper.txn);
|
|
375
383
|
// assert.deepEqual(helper.dres.directChange, []); // only called on directly changed non-root elements that have no directly changed inputs
|
|
376
384
|
assert.deepEqual(helper.dres.beforeOutputs, [e11id]); // only called on directly changed root elements
|
|
377
385
|
assert.deepEqual(helper.dres.allInputsHandled, [e2id, e3id, e4id]);
|