@itwin/core-backend 5.2.0-dev.8 → 5.2.1
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 +59 -1
- package/lib/cjs/BackendHubAccess.d.ts +2 -0
- package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.d.ts +6 -0
- package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js +6 -0
- 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.d.ts +57 -3
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +151 -42
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +4 -0
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +8 -0
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +22 -0
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +54 -3
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +96 -18
- 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 +11 -1
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +5 -0
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +1 -5
- package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js +0 -6
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.d.ts +8 -0
- package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js +11 -0
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.d.ts +175 -0
- package/lib/cjs/StashManager.d.ts.map +1 -0
- package/lib/cjs/StashManager.js +306 -0
- package/lib/cjs/StashManager.js.map +1 -0
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +226 -15
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +249 -23
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +17 -2
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +40 -6
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js +6 -6
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -2
- package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js +8 -7
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +164 -36
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +315 -105
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +2 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js +26 -19
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js +11 -3
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.d.ts +51 -38
- package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js +252 -156
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.d.ts +1 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +2 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.d.ts +2 -12
- package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
- package/lib/cjs/internal/annotations/fields.js +50 -45
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.d.ts +2 -0
- package/lib/esm/BackendHubAccess.d.ts.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.d.ts +6 -0
- package/lib/esm/BackendLoggerCategory.d.ts.map +1 -1
- package/lib/esm/BackendLoggerCategory.js +6 -0
- 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.d.ts +57 -3
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +152 -43
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +4 -0
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.d.ts +8 -0
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +22 -0
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +54 -3
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +97 -19
- 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 +11 -1
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +5 -0
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.d.ts +1 -5
- package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js +0 -6
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.d.ts +8 -0
- package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
- package/lib/esm/SqliteChangesetReader.js +11 -0
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.d.ts +175 -0
- package/lib/esm/StashManager.d.ts.map +1 -0
- package/lib/esm/StashManager.js +301 -0
- package/lib/esm/StashManager.js.map +1 -0
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +226 -15
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +247 -21
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +17 -2
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +38 -5
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js +6 -6
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts +3 -2
- package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js +8 -7
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +164 -36
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +317 -108
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts +2 -0
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js +26 -19
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js +11 -3
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.d.ts +51 -38
- package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js +253 -157
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.d.ts +1 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +1 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.d.ts +2 -12
- package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
- package/lib/esm/internal/annotations/fields.js +52 -47
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.d.ts +5 -1
- package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js +7 -2
- 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/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +338 -126
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js +4 -4
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +19 -17
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +636 -60
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js +627 -193
- 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.d.ts +46 -0
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +20 -2
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +128 -58
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +326 -326
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.d.ts +2 -0
- package/lib/esm/test/hubaccess/Rebase.test.d.ts.map +1 -0
- package/lib/esm/test/hubaccess/Rebase.test.js +680 -0
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -0
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +20 -20
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +3 -3
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +16 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +47 -0
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js +15 -19
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +248 -118
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js +3 -3
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
|
@@ -7,14 +7,69 @@ import { Code, FieldRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextR
|
|
|
7
7
|
import { StandaloneDb } from "../../IModelDb";
|
|
8
8
|
import { IModelTestUtils } from "../IModelTestUtils";
|
|
9
9
|
import { createUpdateContext, updateField, updateFields } from "../../internal/annotations/fields";
|
|
10
|
-
import { DbResult, Id64 } from "@itwin/core-bentley";
|
|
10
|
+
import { DbResult, Id64, ProcessDetector } from "@itwin/core-bentley";
|
|
11
11
|
import { SpatialCategory } from "../../Category";
|
|
12
12
|
import { Point3d, YawPitchRollAngles } from "@itwin/core-geometry";
|
|
13
13
|
import { Schema, Schemas } from "../../Schema";
|
|
14
14
|
import { ClassRegistry } from "../../ClassRegistry";
|
|
15
15
|
import { PhysicalElement } from "../../Element";
|
|
16
|
-
import { ElementOwnsUniqueAspect, ElementUniqueAspect, FontFile, TextAnnotation3d } from "../../core-backend";
|
|
17
|
-
import { ElementDrivesTextAnnotation } from "../../annotations/ElementDrivesTextAnnotation";
|
|
16
|
+
import { ElementOwnsUniqueAspect, ElementUniqueAspect, FontFile, IModelElementCloneContext, TextAnnotation3d } from "../../core-backend";
|
|
17
|
+
import { ElementDrivesTextAnnotation, TextAnnotationUsesTextStyleByDefault } from "../../annotations/ElementDrivesTextAnnotation";
|
|
18
|
+
function isIntlSupported() {
|
|
19
|
+
// Node in the mobile add-on does not include Intl, so this test fails. Right now, mobile
|
|
20
|
+
// users are not expected to do any editing, but long term we will attempt to find a better
|
|
21
|
+
// solution.
|
|
22
|
+
return !ProcessDetector.isMobileAppBackend;
|
|
23
|
+
}
|
|
24
|
+
function createTestElement(imodel, model, category, overrides, aspectProp = 999) {
|
|
25
|
+
const props = {
|
|
26
|
+
classFullName: "Fields:TestElement",
|
|
27
|
+
model,
|
|
28
|
+
category,
|
|
29
|
+
code: Code.createEmpty(),
|
|
30
|
+
intProp: 100,
|
|
31
|
+
point: { x: 1, y: 2, z: 3 },
|
|
32
|
+
strings: ["a", "b", `"name": "c"`],
|
|
33
|
+
datetime: new Date("2025-08-28T13:45:30.123Z"),
|
|
34
|
+
intEnum: 1,
|
|
35
|
+
outerStruct: {
|
|
36
|
+
innerStruct: { bool: false, doubles: [1, 2, 3] },
|
|
37
|
+
innerStructs: [{ bool: true, doubles: [] }, { bool: false, doubles: [5, 4, 3, 2, 1] }],
|
|
38
|
+
},
|
|
39
|
+
outerStructs: [{
|
|
40
|
+
innerStruct: { bool: true, doubles: [10, 9] },
|
|
41
|
+
innerStructs: [{ bool: false, doubles: [5] }],
|
|
42
|
+
}],
|
|
43
|
+
placement: {
|
|
44
|
+
origin: new Point3d(1, 2, 0),
|
|
45
|
+
angles: new YawPitchRollAngles(),
|
|
46
|
+
},
|
|
47
|
+
jsonProperties: {
|
|
48
|
+
stringProp: "abc",
|
|
49
|
+
ints: [10, 11, 12, 13],
|
|
50
|
+
bool: true,
|
|
51
|
+
zoo: {
|
|
52
|
+
address: {
|
|
53
|
+
zipcode: 12345,
|
|
54
|
+
},
|
|
55
|
+
birds: [
|
|
56
|
+
{ name: "duck", sound: "quack" },
|
|
57
|
+
{ name: "hawk", sound: "scree!" },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
...overrides,
|
|
62
|
+
};
|
|
63
|
+
const id = imodel.elements.insertElement(props);
|
|
64
|
+
const aspectProps = {
|
|
65
|
+
classFullName: TestAspect.classFullName,
|
|
66
|
+
aspectProp,
|
|
67
|
+
element: new ElementOwnsUniqueAspect(id),
|
|
68
|
+
};
|
|
69
|
+
imodel.elements.insertAspect(aspectProps);
|
|
70
|
+
imodel.saveChanges();
|
|
71
|
+
return id;
|
|
72
|
+
}
|
|
18
73
|
describe("updateField", () => {
|
|
19
74
|
const mockElementId = "0x1";
|
|
20
75
|
const mockPath = {
|
|
@@ -31,7 +86,7 @@ describe("updateField", () => {
|
|
|
31
86
|
propertyPath.accessors?.[0] === 0 &&
|
|
32
87
|
propertyPath.accessors?.[1] === "nestedProperty" &&
|
|
33
88
|
propertyValue !== undefined) {
|
|
34
|
-
return { value: propertyValue,
|
|
89
|
+
return { value: propertyValue, type: "string" };
|
|
35
90
|
}
|
|
36
91
|
return undefined;
|
|
37
92
|
},
|
|
@@ -97,36 +152,43 @@ describe("updateField", () => {
|
|
|
97
152
|
expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);
|
|
98
153
|
});
|
|
99
154
|
});
|
|
100
|
-
const fieldsSchemaXml = `
|
|
101
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
102
|
-
<ECSchema schemaName="Fields" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
103
|
-
<ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
|
|
104
|
-
|
|
105
|
-
<
|
|
106
|
-
<
|
|
107
|
-
<
|
|
108
|
-
</
|
|
109
|
-
|
|
110
|
-
<ECStructClass typeName="
|
|
111
|
-
<
|
|
112
|
-
<
|
|
113
|
-
</ECStructClass>
|
|
114
|
-
|
|
115
|
-
<
|
|
116
|
-
<
|
|
117
|
-
<
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
<
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
<
|
|
127
|
-
<
|
|
128
|
-
|
|
129
|
-
|
|
155
|
+
const fieldsSchemaXml = `
|
|
156
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
157
|
+
<ECSchema schemaName="Fields" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
158
|
+
<ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
|
|
159
|
+
|
|
160
|
+
<ECEnumeration typeName="IntEnum" backingTypeName="int">
|
|
161
|
+
<ECEnumerator name="one" displayLabel="One" value="1" />
|
|
162
|
+
<ECEnumerator name="two" displayLabel="Two" value="2"/>
|
|
163
|
+
</ECEnumeration>
|
|
164
|
+
|
|
165
|
+
<ECStructClass typeName="InnerStruct" modifier="None">
|
|
166
|
+
<ECProperty propertyName="bool" typeName="boolean"/>
|
|
167
|
+
<ECArrayProperty propertyName="doubles" typeName="double" minOccurs="0" maxOccurs="unbounded"/>
|
|
168
|
+
</ECStructClass>
|
|
169
|
+
|
|
170
|
+
<ECStructClass typeName="OuterStruct" modifier="None">
|
|
171
|
+
<ECStructProperty propertyName="innerStruct" typeName="InnerStruct"/>
|
|
172
|
+
<ECStructArrayProperty propertyName="innerStructs" typeName="InnerStruct" minOccurs="0" maxOccurs="unbounded"/>
|
|
173
|
+
</ECStructClass>
|
|
174
|
+
|
|
175
|
+
<ECEntityClass typeName="TestElement" modifier="None">
|
|
176
|
+
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
177
|
+
<ECProperty propertyName="intProp" typeName="int"/>
|
|
178
|
+
<ECProperty propertyName="point" typeName="point3d"/>
|
|
179
|
+
<ECProperty propertyName="maybeNull" typeName="int"/>
|
|
180
|
+
<ECProperty propertyName="datetime" typeName="dateTime"/>
|
|
181
|
+
<ECArrayProperty propertyName="strings" typeName="string" minOccurs="0" maxOccurs="unbounded"/>
|
|
182
|
+
<ECStructProperty propertyName="outerStruct" typeName="OuterStruct"/>
|
|
183
|
+
<ECStructArrayProperty propertyName="outerStructs" typeName="OuterStruct" minOccurs="0" maxOccurs="unbounded"/>
|
|
184
|
+
<ECProperty propertyName="intEnum" typeName="IntEnum"/>
|
|
185
|
+
</ECEntityClass>
|
|
186
|
+
|
|
187
|
+
<ECEntityClass typeName="TestAspect" modifier="None">
|
|
188
|
+
<BaseClass>bis:ElementUniqueAspect</BaseClass>
|
|
189
|
+
<ECProperty propertyName="aspectProp" typeName="int"/>
|
|
190
|
+
</ECEntityClass>
|
|
191
|
+
</ECSchema>
|
|
130
192
|
`;
|
|
131
193
|
class TestElement extends PhysicalElement {
|
|
132
194
|
static get className() { return "TestElement"; }
|
|
@@ -165,67 +227,30 @@ describe("Field evaluation", () => {
|
|
|
165
227
|
after(() => {
|
|
166
228
|
imodel.close();
|
|
167
229
|
});
|
|
168
|
-
function insertTestElement() {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
outerStructs: [{
|
|
182
|
-
innerStruct: { bool: true, doubles: [10, 9] },
|
|
183
|
-
innerStructs: [{ bool: false, doubles: [5] }],
|
|
184
|
-
}],
|
|
185
|
-
placement: {
|
|
186
|
-
origin: new Point3d(1, 2, 0),
|
|
187
|
-
angles: new YawPitchRollAngles(),
|
|
188
|
-
},
|
|
189
|
-
jsonProperties: {
|
|
190
|
-
stringProp: "abc",
|
|
191
|
-
ints: [10, 11, 12, 13],
|
|
192
|
-
zoo: {
|
|
193
|
-
address: {
|
|
194
|
-
zipcode: 12345,
|
|
195
|
-
},
|
|
196
|
-
birds: [
|
|
197
|
-
{ name: "duck", sound: "quack" },
|
|
198
|
-
{ name: "hawk", sound: "scree!" },
|
|
199
|
-
],
|
|
200
|
-
},
|
|
201
|
-
},
|
|
202
|
-
};
|
|
203
|
-
const id = imodel.elements.insertElement(props);
|
|
204
|
-
const aspectProps = {
|
|
205
|
-
classFullName: TestAspect.classFullName,
|
|
206
|
-
aspectProp: 999,
|
|
207
|
-
element: new ElementOwnsUniqueAspect(id),
|
|
208
|
-
};
|
|
209
|
-
imodel.elements.insertAspect(aspectProps);
|
|
210
|
-
imodel.saveChanges();
|
|
211
|
-
return id;
|
|
230
|
+
function insertTestElement(overrides, aspectProp) {
|
|
231
|
+
return createTestElement(imodel, model, category, overrides, aspectProp);
|
|
232
|
+
}
|
|
233
|
+
function evaluateField(propertyPath, propertyHost, deletedDependency = false) {
|
|
234
|
+
if (typeof propertyHost === "string") {
|
|
235
|
+
propertyHost = { schemaName: "Fields", className: "TestElement", elementId: propertyHost };
|
|
236
|
+
}
|
|
237
|
+
const field = FieldRun.create({
|
|
238
|
+
propertyPath,
|
|
239
|
+
propertyHost,
|
|
240
|
+
});
|
|
241
|
+
const context = createUpdateContext(propertyHost.elementId, imodel, deletedDependency);
|
|
242
|
+
return context.getProperty(field);
|
|
212
243
|
}
|
|
213
244
|
describe("getProperty", () => {
|
|
214
245
|
function expectValue(expected, propertyPath, propertyHost, deletedDependency = false) {
|
|
215
|
-
|
|
216
|
-
propertyHost = { schemaName: "Fields", className: "TestElement", elementId: propertyHost };
|
|
217
|
-
}
|
|
218
|
-
const field = FieldRun.create({
|
|
219
|
-
propertyPath,
|
|
220
|
-
propertyHost,
|
|
221
|
-
});
|
|
222
|
-
const context = createUpdateContext(propertyHost.elementId, imodel, deletedDependency);
|
|
223
|
-
const actual = context.getProperty(field);
|
|
224
|
-
expect(actual?.value).to.deep.equal(expected);
|
|
246
|
+
expect(evaluateField(propertyPath, propertyHost, deletedDependency)?.value).to.deep.equal(expected);
|
|
225
247
|
}
|
|
226
248
|
it("returns a primitive property value", () => {
|
|
227
249
|
expectValue(100, { propertyName: "intProp" }, sourceElementId);
|
|
228
250
|
});
|
|
251
|
+
it("returns an integer enum property value", () => {
|
|
252
|
+
expectValue(1, { propertyName: "intEnum" }, sourceElementId);
|
|
253
|
+
});
|
|
229
254
|
it("treats points as primitive values", () => {
|
|
230
255
|
expectValue({ x: 1, y: 2, z: 3 }, { propertyName: "point" }, sourceElementId);
|
|
231
256
|
expectValue(undefined, { propertyName: "point", accessors: ["x"] }, sourceElementId);
|
|
@@ -284,28 +309,62 @@ describe("Field evaluation", () => {
|
|
|
284
309
|
expectValue(false, { propertyName: "outerStructs", accessors: [0, "innerStructs", -1, "bool"] }, sourceElementId);
|
|
285
310
|
expectValue(5, { propertyName: "outerStructs", accessors: [0, "innerStructs", 0, "doubles", 0] }, sourceElementId);
|
|
286
311
|
});
|
|
287
|
-
it("returns arbitrarily-nested JSON properties", () => {
|
|
288
|
-
expectValue("abc", { propertyName: "jsonProperties", jsonAccessors: ["stringProp"] }, sourceElementId);
|
|
289
|
-
expectValue(10, { propertyName: "jsonProperties", jsonAccessors: ["ints", 0] }, sourceElementId);
|
|
290
|
-
expectValue(13, { propertyName: "jsonProperties", jsonAccessors: ["ints", 3] }, sourceElementId);
|
|
291
|
-
expectValue(13, { propertyName: "jsonProperties", jsonAccessors: ["ints", -1] }, sourceElementId);
|
|
292
|
-
expectValue(11, { propertyName: "jsonProperties", jsonAccessors: ["ints", -3] }, sourceElementId);
|
|
293
|
-
expectValue(12345, { propertyName: "jsonProperties", jsonAccessors: ["zoo", "address", "zipcode"] }, sourceElementId);
|
|
294
|
-
expectValue("scree!", { propertyName: "jsonProperties", jsonAccessors: ["zoo", "birds", 1, "sound"] }, sourceElementId);
|
|
295
|
-
});
|
|
296
|
-
it("returns undefined if JSON accessors applied to non-JSON property", () => {
|
|
297
|
-
expectValue(undefined, { propertyName: "int", jsonAccessors: ["whatever"] }, sourceElementId);
|
|
298
|
-
expectValue(undefined, { propertyName: "strings", accessors: [2, "name"] }, sourceElementId);
|
|
299
|
-
expectValue(undefined, { propertyName: "outerStruct", accessors: ["innerStruct"], jsonAccessors: ["bool"] }, sourceElementId);
|
|
300
|
-
});
|
|
301
312
|
it("returns the value of a property of an aspect", () => {
|
|
302
313
|
expect(imodel.elements.getAspects(sourceElementId, "Fields:TestAspect").length).to.equal(1);
|
|
303
314
|
expectValue(999, { propertyName: "aspectProp" }, { elementId: sourceElementId, schemaName: "Fields", className: "TestAspect" });
|
|
304
315
|
});
|
|
316
|
+
it("should fail to evaluate if prop type does not match", () => {
|
|
317
|
+
const fieldRun = FieldRun.create({
|
|
318
|
+
propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
|
|
319
|
+
propertyPath: { propertyName: "string", accessors: [0] },
|
|
320
|
+
cachedContent: "oldValue",
|
|
321
|
+
formatOptions: {
|
|
322
|
+
case: "upper",
|
|
323
|
+
prefix: "Value: ",
|
|
324
|
+
suffix: "!"
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
const context = createUpdateContext(sourceElementId, imodel, false);
|
|
328
|
+
const updated = updateField(fieldRun, context);
|
|
329
|
+
expect(updated).to.be.true;
|
|
330
|
+
expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);
|
|
331
|
+
});
|
|
332
|
+
function getPropertyType(propertyHost, propertyPath) {
|
|
333
|
+
if (typeof propertyPath === "string") {
|
|
334
|
+
propertyPath = { propertyName: propertyPath };
|
|
335
|
+
}
|
|
336
|
+
return evaluateField(propertyPath, propertyHost)?.type;
|
|
337
|
+
}
|
|
338
|
+
it("deduces type for primitive properties", () => {
|
|
339
|
+
const propertyHost = { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" };
|
|
340
|
+
expect(getPropertyType(propertyHost, "intProp")).to.equal("string");
|
|
341
|
+
expect(getPropertyType(propertyHost, "point")).to.equal("coordinate");
|
|
342
|
+
expect(getPropertyType(propertyHost, { propertyName: "strings", accessors: [0] })).to.equal("string");
|
|
343
|
+
expect(getPropertyType(propertyHost, "intEnum")).to.equal("int-enum");
|
|
344
|
+
expect(getPropertyType(propertyHost, { propertyName: "outerStruct", accessors: ["innerStruct", "doubles", 0] })).to.equal("quantity");
|
|
345
|
+
expect(getPropertyType(propertyHost, { propertyName: "outerStruct", accessors: ["innerStruct", "bool"] })).to.equal("boolean");
|
|
346
|
+
propertyHost.schemaName = "BisCore";
|
|
347
|
+
propertyHost.className = "GeometricElement3d";
|
|
348
|
+
expect(getPropertyType(propertyHost, "LastMod")).to.equal("datetime");
|
|
349
|
+
expect(getPropertyType(propertyHost, "FederationGuid")).to.equal("string");
|
|
350
|
+
});
|
|
351
|
+
it("returns undefined for non-primitive properties", () => {
|
|
352
|
+
const propertyHost = { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" };
|
|
353
|
+
expect(getPropertyType(propertyHost, "outerStruct")).to.equal(undefined);
|
|
354
|
+
expect(getPropertyType(propertyHost, "outerStructs")).to.equal(undefined);
|
|
355
|
+
});
|
|
356
|
+
it("returns undefined for invalid property paths", () => {
|
|
357
|
+
const propertyHost = { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" };
|
|
358
|
+
expect(getPropertyType(propertyHost, "unknownPropertyName")).to.be.undefined;
|
|
359
|
+
});
|
|
360
|
+
it("should return undefined for unsupported primitive types", () => {
|
|
361
|
+
const host = { elementId: sourceElementId, schemaName: "BisCore", className: "GeometricElement3d" };
|
|
362
|
+
expect(getPropertyType(host, "GeometryStream")).to.be.undefined;
|
|
363
|
+
});
|
|
305
364
|
});
|
|
306
365
|
describe("updateFields", () => {
|
|
307
366
|
it("recomputes cached content", () => {
|
|
308
|
-
const textBlock = TextBlock.create(
|
|
367
|
+
const textBlock = TextBlock.create();
|
|
309
368
|
const fieldRun = FieldRun.create({
|
|
310
369
|
propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
|
|
311
370
|
propertyPath: { propertyName: "intProp" },
|
|
@@ -318,7 +377,7 @@ describe("Field evaluation", () => {
|
|
|
318
377
|
expect(fieldRun.cachedContent).to.equal("100"); // `intProp` value from the test element
|
|
319
378
|
});
|
|
320
379
|
it("does not update a field if recomputed content matches cached content", () => {
|
|
321
|
-
const textBlock = TextBlock.create(
|
|
380
|
+
const textBlock = TextBlock.create();
|
|
322
381
|
const fieldRun = FieldRun.create({
|
|
323
382
|
propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
|
|
324
383
|
propertyPath: { propertyName: "intProp" },
|
|
@@ -331,7 +390,7 @@ describe("Field evaluation", () => {
|
|
|
331
390
|
expect(fieldRun.cachedContent).to.equal("100");
|
|
332
391
|
});
|
|
333
392
|
it("returns the number of fields updated", () => {
|
|
334
|
-
const textBlock = TextBlock.create(
|
|
393
|
+
const textBlock = TextBlock.create();
|
|
335
394
|
const fieldRun1 = FieldRun.create({
|
|
336
395
|
propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
|
|
337
396
|
propertyPath: { propertyName: "intProp" },
|
|
@@ -351,7 +410,7 @@ describe("Field evaluation", () => {
|
|
|
351
410
|
expect(fieldRun2.cachedContent).to.equal("a");
|
|
352
411
|
});
|
|
353
412
|
});
|
|
354
|
-
function
|
|
413
|
+
function createAnnotationElement(textBlock) {
|
|
355
414
|
const elem = TextAnnotation3d.fromJSON({
|
|
356
415
|
model,
|
|
357
416
|
category,
|
|
@@ -361,11 +420,16 @@ describe("Field evaluation", () => {
|
|
|
361
420
|
angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),
|
|
362
421
|
},
|
|
363
422
|
classFullName: TextAnnotation3d.classFullName,
|
|
423
|
+
defaultTextStyle: new TextAnnotationUsesTextStyleByDefault("0x123").toJSON(),
|
|
364
424
|
}, imodel);
|
|
365
425
|
if (textBlock) {
|
|
366
426
|
const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });
|
|
367
427
|
elem.setAnnotation(annotation);
|
|
368
428
|
}
|
|
429
|
+
return elem;
|
|
430
|
+
}
|
|
431
|
+
function insertAnnotationElement(textBlock) {
|
|
432
|
+
const elem = createAnnotationElement(textBlock);
|
|
369
433
|
return elem.insert();
|
|
370
434
|
}
|
|
371
435
|
describe("ElementDrivesTextAnnotation", () => {
|
|
@@ -395,21 +459,21 @@ describe("Field evaluation", () => {
|
|
|
395
459
|
expect(relationship.sourceId).to.equal(sourceElementId);
|
|
396
460
|
expect(relationship.targetId).to.equal(targetId);
|
|
397
461
|
});
|
|
398
|
-
function createField(propertyHost, cachedContent, propertyName = "intProp", accessors
|
|
462
|
+
function createField(propertyHost, cachedContent, propertyName = "intProp", accessors) {
|
|
399
463
|
if (typeof propertyHost === "string") {
|
|
400
464
|
propertyHost = { schemaName: "Fields", className: "TestElement", elementId: propertyHost };
|
|
401
465
|
}
|
|
402
466
|
return FieldRun.create({
|
|
403
|
-
styleOverrides: {
|
|
467
|
+
styleOverrides: { font: { name: "Karla" } },
|
|
404
468
|
propertyHost,
|
|
405
469
|
cachedContent,
|
|
406
|
-
propertyPath: { propertyName, accessors
|
|
470
|
+
propertyPath: { propertyName, accessors },
|
|
407
471
|
});
|
|
408
472
|
}
|
|
409
473
|
describe("updateFieldDependencies", () => {
|
|
410
474
|
it("creates exactly one relationship for each unique source element on insert and update", () => {
|
|
411
475
|
const source1 = insertTestElement();
|
|
412
|
-
const block = TextBlock.create(
|
|
476
|
+
const block = TextBlock.create();
|
|
413
477
|
block.appendRun(createField(source1, "1"));
|
|
414
478
|
const targetId = insertAnnotationElement(block);
|
|
415
479
|
imodel.saveChanges();
|
|
@@ -437,7 +501,7 @@ describe("Field evaluation", () => {
|
|
|
437
501
|
it("deletes stale relationships", () => {
|
|
438
502
|
const sourceA = insertTestElement();
|
|
439
503
|
const sourceB = insertTestElement();
|
|
440
|
-
const block = TextBlock.create(
|
|
504
|
+
const block = TextBlock.create();
|
|
441
505
|
block.appendRun(createField(sourceA, "A"));
|
|
442
506
|
block.appendRun(createField(sourceB, "B"));
|
|
443
507
|
const targetId = insertAnnotationElement(block);
|
|
@@ -447,14 +511,16 @@ describe("Field evaluation", () => {
|
|
|
447
511
|
expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).not.to.be.undefined;
|
|
448
512
|
const target = imodel.elements.getElement(targetId);
|
|
449
513
|
const anno = target.getAnnotation();
|
|
450
|
-
|
|
514
|
+
// Remove the sourceA FieldRun from the first paragraph.
|
|
515
|
+
const p1 = anno.textBlock.children[0];
|
|
516
|
+
p1.children.shift();
|
|
451
517
|
target.setAnnotation(anno);
|
|
452
518
|
target.update();
|
|
453
519
|
imodel.saveChanges();
|
|
454
520
|
expectNumRelationships(1, targetId);
|
|
455
521
|
expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).to.be.undefined;
|
|
456
522
|
expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).not.to.be.undefined;
|
|
457
|
-
anno.textBlock.
|
|
523
|
+
anno.textBlock.children.length = 0;
|
|
458
524
|
anno.textBlock.appendRun(createField(sourceA, "A2"));
|
|
459
525
|
target.setAnnotation(anno);
|
|
460
526
|
target.update();
|
|
@@ -462,9 +528,9 @@ describe("Field evaluation", () => {
|
|
|
462
528
|
expectNumRelationships(1, targetId);
|
|
463
529
|
expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).not.to.be.undefined;
|
|
464
530
|
expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).to.be.undefined;
|
|
465
|
-
anno.textBlock.
|
|
531
|
+
anno.textBlock.children.length = 0;
|
|
466
532
|
anno.textBlock.appendRun(TextRun.create({
|
|
467
|
-
styleOverrides: {
|
|
533
|
+
styleOverrides: { font: { name: "Karla" } },
|
|
468
534
|
content: "not a field",
|
|
469
535
|
}));
|
|
470
536
|
target.setAnnotation(anno);
|
|
@@ -476,7 +542,7 @@ describe("Field evaluation", () => {
|
|
|
476
542
|
});
|
|
477
543
|
it("ignores invalid source element Ids", () => {
|
|
478
544
|
const source = insertTestElement();
|
|
479
|
-
const block = TextBlock.create(
|
|
545
|
+
const block = TextBlock.create();
|
|
480
546
|
block.appendRun(createField(Id64.invalid, "invalid"));
|
|
481
547
|
block.appendRun(createField("0xbaadf00d", "non-existent"));
|
|
482
548
|
block.appendRun(createField(source, "valid"));
|
|
@@ -485,15 +551,26 @@ describe("Field evaluation", () => {
|
|
|
485
551
|
expectNumRelationships(1, targetId);
|
|
486
552
|
});
|
|
487
553
|
});
|
|
488
|
-
function expectText(expected, elemId) {
|
|
489
|
-
|
|
554
|
+
function expectText(expected, elemId, db) {
|
|
555
|
+
db = db ?? imodel;
|
|
556
|
+
const elem = db.elements.getElement(elemId);
|
|
490
557
|
const anno = elem.getAnnotation();
|
|
491
558
|
const actual = anno.textBlock.stringify();
|
|
492
559
|
expect(actual).to.equal(expected);
|
|
493
560
|
}
|
|
561
|
+
it("evaluates cachedContent when annotation element is inserted", () => {
|
|
562
|
+
const sourceId = insertTestElement();
|
|
563
|
+
const block = TextBlock.create();
|
|
564
|
+
block.appendRun(createField(sourceId, "initial cached content"));
|
|
565
|
+
expect(block.stringify()).to.equal("initial cached content");
|
|
566
|
+
const targetId = insertAnnotationElement(block);
|
|
567
|
+
imodel.saveChanges();
|
|
568
|
+
const target = imodel.elements.getElement(targetId);
|
|
569
|
+
expect(target.getAnnotation().textBlock.stringify()).to.equal("100");
|
|
570
|
+
});
|
|
494
571
|
it("updates fields when source element is modified or deleted", () => {
|
|
495
572
|
const sourceId = insertTestElement();
|
|
496
|
-
const block = TextBlock.create(
|
|
573
|
+
const block = TextBlock.create();
|
|
497
574
|
block.appendRun(createField(sourceId, "old value"));
|
|
498
575
|
;
|
|
499
576
|
const targetId = insertAnnotationElement(block);
|
|
@@ -516,7 +593,7 @@ describe("Field evaluation", () => {
|
|
|
516
593
|
});
|
|
517
594
|
it("updates fields when source element aspect is modified, deleted, or recreated", () => {
|
|
518
595
|
const sourceId = insertTestElement();
|
|
519
|
-
const block = TextBlock.create(
|
|
596
|
+
const block = TextBlock.create();
|
|
520
597
|
block.appendRun(createField({ elementId: sourceId, schemaName: "Fields", className: "TestAspect" }, "", "aspectProp"));
|
|
521
598
|
const targetId = insertAnnotationElement(block);
|
|
522
599
|
imodel.saveChanges();
|
|
@@ -544,7 +621,7 @@ describe("Field evaluation", () => {
|
|
|
544
621
|
it("updates only fields for specific modified element", () => {
|
|
545
622
|
const sourceA = insertTestElement();
|
|
546
623
|
const sourceB = insertTestElement();
|
|
547
|
-
const block = TextBlock.create(
|
|
624
|
+
const block = TextBlock.create();
|
|
548
625
|
block.appendRun(createField(sourceA, "A"));
|
|
549
626
|
block.appendRun(createField(sourceB, "B"));
|
|
550
627
|
const targetId = insertAnnotationElement(block);
|
|
@@ -558,18 +635,153 @@ describe("Field evaluation", () => {
|
|
|
558
635
|
});
|
|
559
636
|
it("supports complex property paths", () => {
|
|
560
637
|
const sourceId = insertTestElement();
|
|
561
|
-
const block = TextBlock.create(
|
|
638
|
+
const block = TextBlock.create();
|
|
562
639
|
block.appendRun(createField(sourceId, "", "outerStruct", ["innerStructs", 1, "doubles", -2]));
|
|
563
|
-
block.appendRun(createField(sourceId, "", "jsonProperties", undefined, ["zoo", "birds", 0, "name"]));
|
|
564
640
|
const targetId = insertAnnotationElement(block);
|
|
565
641
|
imodel.saveChanges();
|
|
566
|
-
expectText("
|
|
642
|
+
expectText("2", targetId);
|
|
567
643
|
const source = imodel.elements.getElement(sourceId);
|
|
568
644
|
source.outerStruct.innerStructs[1].doubles[3] = 12.5;
|
|
569
|
-
source.jsonProperties.zoo.birds[0].name = "parrot";
|
|
570
645
|
source.update();
|
|
571
646
|
imodel.saveChanges();
|
|
572
|
-
expectText("12.
|
|
647
|
+
expectText("12.5", targetId);
|
|
648
|
+
});
|
|
649
|
+
describe("remapFields", () => {
|
|
650
|
+
let dstIModel;
|
|
651
|
+
let dstModel;
|
|
652
|
+
let dstCategory;
|
|
653
|
+
let dstSourceElementId;
|
|
654
|
+
before(async () => {
|
|
655
|
+
const path = IModelTestUtils.prepareOutputFile("RemapFields", `dst.bim`);
|
|
656
|
+
dstIModel = StandaloneDb.createEmpty(path, { rootSubject: { name: `RemapFields-dst` }, allowEdit: JSON.stringify({ txns: true }) });
|
|
657
|
+
await registerTestSchema(dstIModel);
|
|
658
|
+
// Insert additional unused elements to ensure element Ids differ between src and dst iModels
|
|
659
|
+
for (let i = 0; i < 3; i++) {
|
|
660
|
+
IModelTestUtils.createAndInsertPhysicalPartitionAndModel(dstIModel, Code.createEmpty(), true);
|
|
661
|
+
}
|
|
662
|
+
const modelAndElement = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(dstIModel, Code.createEmpty(), true);
|
|
663
|
+
expect(modelAndElement[0]).to.equal(modelAndElement[1]);
|
|
664
|
+
dstModel = modelAndElement[1];
|
|
665
|
+
dstCategory = SpatialCategory.insert(dstIModel, StandaloneDb.dictionaryId, `dstCat`, new SubCategoryAppearance());
|
|
666
|
+
dstSourceElementId = createTestElement(dstIModel, dstModel, dstCategory, {
|
|
667
|
+
intProp: 200,
|
|
668
|
+
point: { x: -1, y: -2, z: -3 },
|
|
669
|
+
strings: ["x", "y", "z"],
|
|
670
|
+
intEnum: 2,
|
|
671
|
+
}, 1234);
|
|
672
|
+
await dstIModel.fonts.embedFontFile({
|
|
673
|
+
file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile("Karla-Regular.ttf"))
|
|
674
|
+
});
|
|
675
|
+
expect(dstCategory).not.to.equal(category);
|
|
676
|
+
expect(dstModel).not.to.equal(model);
|
|
677
|
+
expect(dstSourceElementId).not.to.equal(sourceElementId);
|
|
678
|
+
});
|
|
679
|
+
after(() => {
|
|
680
|
+
dstIModel.close();
|
|
681
|
+
});
|
|
682
|
+
function getTextBlockJson() {
|
|
683
|
+
return {
|
|
684
|
+
children: [{
|
|
685
|
+
children: [{
|
|
686
|
+
type: "field",
|
|
687
|
+
propertyHost: {
|
|
688
|
+
elementId: sourceElementId,
|
|
689
|
+
schemaName: "Fields",
|
|
690
|
+
className: "TestElement",
|
|
691
|
+
},
|
|
692
|
+
propertyPath: { propertyName: "intProp" },
|
|
693
|
+
cachedContent: "intProp",
|
|
694
|
+
}, {
|
|
695
|
+
type: "field",
|
|
696
|
+
propertyHost: {
|
|
697
|
+
elementId: category,
|
|
698
|
+
schemaName: "BisCore",
|
|
699
|
+
className: "Element",
|
|
700
|
+
},
|
|
701
|
+
propertyPath: { propertyName: "CodeValue" },
|
|
702
|
+
cachedContent: "CodeValue"
|
|
703
|
+
}],
|
|
704
|
+
}],
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
function expectHostIds(elem, host1, host2) {
|
|
708
|
+
const anno = elem.getAnnotation();
|
|
709
|
+
expect(anno.textBlock.children.length).to.equal(1);
|
|
710
|
+
const para = anno.textBlock.children[0];
|
|
711
|
+
expect(para.children.length).to.equal(2);
|
|
712
|
+
expect(para.children.every((x) => x.type === "field"));
|
|
713
|
+
const field1 = para.children[0];
|
|
714
|
+
expect(field1.propertyHost.elementId).to.equal(host1);
|
|
715
|
+
const field2 = para.children[1];
|
|
716
|
+
expect(field2.propertyHost.elementId).to.equal(host2);
|
|
717
|
+
}
|
|
718
|
+
it("remaps field hosts", () => {
|
|
719
|
+
const elem = createAnnotationElement(TextBlock.create(getTextBlockJson()));
|
|
720
|
+
expectHostIds(elem, sourceElementId, category);
|
|
721
|
+
const context = new IModelElementCloneContext(imodel, dstIModel);
|
|
722
|
+
context.remapElement(sourceElementId, dstSourceElementId);
|
|
723
|
+
context.remapElement(category, dstCategory);
|
|
724
|
+
ElementDrivesTextAnnotation.remapFields(elem, context);
|
|
725
|
+
expectHostIds(elem, dstSourceElementId, dstCategory);
|
|
726
|
+
});
|
|
727
|
+
it("invalidates field host if source element not remapped", () => {
|
|
728
|
+
const elem = createAnnotationElement(TextBlock.create(getTextBlockJson()));
|
|
729
|
+
expectHostIds(elem, sourceElementId, category);
|
|
730
|
+
const context = new IModelElementCloneContext(imodel, dstIModel);
|
|
731
|
+
ElementDrivesTextAnnotation.remapFields(elem, context);
|
|
732
|
+
expectHostIds(elem, Id64.invalid, Id64.invalid);
|
|
733
|
+
});
|
|
734
|
+
});
|
|
735
|
+
});
|
|
736
|
+
describe("Format Validation", () => {
|
|
737
|
+
it("validates formatting options for string property type", () => {
|
|
738
|
+
// Create a FieldRun with string property type and some format options
|
|
739
|
+
const fieldRun = FieldRun.create({
|
|
740
|
+
propertyHost: { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" },
|
|
741
|
+
propertyPath: { propertyName: "strings", accessors: [0] },
|
|
742
|
+
cachedContent: "oldValue",
|
|
743
|
+
formatOptions: {
|
|
744
|
+
case: "upper",
|
|
745
|
+
prefix: "Value: ",
|
|
746
|
+
suffix: "!"
|
|
747
|
+
}
|
|
748
|
+
});
|
|
749
|
+
// Context returns a string value for the property
|
|
750
|
+
const context = {
|
|
751
|
+
hostElementId: sourceElementId,
|
|
752
|
+
getProperty: () => { return { value: "abc", type: "string" }; },
|
|
753
|
+
};
|
|
754
|
+
// Update the field and check the result
|
|
755
|
+
const updated = updateField(fieldRun, context);
|
|
756
|
+
// The formatted value should be uppercased and have prefix/suffix applied
|
|
757
|
+
expect(updated).to.be.true;
|
|
758
|
+
expect(fieldRun.cachedContent).to.equal("Value: ABC!");
|
|
759
|
+
});
|
|
760
|
+
it("validates formatting options for datetime objects", function () {
|
|
761
|
+
if (!isIntlSupported()) {
|
|
762
|
+
this.skip();
|
|
763
|
+
}
|
|
764
|
+
const propertyHost = { elementId: sourceElementId, schemaName: "Fields", className: "TestElement" };
|
|
765
|
+
const fieldRun = FieldRun.create({
|
|
766
|
+
propertyHost,
|
|
767
|
+
propertyPath: { propertyName: "datetime" },
|
|
768
|
+
cachedContent: "oldval",
|
|
769
|
+
formatOptions: {
|
|
770
|
+
dateTime: {
|
|
771
|
+
formatOptions: {
|
|
772
|
+
month: "short",
|
|
773
|
+
day: "2-digit",
|
|
774
|
+
year: "numeric",
|
|
775
|
+
timeZone: "UTC"
|
|
776
|
+
},
|
|
777
|
+
locale: "en-US",
|
|
778
|
+
},
|
|
779
|
+
},
|
|
780
|
+
});
|
|
781
|
+
const context = createUpdateContext(sourceElementId, imodel, false);
|
|
782
|
+
const updated = updateField(fieldRun, context);
|
|
783
|
+
expect(updated).to.be.true;
|
|
784
|
+
expect(fieldRun.cachedContent).to.equal("Aug 28, 2025");
|
|
573
785
|
});
|
|
574
786
|
});
|
|
575
787
|
});
|