@itwin/core-backend 5.3.0-dev.2 → 5.3.0-dev.23
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 +34 -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.d.ts +2 -2
- 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 +12 -9
- 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.d.ts +2 -2
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +4 -4
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.d.ts +2 -2
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +2 -2
- 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.map +1 -1
- package/lib/cjs/IModelDb.js +20 -9
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js +2 -2
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +1 -2
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +9 -17
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.d.ts +1 -1
- package/lib/cjs/Material.d.ts.map +1 -1
- package/lib/cjs/Material.js +2 -2
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.d.ts +1 -1
- package/lib/cjs/TileStorage.d.ts.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +2 -0
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +10 -2
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +1 -1
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +2 -2
- 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 +7 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +25 -0
- 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.js +4 -4
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +122 -21
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +298 -63
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js +3 -3
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.d.ts +2 -2
- package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js +52 -25
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
- package/lib/cjs/internal/annotations/fields.js +1 -0
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +2 -2
- 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 +12 -9
- 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.d.ts +2 -2
- package/lib/esm/DisplayStyle.d.ts.map +1 -1
- package/lib/esm/DisplayStyle.js +4 -4
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.d.ts +2 -2
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +2 -2
- 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.map +1 -1
- package/lib/esm/IModelDb.js +20 -9
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/esm/IModelElementCloneContext.js +2 -2
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +1 -2
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +10 -18
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.d.ts +1 -1
- package/lib/esm/Material.d.ts.map +1 -1
- package/lib/esm/Material.js +2 -2
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.d.ts +1 -1
- package/lib/esm/TileStorage.d.ts.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +2 -0
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +10 -2
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +1 -1
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +2 -2
- 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 +7 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +25 -0
- 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.js +4 -4
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +122 -21
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +298 -64
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js +3 -3
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.d.ts +2 -2
- package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js +52 -25
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
- package/lib/esm/internal/annotations/fields.js +1 -0
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js +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 +93 -0
- package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -0
- package/lib/esm/test/ElementDrivesElement.test.js +862 -0
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -0
- package/lib/esm/test/ElementLRUCache.test.js +13 -0
- 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 +17 -11
- 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 +229 -90
- 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 +8 -8
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +402 -36
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js +218 -151
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +17 -17
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +359 -328
- 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.js +103 -35
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/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 +89 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +164 -170
- 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 +6 -6
- 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 +75 -6
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js +4 -4
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +16 -18
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { expect } from "chai";
|
|
6
6
|
import { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from "@itwin/core-geometry";
|
|
7
|
-
import { FractionRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextRun, TextStyleSettings } from "@itwin/core-common";
|
|
7
|
+
import { FieldRun, FontType, FractionRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextRun, TextStyleSettings } from "@itwin/core-common";
|
|
8
8
|
import { StandaloneDb } from "../../IModelDb";
|
|
9
|
-
import { AnnotationTextStyle, TextAnnotation2d, TextAnnotation3d } from "../../annotations/TextAnnotationElement";
|
|
9
|
+
import { AnnotationTextStyle, parseTextAnnotationData, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation3d } from "../../annotations/TextAnnotationElement";
|
|
10
10
|
import { IModelTestUtils } from "../IModelTestUtils";
|
|
11
11
|
import { Subject } from "../../Element";
|
|
12
12
|
import { Guid, Id64 } from "@itwin/core-bentley";
|
|
@@ -19,6 +19,8 @@ import { computeTextRangeAsStringLength, MockBuilder } from "../AnnotationTestUt
|
|
|
19
19
|
import { TextAnnotationUsesTextStyleByDefault } from "../../annotations/ElementDrivesTextAnnotation";
|
|
20
20
|
import { layoutTextBlock, TextStyleResolver } from "../../annotations/TextBlockLayout";
|
|
21
21
|
import { appendTextAnnotationGeometry } from "../../annotations/TextAnnotationGeometry";
|
|
22
|
+
import { IModelElementCloneContext } from "../../IModelElementCloneContext";
|
|
23
|
+
import * as fs from "fs";
|
|
22
24
|
function mockIModel() {
|
|
23
25
|
const iModel = {
|
|
24
26
|
fonts: {
|
|
@@ -30,13 +32,12 @@ function mockIModel() {
|
|
|
30
32
|
return iModel;
|
|
31
33
|
}
|
|
32
34
|
function createAnnotation(textBlock) {
|
|
33
|
-
const styleOverrides = {
|
|
35
|
+
const styleOverrides = { font: { name: "Karla" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };
|
|
34
36
|
const block = textBlock ?? TextBlock.create({ styleOverrides });
|
|
35
37
|
if (!textBlock) {
|
|
36
38
|
block.appendRun(TextRun.create({ content: "Run, Barry,", styleOverrides }));
|
|
37
39
|
block.appendRun(TextRun.create({ content: " RUN!!! ", styleOverrides }));
|
|
38
40
|
block.appendRun(FractionRun.create({ numerator: "Harrison", denominator: "Wells", styleOverrides }));
|
|
39
|
-
block.margins = { left: 0, right: 1, top: 2, bottom: 3 };
|
|
40
41
|
}
|
|
41
42
|
const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });
|
|
42
43
|
annotation.anchor = { vertical: "middle", horizontal: "right" };
|
|
@@ -83,8 +84,13 @@ const createIModel = async (name) => {
|
|
|
83
84
|
});
|
|
84
85
|
return iModel;
|
|
85
86
|
};
|
|
86
|
-
const createAnnotationTextStyle = (iModel,
|
|
87
|
-
return AnnotationTextStyle.create(iModel,
|
|
87
|
+
const createAnnotationTextStyle = (iModel, definitionModelId, name, settings = TextStyleSettings.defaultProps) => {
|
|
88
|
+
return AnnotationTextStyle.create(iModel, {
|
|
89
|
+
definitionModelId,
|
|
90
|
+
name,
|
|
91
|
+
settings,
|
|
92
|
+
description: "description",
|
|
93
|
+
});
|
|
88
94
|
};
|
|
89
95
|
function createElement2d(imodel, createArgs) {
|
|
90
96
|
const placement = {
|
|
@@ -124,13 +130,56 @@ describe("TextAnnotation element", () => {
|
|
|
124
130
|
...props,
|
|
125
131
|
}, mockIModel());
|
|
126
132
|
}
|
|
133
|
+
describe("versioning", () => {
|
|
134
|
+
it("throws if the JSON has no version", () => {
|
|
135
|
+
expect(() => makeElement({
|
|
136
|
+
textAnnotationData: JSON.stringify({
|
|
137
|
+
data: {
|
|
138
|
+
textBlock: TextBlock.create().toJSON()
|
|
139
|
+
}
|
|
140
|
+
}),
|
|
141
|
+
})).to.throw("JSON version is missing or invalid.");
|
|
142
|
+
});
|
|
143
|
+
it("throws if the JSON has no data", () => {
|
|
144
|
+
expect(() => makeElement({
|
|
145
|
+
textAnnotationData: JSON.stringify({
|
|
146
|
+
version: TEXT_ANNOTATION_JSON_VERSION,
|
|
147
|
+
}),
|
|
148
|
+
})).to.throw("JSON data is missing or invalid.");
|
|
149
|
+
});
|
|
150
|
+
it("throws if the JSON version is too new", () => {
|
|
151
|
+
expect(() => makeElement({
|
|
152
|
+
textAnnotationData: JSON.stringify({
|
|
153
|
+
version: "999.999.999",
|
|
154
|
+
data: {
|
|
155
|
+
textBlock: TextBlock.create().toJSON()
|
|
156
|
+
}
|
|
157
|
+
}),
|
|
158
|
+
})).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);
|
|
159
|
+
});
|
|
160
|
+
it("throws if the JSON version is old and cannot be migrated", () => {
|
|
161
|
+
expect(() => makeElement({
|
|
162
|
+
textAnnotationData: JSON.stringify({
|
|
163
|
+
version: "0.0.1",
|
|
164
|
+
data: {
|
|
165
|
+
textBlock: TextBlock.create().toJSON()
|
|
166
|
+
}
|
|
167
|
+
}),
|
|
168
|
+
})).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
127
171
|
describe("getAnnotation", () => {
|
|
128
172
|
it("returns undefined if not provided", () => {
|
|
129
173
|
expect(makeElement().getAnnotation()).to.be.undefined;
|
|
130
174
|
});
|
|
131
175
|
it("converts JSON string to class instance", () => {
|
|
132
176
|
const elem = makeElement({
|
|
133
|
-
textAnnotationData: JSON.stringify({
|
|
177
|
+
textAnnotationData: JSON.stringify({
|
|
178
|
+
version: TEXT_ANNOTATION_JSON_VERSION,
|
|
179
|
+
data: {
|
|
180
|
+
textBlock: TextBlock.create().toJSON()
|
|
181
|
+
}
|
|
182
|
+
}),
|
|
134
183
|
defaultTextStyle: new TextAnnotationUsesTextStyleByDefault("0x42").toJSON()
|
|
135
184
|
});
|
|
136
185
|
const anno = elem.getAnnotation();
|
|
@@ -141,7 +190,12 @@ describe("TextAnnotation element", () => {
|
|
|
141
190
|
});
|
|
142
191
|
it("produces a new object each time it is called", () => {
|
|
143
192
|
const elem = makeElement({
|
|
144
|
-
textAnnotationData: JSON.stringify({
|
|
193
|
+
textAnnotationData: JSON.stringify({
|
|
194
|
+
version: TEXT_ANNOTATION_JSON_VERSION,
|
|
195
|
+
data: {
|
|
196
|
+
textBlock: TextBlock.create().toJSON()
|
|
197
|
+
}
|
|
198
|
+
}),
|
|
145
199
|
});
|
|
146
200
|
const anno1 = elem.getAnnotation();
|
|
147
201
|
const anno2 = elem.getAnnotation();
|
|
@@ -160,6 +214,58 @@ describe("TextAnnotation element", () => {
|
|
|
160
214
|
expect(elem.getAnnotation().toJSON()).not.to.equal(annotation.toJSON());
|
|
161
215
|
});
|
|
162
216
|
});
|
|
217
|
+
describe("getReferenceIds", () => {
|
|
218
|
+
function expectReferenceIds(expected, element) {
|
|
219
|
+
const actual = Array.from(element.getReferenceIds()).sort();
|
|
220
|
+
// reference Ids get a prefix indicating their type ('e' for 'element')
|
|
221
|
+
expected = expected.map((id) => `e${id}`);
|
|
222
|
+
// the superclasses provide some reference Ids (code spec, model, category)
|
|
223
|
+
const baseIds = ["e0x12", "e0x78", "m0x34"];
|
|
224
|
+
expected.push(...baseIds);
|
|
225
|
+
expected = expected.sort();
|
|
226
|
+
expect(actual).to.deep.equal(expected);
|
|
227
|
+
}
|
|
228
|
+
it("reports default text style and field hosts", () => {
|
|
229
|
+
// makeElement sets defaultTextStyle to "0x21"
|
|
230
|
+
const elem = makeElement();
|
|
231
|
+
expectReferenceIds(["0x21"], elem);
|
|
232
|
+
elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault("0x123");
|
|
233
|
+
expectReferenceIds(["0x123"], elem);
|
|
234
|
+
const textBlock = TextBlock.create();
|
|
235
|
+
textBlock.appendRun(FieldRun.create({
|
|
236
|
+
propertyHost: { elementId: "0x456", schemaName: "BisCore", className: "GeometricElement3d" },
|
|
237
|
+
propertyPath: { propertyName: "CodeValue" },
|
|
238
|
+
}));
|
|
239
|
+
textBlock.appendRun(FieldRun.create({
|
|
240
|
+
propertyHost: { elementId: "0x789", schemaName: "BisCore", className: "GeometricElement3d" },
|
|
241
|
+
propertyPath: { propertyName: "LastMod" },
|
|
242
|
+
}));
|
|
243
|
+
elem.setAnnotation(TextAnnotation.create({ textBlock }));
|
|
244
|
+
expectReferenceIds(["0x123", "0x456", "0x789"], elem);
|
|
245
|
+
elem.defaultTextStyle = undefined;
|
|
246
|
+
expectReferenceIds(["0x456", "0x789"], elem);
|
|
247
|
+
elem.setAnnotation(TextAnnotation.create());
|
|
248
|
+
expectReferenceIds([], elem);
|
|
249
|
+
});
|
|
250
|
+
it("does not report invalid Ids", () => {
|
|
251
|
+
const elem = makeElement();
|
|
252
|
+
elem.defaultTextStyle = undefined;
|
|
253
|
+
expectReferenceIds([], elem);
|
|
254
|
+
elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault("0");
|
|
255
|
+
expectReferenceIds([], elem);
|
|
256
|
+
const textBlock = TextBlock.create();
|
|
257
|
+
textBlock.appendRun(FieldRun.create({
|
|
258
|
+
propertyHost: { elementId: "0", schemaName: "BisCore", className: "GeometricElement3d" },
|
|
259
|
+
propertyPath: { propertyName: "CodeValue" },
|
|
260
|
+
}));
|
|
261
|
+
textBlock.appendRun(FieldRun.create({
|
|
262
|
+
propertyHost: { elementId: "0x123", schemaName: "BisCore", className: "GeometricElement3d" },
|
|
263
|
+
propertyPath: { propertyName: "LastMod" },
|
|
264
|
+
}));
|
|
265
|
+
elem.setAnnotation(TextAnnotation.create({ textBlock }));
|
|
266
|
+
expectReferenceIds(["0x123"], elem);
|
|
267
|
+
});
|
|
268
|
+
});
|
|
163
269
|
describe("TextAnnotation3d Persistence", () => {
|
|
164
270
|
let imodel;
|
|
165
271
|
let createElement3dArgs;
|
|
@@ -168,7 +274,7 @@ describe("TextAnnotation element", () => {
|
|
|
168
274
|
const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
|
|
169
275
|
const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
|
|
170
276
|
const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);
|
|
171
|
-
const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", {
|
|
277
|
+
const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
|
|
172
278
|
expect(jobSubjectId).not.to.be.undefined;
|
|
173
279
|
expect(category).not.to.be.undefined;
|
|
174
280
|
expect(model).not.to.be.undefined;
|
|
@@ -178,7 +284,7 @@ describe("TextAnnotation element", () => {
|
|
|
178
284
|
after(() => imodel.close());
|
|
179
285
|
it("creating element does not automatically compute the geometry", () => {
|
|
180
286
|
const annotation = createAnnotation();
|
|
181
|
-
const args = { ...createElement3dArgs,
|
|
287
|
+
const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
|
|
182
288
|
const el = createElement3d(imodel, args);
|
|
183
289
|
expect(el.getAnnotation().equals(annotation)).to.be.true;
|
|
184
290
|
expect(el.geom).to.be.undefined;
|
|
@@ -239,7 +345,7 @@ describe("TextAnnotation element", () => {
|
|
|
239
345
|
});
|
|
240
346
|
it("creating element does not automatically compute the geometry", () => {
|
|
241
347
|
const annotation = createAnnotation();
|
|
242
|
-
const args = { ...createElement2dArgs,
|
|
348
|
+
const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
|
|
243
349
|
const el = createElement2d(imodel, args);
|
|
244
350
|
expect(el.getAnnotation().equals(annotation)).to.be.true;
|
|
245
351
|
expect(el.geom).to.be.undefined;
|
|
@@ -289,8 +395,8 @@ describe("TextAnnotation element", () => {
|
|
|
289
395
|
imodel = await createIModel("DefaultTextStyle");
|
|
290
396
|
const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
|
|
291
397
|
const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
|
|
292
|
-
const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", {
|
|
293
|
-
const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", {
|
|
398
|
+
const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
|
|
399
|
+
const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", { font: { name: "Karla" }, textHeight: 0.5, isBold: true }).insert();
|
|
294
400
|
expect(jobSubjectId).not.to.be.undefined;
|
|
295
401
|
expect(definitionModel).not.to.be.undefined;
|
|
296
402
|
expect(styleId).not.to.be.undefined;
|
|
@@ -314,7 +420,7 @@ describe("TextAnnotation element", () => {
|
|
|
314
420
|
});
|
|
315
421
|
it("preserves defaultTextStyle after round trip", () => {
|
|
316
422
|
const annotation = createAnnotation();
|
|
317
|
-
const args = { ...createElement2dArgs,
|
|
423
|
+
const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };
|
|
318
424
|
const el0 = createElement2d(imodel, args);
|
|
319
425
|
expect(el0.defaultTextStyle).not.to.be.undefined;
|
|
320
426
|
expect(el0.defaultTextStyle.id).to.equal(seedStyleId);
|
|
@@ -327,7 +433,7 @@ describe("TextAnnotation element", () => {
|
|
|
327
433
|
});
|
|
328
434
|
it("produces different geometry when defaultTextStyle changes", () => {
|
|
329
435
|
const annotation = createAnnotation();
|
|
330
|
-
const args = { ...createElement2dArgs,
|
|
436
|
+
const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
|
|
331
437
|
const el0 = createElement2d(imodel, args);
|
|
332
438
|
el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);
|
|
333
439
|
const geom1 = el0.toJSON().elementGeometryBuilderParams;
|
|
@@ -337,7 +443,7 @@ describe("TextAnnotation element", () => {
|
|
|
337
443
|
});
|
|
338
444
|
it("allows defaultTextStyle to be undefined", () => {
|
|
339
445
|
const annotation = createAnnotation();
|
|
340
|
-
const args = { ...createElement2dArgs,
|
|
446
|
+
const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
|
|
341
447
|
const el0 = createElement2d(imodel, args);
|
|
342
448
|
el0.defaultTextStyle = undefined;
|
|
343
449
|
const elId = el0.insert();
|
|
@@ -347,6 +453,178 @@ describe("TextAnnotation element", () => {
|
|
|
347
453
|
expect(el1 instanceof TextAnnotation2d).to.be.true;
|
|
348
454
|
expect(el1.defaultTextStyle).to.be.undefined;
|
|
349
455
|
});
|
|
456
|
+
describe("onCloned", () => {
|
|
457
|
+
function insertStyledElement(styleId, db) {
|
|
458
|
+
const args = { ...createElement2dArgs, defaultTextStyleId: styleId };
|
|
459
|
+
const elem = createElement2d(db, args);
|
|
460
|
+
elem.insert();
|
|
461
|
+
imodel.saveChanges();
|
|
462
|
+
return elem;
|
|
463
|
+
}
|
|
464
|
+
describe("within a single iModel", () => {
|
|
465
|
+
it("leaves property hosts intact", async () => {
|
|
466
|
+
const textBlock = TextBlock.create({
|
|
467
|
+
children: [{
|
|
468
|
+
children: [{
|
|
469
|
+
type: "field",
|
|
470
|
+
propertyHost: {
|
|
471
|
+
elementId: "0x123",
|
|
472
|
+
schemaName: "Fields",
|
|
473
|
+
className: "TestElement",
|
|
474
|
+
},
|
|
475
|
+
propertyPath: { propertyName: "intProp" },
|
|
476
|
+
}, {
|
|
477
|
+
type: "field",
|
|
478
|
+
propertyHost: {
|
|
479
|
+
elementId: "0xabc",
|
|
480
|
+
schemaName: "BisCore",
|
|
481
|
+
className: "Element",
|
|
482
|
+
},
|
|
483
|
+
propertyPath: { propertyName: "CodeValue" },
|
|
484
|
+
}],
|
|
485
|
+
}],
|
|
486
|
+
});
|
|
487
|
+
const annotation = TextAnnotation.create({ textBlock });
|
|
488
|
+
const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });
|
|
489
|
+
elem.insert();
|
|
490
|
+
imodel.saveChanges();
|
|
491
|
+
const context = new IModelElementCloneContext(imodel);
|
|
492
|
+
context.remapElement("0x123", "0x456");
|
|
493
|
+
context.remapElement("0xabc", "0xdef");
|
|
494
|
+
context.remapElement(createElement2dArgs.model, createElement2dArgs.model);
|
|
495
|
+
const props = await context.cloneElement(elem);
|
|
496
|
+
expect(props.textAnnotationData).not.to.be.undefined;
|
|
497
|
+
const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);
|
|
498
|
+
const para = anno.textBlock.children[0];
|
|
499
|
+
expect(para.children[0].propertyHost.elementId).to.equal("0x123");
|
|
500
|
+
expect(para.children[1].propertyHost.elementId).to.equal("0xabc");
|
|
501
|
+
});
|
|
502
|
+
it("leaves default text style intact", async () => {
|
|
503
|
+
async function clone(styleId, expectedStyleId) {
|
|
504
|
+
const elem = insertStyledElement(styleId, imodel);
|
|
505
|
+
const context = new IModelElementCloneContext(imodel);
|
|
506
|
+
context.remapElement(createElement2dArgs.model, createElement2dArgs.model);
|
|
507
|
+
const props = await context.cloneElement(elem);
|
|
508
|
+
expect(props.defaultTextStyle?.id).to.equal(expectedStyleId);
|
|
509
|
+
if (styleId) {
|
|
510
|
+
// Even an explicit remapping is ignored when cloning within a single iModel
|
|
511
|
+
// (per the examples set by most other elements, excluding RenderMaterial).
|
|
512
|
+
context.remapElement(styleId, "0x99887");
|
|
513
|
+
const props2 = await context.cloneElement(elem);
|
|
514
|
+
expect(props2.defaultTextStyle?.id).to.equal(expectedStyleId);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
await clone(seedStyleId, seedStyleId);
|
|
518
|
+
await clone(undefined, undefined);
|
|
519
|
+
await clone("0x12345", "0x12345");
|
|
520
|
+
await clone(Id64.invalid, undefined);
|
|
521
|
+
});
|
|
522
|
+
});
|
|
523
|
+
describe("between iModels", () => {
|
|
524
|
+
let dstDb;
|
|
525
|
+
let dstDefModel;
|
|
526
|
+
let dstElemArgs;
|
|
527
|
+
before(async () => {
|
|
528
|
+
dstDb = await createIModel("CloneTarget");
|
|
529
|
+
const jobSubjectId = createJobSubjectElement(dstDb, "Job").insert();
|
|
530
|
+
dstDefModel = DefinitionModel.insert(dstDb, jobSubjectId, "Definition");
|
|
531
|
+
const { category, model } = insertDrawingModel(dstDb, jobSubjectId, dstDefModel);
|
|
532
|
+
expect(category).not.to.equal(createElement2dArgs.category);
|
|
533
|
+
expect(model).not.to.equal(createElement2dArgs.model);
|
|
534
|
+
dstElemArgs = { category, model };
|
|
535
|
+
});
|
|
536
|
+
after(() => dstDb.close());
|
|
537
|
+
it("remaps property hosts", async () => {
|
|
538
|
+
const textBlock = TextBlock.create({
|
|
539
|
+
children: [{
|
|
540
|
+
children: [{
|
|
541
|
+
type: "field",
|
|
542
|
+
propertyHost: {
|
|
543
|
+
elementId: "0x123",
|
|
544
|
+
schemaName: "Fields",
|
|
545
|
+
className: "TestElement",
|
|
546
|
+
},
|
|
547
|
+
propertyPath: { propertyName: "intProp" },
|
|
548
|
+
}, {
|
|
549
|
+
type: "field",
|
|
550
|
+
propertyHost: {
|
|
551
|
+
elementId: "0xabc",
|
|
552
|
+
schemaName: "BisCore",
|
|
553
|
+
className: "Element",
|
|
554
|
+
},
|
|
555
|
+
propertyPath: { propertyName: "CodeValue" },
|
|
556
|
+
}],
|
|
557
|
+
}],
|
|
558
|
+
});
|
|
559
|
+
const annotation = TextAnnotation.create({ textBlock });
|
|
560
|
+
const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });
|
|
561
|
+
elem.insert();
|
|
562
|
+
imodel.saveChanges();
|
|
563
|
+
const context = new IModelElementCloneContext(imodel, dstDb);
|
|
564
|
+
context.remapElement("0x123", "0x456");
|
|
565
|
+
context.remapElement("0xabc", "0xdef");
|
|
566
|
+
context.remapElement(createElement2dArgs.model, dstElemArgs.model);
|
|
567
|
+
const props = await context.cloneElement(elem);
|
|
568
|
+
expect(props.textAnnotationData).not.to.be.undefined;
|
|
569
|
+
const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);
|
|
570
|
+
const para = anno.textBlock.children[0];
|
|
571
|
+
expect(para.children[0].propertyHost.elementId).to.equal("0x456");
|
|
572
|
+
expect(para.children[1].propertyHost.elementId).to.equal("0xdef");
|
|
573
|
+
});
|
|
574
|
+
it("sets default text style to undefined if source style does not exist", async () => {
|
|
575
|
+
const elem = insertStyledElement("0x12345", imodel);
|
|
576
|
+
const context = new IModelElementCloneContext(imodel, dstDb);
|
|
577
|
+
context.remapElement(createElement2dArgs.model, dstElemArgs.model);
|
|
578
|
+
const props = await context.cloneElement(elem);
|
|
579
|
+
expect(props.defaultTextStyle).to.be.undefined;
|
|
580
|
+
});
|
|
581
|
+
it("remaps to an existing text style with the same code if present", async () => {
|
|
582
|
+
const dstStyleId = createAnnotationTextStyle(dstDb, dstDefModel, "test", { font: { name: "Karla" } }).insert();
|
|
583
|
+
expect(dstStyleId).not.to.equal(seedStyleId);
|
|
584
|
+
const srcElem = insertStyledElement(seedStyleId, imodel);
|
|
585
|
+
const context = new IModelElementCloneContext(imodel, dstDb);
|
|
586
|
+
context.remapElement(createElement2dArgs.model, dstElemArgs.model);
|
|
587
|
+
const props = await context.cloneElement(srcElem);
|
|
588
|
+
expect(props.defaultTextStyle?.id).to.equal(dstStyleId);
|
|
589
|
+
});
|
|
590
|
+
it("throws an error if definition model is not remapped", async () => {
|
|
591
|
+
const srcElem = insertStyledElement(seedStyleId2, imodel);
|
|
592
|
+
const context = new IModelElementCloneContext(imodel, dstDb);
|
|
593
|
+
context.remapElement(createElement2dArgs.model, dstElemArgs.model);
|
|
594
|
+
await expect(context.cloneElement(srcElem)).to.be.rejectedWith("Invalid target model");
|
|
595
|
+
});
|
|
596
|
+
it("imports default text style if necessary", async () => {
|
|
597
|
+
const srcElem = insertStyledElement(seedStyleId2, imodel);
|
|
598
|
+
const context = new IModelElementCloneContext(imodel, dstDb);
|
|
599
|
+
context.remapElement(createElement2dArgs.model, dstElemArgs.model);
|
|
600
|
+
context.remapElement(seedDefinitionModelId, dstDefModel);
|
|
601
|
+
const props = await context.cloneElement(srcElem);
|
|
602
|
+
const dstStyleId = props.defaultTextStyle.id;
|
|
603
|
+
expect(dstStyleId).not.to.be.undefined;
|
|
604
|
+
expect(dstStyleId).not.to.equal(seedStyleId2);
|
|
605
|
+
expect(dstDb.elements.tryGetElement(dstStyleId)).not.to.be.undefined;
|
|
606
|
+
});
|
|
607
|
+
it("remaps multiple occurrences of same style to same Id", async () => {
|
|
608
|
+
const srcStyleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, "styyyle", { font: { name: "Karla" } }).insert();
|
|
609
|
+
const srcElem1 = insertStyledElement(srcStyleId, imodel);
|
|
610
|
+
const srcElem2 = insertStyledElement(srcStyleId, imodel);
|
|
611
|
+
const srcElem3 = insertStyledElement(srcStyleId, imodel);
|
|
612
|
+
const context = new IModelElementCloneContext(imodel, dstDb);
|
|
613
|
+
context.remapElement(createElement2dArgs.model, dstElemArgs.model);
|
|
614
|
+
context.remapElement(seedDefinitionModelId, dstDefModel);
|
|
615
|
+
const props1 = await context.cloneElement(srcElem1);
|
|
616
|
+
const props2 = await context.cloneElement(srcElem2);
|
|
617
|
+
expect(props1.defaultTextStyle).not.to.be.undefined;
|
|
618
|
+
expect(props1.defaultTextStyle?.id).not.to.equal(srcStyleId);
|
|
619
|
+
expect(props2.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);
|
|
620
|
+
const context2 = new IModelElementCloneContext(imodel, dstDb);
|
|
621
|
+
context2.remapElement(createElement2dArgs.model, dstElemArgs.model);
|
|
622
|
+
context2.remapElement(seedDefinitionModelId, dstDefModel);
|
|
623
|
+
const props3 = await context2.cloneElement(srcElem3);
|
|
624
|
+
expect(props3.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);
|
|
625
|
+
});
|
|
626
|
+
});
|
|
627
|
+
});
|
|
350
628
|
});
|
|
351
629
|
describe("TextAnnotation3d", () => {
|
|
352
630
|
let createElement3dArgs;
|
|
@@ -358,7 +636,7 @@ describe("TextAnnotation element", () => {
|
|
|
358
636
|
});
|
|
359
637
|
it("preserves defaultTextStyle after round trip", () => {
|
|
360
638
|
const annotation = createAnnotation();
|
|
361
|
-
const args = { ...createElement3dArgs,
|
|
639
|
+
const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };
|
|
362
640
|
const el0 = createElement3d(imodel, args);
|
|
363
641
|
expect(el0.defaultTextStyle).not.to.be.undefined;
|
|
364
642
|
expect(el0.defaultTextStyle.id).to.equal(seedStyleId);
|
|
@@ -371,7 +649,7 @@ describe("TextAnnotation element", () => {
|
|
|
371
649
|
});
|
|
372
650
|
it("produces different geometry when defaultTextStyle changes", () => {
|
|
373
651
|
const annotation = createAnnotation();
|
|
374
|
-
const args = { ...createElement3dArgs,
|
|
652
|
+
const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
|
|
375
653
|
const el0 = createElement3d(imodel, args);
|
|
376
654
|
el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);
|
|
377
655
|
const geom1 = el0.toJSON().elementGeometryBuilderParams;
|
|
@@ -381,7 +659,7 @@ describe("TextAnnotation element", () => {
|
|
|
381
659
|
});
|
|
382
660
|
it("allows defaultTextStyle to be undefined", () => {
|
|
383
661
|
const annotation = createAnnotation();
|
|
384
|
-
const args = { ...createElement3dArgs,
|
|
662
|
+
const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
|
|
385
663
|
const el0 = createElement3d(imodel, args);
|
|
386
664
|
el0.defaultTextStyle = undefined;
|
|
387
665
|
const elId = el0.insert();
|
|
@@ -412,9 +690,9 @@ describe("AnnotationTextStyle", () => {
|
|
|
412
690
|
});
|
|
413
691
|
it("inserts a style and round-trips through JSON", async () => {
|
|
414
692
|
const textStyle = TextStyleSettings.fromJSON({
|
|
415
|
-
|
|
693
|
+
font: { name: "Totally Real Font" },
|
|
416
694
|
isUnderlined: true,
|
|
417
|
-
|
|
695
|
+
textHeight: 0.5
|
|
418
696
|
});
|
|
419
697
|
const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "round-trip", textStyle.toJSON());
|
|
420
698
|
const elId = el0.insert();
|
|
@@ -431,27 +709,27 @@ describe("AnnotationTextStyle", () => {
|
|
|
431
709
|
let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "default");
|
|
432
710
|
expect(() => annotationTextStyle.insert()).to.throw();
|
|
433
711
|
// font is required
|
|
434
|
-
annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "no font", {
|
|
712
|
+
annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "no font", { font: { name: "" } });
|
|
435
713
|
expect(() => annotationTextStyle.insert()).to.throw();
|
|
436
|
-
//
|
|
437
|
-
annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid
|
|
714
|
+
// textHeight should be positive
|
|
715
|
+
annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid textHeight", { font: { name: "Totally Real Font" }, textHeight: 0 });
|
|
438
716
|
expect(() => annotationTextStyle.insert()).to.throw();
|
|
439
717
|
// stackedFractionScale should be positive
|
|
440
|
-
annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid stackedFractionScale", {
|
|
718
|
+
annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid stackedFractionScale", { font: { name: "Totally Real Font" }, stackedFractionScale: 0 });
|
|
441
719
|
expect(() => annotationTextStyle.insert()).to.throw();
|
|
442
720
|
});
|
|
443
721
|
it("does not allow updating of elements to invalid styles", async () => {
|
|
444
|
-
const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "valid style", {
|
|
722
|
+
const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "valid style", { font: { name: "Totally Real Font" } });
|
|
445
723
|
const elId = annotationTextStyle.insert();
|
|
446
724
|
expect(Id64.isValidId64(elId)).to.be.true;
|
|
447
725
|
const el1 = imodel.elements.getElement(elId);
|
|
448
726
|
expect(el1).not.to.be.undefined;
|
|
449
727
|
expect(el1 instanceof AnnotationTextStyle).to.be.true;
|
|
450
|
-
el1.settings = el1.settings.clone({
|
|
728
|
+
el1.settings = el1.settings.clone({ font: { name: "" } });
|
|
451
729
|
expect(() => el1.update()).to.throw();
|
|
452
|
-
el1.settings = el1.settings.clone({
|
|
730
|
+
el1.settings = el1.settings.clone({ font: { name: "Totally Real Font" }, textHeight: 0 });
|
|
453
731
|
expect(() => el1.update()).to.throw();
|
|
454
|
-
el1.settings = el1.settings.clone({
|
|
732
|
+
el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });
|
|
455
733
|
expect(() => el1.update()).to.throw();
|
|
456
734
|
el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });
|
|
457
735
|
el1.update();
|
|
@@ -468,12 +746,101 @@ describe("AnnotationTextStyle", () => {
|
|
|
468
746
|
expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);
|
|
469
747
|
});
|
|
470
748
|
it("can update style via cloning", async () => {
|
|
471
|
-
const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "cloning", {
|
|
749
|
+
const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "cloning", { font: { name: "Totally Real Font" } });
|
|
472
750
|
const newStyle = el0.settings.clone({ isBold: true, lineSpacingFactor: 3 });
|
|
473
751
|
expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());
|
|
474
752
|
el0.settings = newStyle;
|
|
475
753
|
expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());
|
|
476
754
|
});
|
|
755
|
+
describe("versioning", () => {
|
|
756
|
+
function makeStyle(props) {
|
|
757
|
+
return AnnotationTextStyle.fromJSON({
|
|
758
|
+
model: "0x34",
|
|
759
|
+
code: {
|
|
760
|
+
spec: "0x56",
|
|
761
|
+
scope: "0x78",
|
|
762
|
+
value: "style"
|
|
763
|
+
},
|
|
764
|
+
classFullName: AnnotationTextStyle.classFullName,
|
|
765
|
+
...props,
|
|
766
|
+
}, mockIModel());
|
|
767
|
+
}
|
|
768
|
+
it("throws if the JSON has no version", () => {
|
|
769
|
+
expect(() => makeStyle({
|
|
770
|
+
settings: JSON.stringify({
|
|
771
|
+
data: TextStyleSettings.defaultProps
|
|
772
|
+
}),
|
|
773
|
+
})).to.throw("JSON version is missing or invalid.");
|
|
774
|
+
});
|
|
775
|
+
it("throws if the JSON has no data", () => {
|
|
776
|
+
expect(() => makeStyle({
|
|
777
|
+
settings: JSON.stringify({
|
|
778
|
+
version: TEXT_STYLE_SETTINGS_JSON_VERSION,
|
|
779
|
+
}),
|
|
780
|
+
})).to.throw("JSON data is missing or invalid.");
|
|
781
|
+
});
|
|
782
|
+
it("throws if the JSON version is too new", () => {
|
|
783
|
+
expect(() => makeStyle({
|
|
784
|
+
settings: JSON.stringify({
|
|
785
|
+
version: "999.999.999",
|
|
786
|
+
data: TextStyleSettings.defaultProps
|
|
787
|
+
}),
|
|
788
|
+
})).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);
|
|
789
|
+
});
|
|
790
|
+
it("throws if the JSON version is old and cannot be migrated", () => {
|
|
791
|
+
expect(() => makeStyle({
|
|
792
|
+
settings: JSON.stringify({
|
|
793
|
+
version: "0.0.1",
|
|
794
|
+
data: TextStyleSettings.defaultProps
|
|
795
|
+
}),
|
|
796
|
+
})).to.throw(`Migration for settings from version 0.0.1 to ${TEXT_STYLE_SETTINGS_JSON_VERSION} failed.`);
|
|
797
|
+
});
|
|
798
|
+
});
|
|
799
|
+
describe("onCloned", () => {
|
|
800
|
+
let targetDb;
|
|
801
|
+
let targetDefModel;
|
|
802
|
+
before(async () => {
|
|
803
|
+
// The source and target iModel will both contain the Karla font family.
|
|
804
|
+
targetDb = await createIModel("AnnotationTextStyleTargetDb");
|
|
805
|
+
const jobSubjectId = createJobSubjectElement(targetDb, "Job").insert();
|
|
806
|
+
targetDefModel = DefinitionModel.insert(targetDb, jobSubjectId, "Definition");
|
|
807
|
+
// Embed a font into the source iModel that doesn't exist in the target iModel.
|
|
808
|
+
const shxName = IModelTestUtils.resolveFontFile("Cdm.shx");
|
|
809
|
+
const shxBlob = fs.readFileSync(shxName);
|
|
810
|
+
const shxFile = FontFile.createFromShxFontBlob({ blob: shxBlob, familyName: "Cdm" });
|
|
811
|
+
await imodel.fonts.embedFontFile({ file: shxFile });
|
|
812
|
+
});
|
|
813
|
+
after(() => targetDb.close());
|
|
814
|
+
it("embeds font into target Db if not already embedded", async () => {
|
|
815
|
+
const getFontCounts = () => {
|
|
816
|
+
let files = 0;
|
|
817
|
+
for (const _ of targetDb.fonts.queryEmbeddedFontFiles()) {
|
|
818
|
+
files++;
|
|
819
|
+
}
|
|
820
|
+
let families = 0;
|
|
821
|
+
for (const _ of targetDb.fonts.queryMappedFamilies()) {
|
|
822
|
+
families++;
|
|
823
|
+
}
|
|
824
|
+
return { files, families };
|
|
825
|
+
};
|
|
826
|
+
const initialCounts = getFontCounts();
|
|
827
|
+
const karlaStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "karla-style", TextStyleSettings.fromJSON({ font: { name: "Karla" } }));
|
|
828
|
+
karlaStyle.insert();
|
|
829
|
+
const cdmStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "cdm-style", TextStyleSettings.fromJSON({ font: { name: "Cdm", type: FontType.Shx } }));
|
|
830
|
+
cdmStyle.insert();
|
|
831
|
+
const context = new IModelElementCloneContext(imodel, targetDb);
|
|
832
|
+
context.remapElement(seedDefinitionModel, targetDefModel);
|
|
833
|
+
expect(targetDb.fonts.findId({ name: "Karla" })).not.to.be.undefined;
|
|
834
|
+
await context.cloneElement(karlaStyle);
|
|
835
|
+
expect(getFontCounts()).to.deep.equal(initialCounts);
|
|
836
|
+
expect(targetDb.fonts.findId({ name: "Cdm", type: FontType.Shx })).to.be.undefined;
|
|
837
|
+
await context.cloneElement(cdmStyle);
|
|
838
|
+
expect(targetDb.fonts.findId({ name: "Cdm", type: FontType.Shx })).not.to.be.undefined;
|
|
839
|
+
const finalCounts = getFontCounts();
|
|
840
|
+
expect(finalCounts.files).greaterThan(initialCounts.files);
|
|
841
|
+
expect(finalCounts.families).greaterThan(initialCounts.families);
|
|
842
|
+
});
|
|
843
|
+
});
|
|
477
844
|
});
|
|
478
845
|
describe("appendTextAnnotationGeometry", () => {
|
|
479
846
|
let imodel;
|
|
@@ -486,8 +853,8 @@ describe("appendTextAnnotationGeometry", () => {
|
|
|
486
853
|
const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
|
|
487
854
|
const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
|
|
488
855
|
const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);
|
|
489
|
-
const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", {
|
|
490
|
-
const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", {
|
|
856
|
+
const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
|
|
857
|
+
const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", { font: { name: "Karla" }, textHeight: 0.5, isBold: true }).insert();
|
|
491
858
|
expect(jobSubjectId).not.to.be.undefined;
|
|
492
859
|
expect(definitionModel).not.to.be.undefined;
|
|
493
860
|
expect(category).not.to.be.undefined;
|
|
@@ -541,7 +908,7 @@ describe("appendTextAnnotationGeometry", () => {
|
|
|
541
908
|
const block = TextBlock.create();
|
|
542
909
|
const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });
|
|
543
910
|
const styleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, "empty anno style", {
|
|
544
|
-
|
|
911
|
+
font: { name: "Totally Real Font" },
|
|
545
912
|
frame: {
|
|
546
913
|
shape: "rectangle",
|
|
547
914
|
}
|
|
@@ -554,7 +921,7 @@ describe("appendTextAnnotationGeometry", () => {
|
|
|
554
921
|
it("produces different geometry when given different text-content in annotations", () => {
|
|
555
922
|
const anno1 = createAnnotation();
|
|
556
923
|
const anno2 = createAnnotation();
|
|
557
|
-
anno2.textBlock.appendRun(TextRun.create({ content: "extra", styleOverrides: {
|
|
924
|
+
anno2.textBlock.appendRun(TextRun.create({ content: "extra", styleOverrides: { font: { name: "Totally Real Font" } } }));
|
|
558
925
|
const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);
|
|
559
926
|
const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);
|
|
560
927
|
expect(builder1.geometries).to.not.deep.equal(builder2.geometries);
|
|
@@ -569,12 +936,12 @@ describe("appendTextAnnotationGeometry", () => {
|
|
|
569
936
|
});
|
|
570
937
|
it("accounts for style overrides in the text", () => {
|
|
571
938
|
const block = TextBlock.create();
|
|
939
|
+
block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 } };
|
|
572
940
|
block.appendParagraph();
|
|
573
941
|
block.children[0].styleOverrides = { isBold: true };
|
|
574
942
|
block.appendRun(TextRun.create({ content: "Run, Barry," }));
|
|
575
943
|
block.appendParagraph();
|
|
576
944
|
block.appendRun(TextRun.create({ content: " RUN!!! ", styleOverrides: { isItalic: false } }));
|
|
577
|
-
block.margins = { left: 0, right: 1, top: 2, bottom: 3 };
|
|
578
945
|
const annotation = createAnnotation(block);
|
|
579
946
|
const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);
|
|
580
947
|
expect(builder.textStrings.length).to.equal(2);
|
|
@@ -592,7 +959,6 @@ describe("appendTextAnnotationGeometry", () => {
|
|
|
592
959
|
it("uses TextStyleSettings.defaults when no default style is provided", () => {
|
|
593
960
|
const block = TextBlock.create();
|
|
594
961
|
block.appendRun(TextRun.create({ content: "Run, Barry," }));
|
|
595
|
-
block.margins = { left: 0, right: 1, top: 2, bottom: 3 };
|
|
596
962
|
const annotation = createAnnotation(block);
|
|
597
963
|
const builder = runAppendTextAnnotationGeometry(annotation, "");
|
|
598
964
|
expect(builder.textStrings.length).to.equal(1);
|