@itwin/core-backend 5.5.0-dev.1 → 5.5.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.js +8 -8
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.js +8 -8
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelDbFontsImpl.js","sourceRoot":"","sources":["../../../src/internal/IModelDbFontsImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { FontFamilyDescriptor, FontFamilySelector, FontId, FontProps, FontType } from \"@itwin/core-common\";\r\nimport { _faceProps, _getData, _implementationProhibited, _key, _nativeDb } from \"./Symbols\";\r\nimport { IModelDb } from \"../IModelDb\";\r\nimport { EmbedFontFileArgs, IModelDbFonts, QueryMappedFamiliesArgs } from \"../IModelDbFonts\";\r\nimport { EmbeddedFontFile } from \"./FontFileImpl\";\r\nimport { assert, DbResult, Logger } from \"@itwin/core-bentley\";\r\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { FontFile } from \"../FontFile\";\r\nimport { BackendLoggerCategory } from \"../BackendLoggerCategory\";\r\n\r\nclass IModelDbFontsImpl implements IModelDbFonts {\r\n public readonly [_implementationProhibited] = undefined;\r\n readonly #db: IModelDb;\r\n\r\n public constructor(iModel: IModelDb) {\r\n this.#db = iModel;\r\n }\r\n\r\n public queryMappedFamilies(args?: QueryMappedFamiliesArgs): Iterable<FontProps> {\r\n const fontProps = this.#queryFontTable();\r\n if (args?.includeNonEmbedded) {\r\n return fontProps;\r\n }\r\n\r\n const fontNames = this.#getEmbeddedFontNames();\r\n return fontProps.filter((x) => fontNames.includes(x.name));\r\n }\r\n\r\n public queryEmbeddedFontFiles(): Iterable<FontFile> {\r\n const files: FontFile[] = [];\r\n this.#db.withSqliteStatement(`SELECT Id,StrData FROM be_Prop WHERE Namespace=\"dgn_Font\" AND Name=\"EmbeddedFaceData\"`, (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n let faces;\r\n try {\r\n faces = JSON.parse(stmt.getValueString(1)) as IModelJsNative.FontFaceProps[];\r\n } catch (e) {\r\n Logger.logException(BackendLoggerCategory.IModelDb, e);\r\n }\r\n\r\n if (!Array.isArray(faces) || faces.length === 0) {\r\n continue;\r\n }\r\n\r\n let type = faces[0].type;\r\n if (type !== FontType.Rsc && type !== FontType.Shx) {\r\n type = FontType.TrueType;\r\n }\r\n\r\n files.push(new EmbeddedFontFile(this.#db, stmt.getValueInteger(0), type, faces));\r\n }\r\n });\r\n\r\n return files;\r\n }\r\n\r\n public async embedFontFile(args: EmbedFontFileArgs): Promise<void> {\r\n this.#requireWritable();\r\n\r\n if (!args.file.isEmbeddable) {\r\n throw new Error(\"Font does not permit embedding\");\r\n }\r\n\r\n const file = args.file;\r\n for (const existing of this.queryEmbeddedFontFiles()) {\r\n if (existing[_key] === file[_key]) {\r\n // Already embedded - it's a no-op.\r\n return;\r\n }\r\n }\r\n\r\n let id = 0;\r\n const codes = this.#db.codeService?.internalCodes;\r\n if (codes) {\r\n id = await codes.writeLocker.reserveEmbeddedFaceDataId(args.file[_key]);\r\n } else {\r\n // CodeService not configured - schema lock required to prevent conflicting Ids in be_Prop table.\r\n await this.#db.acquireSchemaLock();\r\n const sql = `SELECT MAX(Id) FROM be_Prop WHERE Namespace=\"dgn_Font\" AND Name=\"EmbeddedFaceData\"`;\r\n id = this.#db.withSqliteStatement(sql, (stmt) => stmt.nextRow() ? stmt.getValueInteger(0) + 1 : 1);\r\n }\r\n\r\n assert(id > 0);\r\n const data = file[_getData]();\r\n this.#db[_nativeDb].embedFontFile(id, file[_faceProps], data, true);\r\n\r\n if (!args.skipFontIdAllocation) {\r\n const familyNames = new Set<string>(args.file.faces.map((x) => x.familyName));\r\n const acquireIds = Array.from(familyNames).map(async (x) => this.#acquireId({ name: x, type: args.file.type }, true).catch());\r\n await Promise.allSettled(acquireIds);\r\n }\r\n\r\n this.#db.clearFontMap();\r\n }\r\n\r\n public findId(selector: FontFamilySelector): FontId | undefined {\r\n let id;\r\n const sqlPostlude = undefined === selector.type ? \" ORDER BY Type ASC\" : \" AND Type=?\";\r\n const sql = `SELECT Id FROM dgn_Font WHERE Name=?${sqlPostlude}`;\r\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\r\n stmt.bindString(1, selector.name);\r\n if (undefined !== selector.type) {\r\n stmt.bindInteger(2, selector.type);\r\n }\r\n\r\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n id = stmt.getValueInteger(0);\r\n }\r\n });\r\n\r\n return id;\r\n }\r\n\r\n public findDescriptor(id: FontId): FontFamilyDescriptor | undefined {\r\n let name, type;\r\n this.#db.withPreparedSqliteStatement(\"SELECT Name,Type FROM dgn_Font WHERE Id=?\", (stmt) => {\r\n stmt.bindInteger(1, id);\r\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const stmtName = stmt.getValueString(0);\r\n if (stmtName.length > 0) {\r\n name = stmtName;\r\n const typeCode = stmt.getValueInteger(1);\r\n type = (typeCode === FontType.Shx || typeCode === FontType.Rsc) ? typeCode : FontType.TrueType;\r\n }\r\n }\r\n });\r\n\r\n return undefined !== name && undefined !== type ? { name, type } : undefined;\r\n }\r\n\r\n public async acquireId(descriptor: FontFamilyDescriptor): Promise<FontId> {\r\n this.#requireWritable();\r\n return this.#acquireId(descriptor, false);\r\n }\r\n\r\n async #acquireId(descriptor: FontFamilyDescriptor, embeddingFaceData: boolean): Promise<FontId> {\r\n let id = this.findId(descriptor);\r\n if (undefined !== id) {\r\n return id;\r\n }\r\n\r\n const codes = this.#db.codeService?.internalCodes;\r\n if (codes) {\r\n id = await codes.writeLocker.reserveFontId({ fontName: descriptor.name, fontType: descriptor.type });\r\n } else {\r\n // If we're being called from `embedFontFile` then the schema lock is already held, don't bother re-acquiring it.\r\n if (!embeddingFaceData) {\r\n // No CodeService configured. We must obtain the schema lock and use the next available Id.\r\n await this.#db.acquireSchemaLock();\r\n }\r\n\r\n id = this.#db.withSqliteStatement(`SELECT MAX(Id) FROM dgn_Font`, (stmt) => stmt.nextRow() ? stmt.getValueInteger(0) + 1 : 1);\r\n }\r\n\r\n this.#db.withSqliteStatement(`INSERT INTO dgn_Font (Id,Type,Name) VALUES (?,?,?)`, (stmt) => {\r\n stmt.bindInteger(1, id);\r\n stmt.bindInteger(2, descriptor.type);\r\n stmt.bindString(3, descriptor.name);\r\n\r\n if (DbResult.BE_SQLITE_DONE !== stmt.step()) {\r\n throw new Error(\"Failed to insert font Id mapping\");\r\n }\r\n });\r\n\r\n this.#db.clearFontMap();\r\n\r\n return id;\r\n }\r\n\r\n #requireWritable(): void {\r\n if (this.#db.isReadonly) {\r\n throw new Error(\"iModel is read-only\");\r\n }\r\n }\r\n\r\n #getEmbeddedFontNames(): string[] {\r\n const names: string[] = [];\r\n\r\n const sql = `select DISTINCT json_extract(face.value, '$.familyName') from be_Prop, json_each(be_Prop.StrData) as face where namespace=\"dgn_Font\" and name=\"EmbeddedFaceData\"`;\r\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n names.push(stmt.getValueString(0));\r\n }\r\n });\r\n\r\n return names;\r\n }\r\n\r\n #queryFontTable(): Array<FontProps> {\r\n const fonts: FontProps[] = [];\r\n const sql = `SELECT Id,Name,Type FROM dgn_Font`;\r\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const name = stmt.getValueString(1);\r\n const typeCode = stmt.getValueInteger(2);\r\n const type = (typeCode === FontType.Shx || typeCode === FontType.Rsc) ? typeCode : FontType.TrueType;\r\n if (name.length > 0) {\r\n fonts.push({\r\n name,\r\n type,\r\n id: stmt.getValueInteger(0),\r\n });\r\n }\r\n }\r\n });\r\n\r\n return fonts;\r\n }\r\n}\r\n\r\nexport function createIModelDbFonts(db: IModelDb): IModelDbFonts {\r\n return new IModelDbFontsImpl(db);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"IModelDbFontsImpl.js","sourceRoot":"","sources":["../../../src/internal/IModelDbFontsImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\nimport { FontFamilyDescriptor, FontFamilySelector, FontId, FontProps, FontType } from \"@itwin/core-common\";\nimport { _faceProps, _getData, _implementationProhibited, _key, _nativeDb } from \"./Symbols\";\nimport { IModelDb } from \"../IModelDb\";\nimport { EmbedFontFileArgs, IModelDbFonts, QueryMappedFamiliesArgs } from \"../IModelDbFonts\";\nimport { EmbeddedFontFile } from \"./FontFileImpl\";\nimport { assert, DbResult, Logger } from \"@itwin/core-bentley\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { FontFile } from \"../FontFile\";\nimport { BackendLoggerCategory } from \"../BackendLoggerCategory\";\n\nclass IModelDbFontsImpl implements IModelDbFonts {\n public readonly [_implementationProhibited] = undefined;\n readonly #db: IModelDb;\n\n public constructor(iModel: IModelDb) {\n this.#db = iModel;\n }\n\n public queryMappedFamilies(args?: QueryMappedFamiliesArgs): Iterable<FontProps> {\n const fontProps = this.#queryFontTable();\n if (args?.includeNonEmbedded) {\n return fontProps;\n }\n\n const fontNames = this.#getEmbeddedFontNames();\n return fontProps.filter((x) => fontNames.includes(x.name));\n }\n\n public queryEmbeddedFontFiles(): Iterable<FontFile> {\n const files: FontFile[] = [];\n this.#db.withSqliteStatement(`SELECT Id,StrData FROM be_Prop WHERE Namespace=\"dgn_Font\" AND Name=\"EmbeddedFaceData\"`, (stmt) => {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n let faces;\n try {\n faces = JSON.parse(stmt.getValueString(1)) as IModelJsNative.FontFaceProps[];\n } catch (e) {\n Logger.logException(BackendLoggerCategory.IModelDb, e);\n }\n\n if (!Array.isArray(faces) || faces.length === 0) {\n continue;\n }\n\n let type = faces[0].type;\n if (type !== FontType.Rsc && type !== FontType.Shx) {\n type = FontType.TrueType;\n }\n\n files.push(new EmbeddedFontFile(this.#db, stmt.getValueInteger(0), type, faces));\n }\n });\n\n return files;\n }\n\n public async embedFontFile(args: EmbedFontFileArgs): Promise<void> {\n this.#requireWritable();\n\n if (!args.file.isEmbeddable) {\n throw new Error(\"Font does not permit embedding\");\n }\n\n const file = args.file;\n for (const existing of this.queryEmbeddedFontFiles()) {\n if (existing[_key] === file[_key]) {\n // Already embedded - it's a no-op.\n return;\n }\n }\n\n let id = 0;\n const codes = this.#db.codeService?.internalCodes;\n if (codes) {\n id = await codes.writeLocker.reserveEmbeddedFaceDataId(args.file[_key]);\n } else {\n // CodeService not configured - schema lock required to prevent conflicting Ids in be_Prop table.\n await this.#db.acquireSchemaLock();\n const sql = `SELECT MAX(Id) FROM be_Prop WHERE Namespace=\"dgn_Font\" AND Name=\"EmbeddedFaceData\"`;\n id = this.#db.withSqliteStatement(sql, (stmt) => stmt.nextRow() ? stmt.getValueInteger(0) + 1 : 1);\n }\n\n assert(id > 0);\n const data = file[_getData]();\n this.#db[_nativeDb].embedFontFile(id, file[_faceProps], data, true);\n\n if (!args.skipFontIdAllocation) {\n const familyNames = new Set<string>(args.file.faces.map((x) => x.familyName));\n const acquireIds = Array.from(familyNames).map(async (x) => this.#acquireId({ name: x, type: args.file.type }, true).catch());\n await Promise.allSettled(acquireIds);\n }\n\n this.#db.clearFontMap();\n }\n\n public findId(selector: FontFamilySelector): FontId | undefined {\n let id;\n const sqlPostlude = undefined === selector.type ? \" ORDER BY Type ASC\" : \" AND Type=?\";\n const sql = `SELECT Id FROM dgn_Font WHERE Name=?${sqlPostlude}`;\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\n stmt.bindString(1, selector.name);\n if (undefined !== selector.type) {\n stmt.bindInteger(2, selector.type);\n }\n\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\n id = stmt.getValueInteger(0);\n }\n });\n\n return id;\n }\n\n public findDescriptor(id: FontId): FontFamilyDescriptor | undefined {\n let name, type;\n this.#db.withPreparedSqliteStatement(\"SELECT Name,Type FROM dgn_Font WHERE Id=?\", (stmt) => {\n stmt.bindInteger(1, id);\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const stmtName = stmt.getValueString(0);\n if (stmtName.length > 0) {\n name = stmtName;\n const typeCode = stmt.getValueInteger(1);\n type = (typeCode === FontType.Shx || typeCode === FontType.Rsc) ? typeCode : FontType.TrueType;\n }\n }\n });\n\n return undefined !== name && undefined !== type ? { name, type } : undefined;\n }\n\n public async acquireId(descriptor: FontFamilyDescriptor): Promise<FontId> {\n this.#requireWritable();\n return this.#acquireId(descriptor, false);\n }\n\n async #acquireId(descriptor: FontFamilyDescriptor, embeddingFaceData: boolean): Promise<FontId> {\n let id = this.findId(descriptor);\n if (undefined !== id) {\n return id;\n }\n\n const codes = this.#db.codeService?.internalCodes;\n if (codes) {\n id = await codes.writeLocker.reserveFontId({ fontName: descriptor.name, fontType: descriptor.type });\n } else {\n // If we're being called from `embedFontFile` then the schema lock is already held, don't bother re-acquiring it.\n if (!embeddingFaceData) {\n // No CodeService configured. We must obtain the schema lock and use the next available Id.\n await this.#db.acquireSchemaLock();\n }\n\n id = this.#db.withSqliteStatement(`SELECT MAX(Id) FROM dgn_Font`, (stmt) => stmt.nextRow() ? stmt.getValueInteger(0) + 1 : 1);\n }\n\n this.#db.withSqliteStatement(`INSERT INTO dgn_Font (Id,Type,Name) VALUES (?,?,?)`, (stmt) => {\n stmt.bindInteger(1, id);\n stmt.bindInteger(2, descriptor.type);\n stmt.bindString(3, descriptor.name);\n\n if (DbResult.BE_SQLITE_DONE !== stmt.step()) {\n throw new Error(\"Failed to insert font Id mapping\");\n }\n });\n\n this.#db.clearFontMap();\n\n return id;\n }\n\n #requireWritable(): void {\n if (this.#db.isReadonly) {\n throw new Error(\"iModel is read-only\");\n }\n }\n\n #getEmbeddedFontNames(): string[] {\n const names: string[] = [];\n\n const sql = `select DISTINCT json_extract(face.value, '$.familyName') from be_Prop, json_each(be_Prop.StrData) as face where namespace=\"dgn_Font\" and name=\"EmbeddedFaceData\"`;\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n names.push(stmt.getValueString(0));\n }\n });\n\n return names;\n }\n\n #queryFontTable(): Array<FontProps> {\n const fonts: FontProps[] = [];\n const sql = `SELECT Id,Name,Type FROM dgn_Font`;\n this.#db.withPreparedSqliteStatement(sql, (stmt) => {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const name = stmt.getValueString(1);\n const typeCode = stmt.getValueInteger(2);\n const type = (typeCode === FontType.Shx || typeCode === FontType.Rsc) ? typeCode : FontType.TrueType;\n if (name.length > 0) {\n fonts.push({\n name,\n type,\n id: stmt.getValueInteger(0),\n });\n }\n }\n });\n\n return fonts;\n }\n}\n\nexport function createIModelDbFonts(db: IModelDb): IModelDbFonts {\n return new IModelDbFontsImpl(db);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativePlatform.js","sourceRoot":"","sources":["../../../src/internal/NativePlatform.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AA+BH,gDAMC;AAGD,kEAEC;AAxCD,8DAAyE;AACzE,sDAA8D;AAE9D,IAAI,cAAiD,CAAC;AAEtD,IAAI,2BAAqD,CAAC;AAE1D,SAAS,mBAAmB;IAC1B,IAAI,2BAA2B,EAAE,CAAC;QAChC,2BAA2B,EAAE,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAa,YAAY;IAChB,MAAM,KAAK,QAAQ;QACxB,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;CACF;AARD,oCAQC;AAED,6DAA6D;AAC7D,SAAgB,kBAAkB;IAChC,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QACjC,cAAc,GAAG,8BAAe,CAAC,kBAAkB,CAAC,CAAC,CAAE,OAAe,CAAC,cAAc,CAAC,gBAAgB,CAA0B,CAAC,CAAC,CAAC,+BAAa,CAAC,IAAI,EAAE,CAAC;QACxJ,cAAc,CAAC,MAAM,GAAG,qBAAM,CAAC;QAC/B,qBAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,SAAgB,2BAA2B,CAAC,IAAiB;IAC3D,2BAA2B,GAAG,IAAI,CAAC;AACrC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"NativePlatform.js","sourceRoot":"","sources":["../../../src/internal/NativePlatform.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AA+BH,gDAMC;AAGD,kEAEC;AAxCD,8DAAyE;AACzE,sDAA8D;AAE9D,IAAI,cAAiD,CAAC;AAEtD,IAAI,2BAAqD,CAAC;AAE1D,SAAS,mBAAmB;IAC1B,IAAI,2BAA2B,EAAE,CAAC;QAChC,2BAA2B,EAAE,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAa,YAAY;IAChB,MAAM,KAAK,QAAQ;QACxB,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;CACF;AARD,oCAQC;AAED,6DAA6D;AAC7D,SAAgB,kBAAkB;IAChC,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QACjC,cAAc,GAAG,8BAAe,CAAC,kBAAkB,CAAC,CAAC,CAAE,OAAe,CAAC,cAAc,CAAC,gBAAgB,CAA0B,CAAC,CAAC,CAAC,+BAAa,CAAC,IAAI,EAAE,CAAC;QACxJ,cAAc,CAAC,MAAM,GAAG,qBAAM,CAAC;QAC/B,qBAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,SAAgB,2BAA2B,CAAC,IAAiB;IAC3D,2BAA2B,GAAG,IAAI,CAAC;AACrC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module IModelHost\n */\n\nimport { IModelJsNative, NativeLibrary } from \"@bentley/imodeljs-native\";\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\n\nlet nativePlatform: typeof IModelJsNative | undefined;\n\nlet syncNativeLogLevelsOverride: (() => void) | undefined;\n\nfunction syncNativeLogLevels() {\n if (syncNativeLogLevelsOverride) {\n syncNativeLogLevelsOverride();\n } else {\n nativePlatform?.clearLogLevelCache();\n }\n}\n\n/** Provides access to the internal APIs defined in @bentley/imodeljs-native.\n * @internal\n */\nexport class IModelNative {\n public static get platform(): typeof IModelJsNative {\n if (undefined === nativePlatform) {\n throw new Error(\"IModelHost.startup must be called first\");\n }\n\n return nativePlatform;\n }\n}\n\n/** @internal Strictly to be called by IModelHost.startup. */\nexport function loadNativePlatform(): void {\n if (undefined === nativePlatform) {\n nativePlatform = ProcessDetector.isMobileAppBackend ? (process as any)._linkedBinding(\"iModelJsNative\") as typeof IModelJsNative : NativeLibrary.load();\n nativePlatform.logger = Logger;\n Logger.onLogLevelChanged.addListener(() => syncNativeLogLevels());\n }\n}\n\n/** @internal Strictly for tests. */\nexport function overrideSyncNativeLogLevels(func?: () => void): void {\n syncNativeLogLevelsOverride = func;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoLocks.js","sourceRoot":"","sources":["../../../src/internal/NoLocks.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAyB/F,sDAEC;AApBD,uCAAoG;AAEpG,yJAAyJ;AACzJ,MAAM,OAAO;IACK,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IACxD,IAAW,aAAa,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC,gBAAM,CAAC,KAAW,CAAC;IACpB,aAAa,KAAW,CAAC;IACzB,kBAAkB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC/C,eAAe,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5C,kBAAkB,KAAW,CAAC;IAC9B,eAAe,KAAW,CAAC;IAC3B,CAAC,4BAAkB,CAAC,KAAW,CAAC;IAChC,KAAK,CAAC,YAAY,KAAK,CAAC;IACxB,KAAK,CAAC,CAAC,0BAAgB,CAAC,KAAoB,CAAC;IAC7C,KAAK,CAAC,eAAe,KAAoB,CAAC;CAClD;AAED,SAAgB,qBAAqB;IACnC,OAAO,IAAI,OAAO,EAAE,CAAC;AACvB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"NoLocks.js","sourceRoot":"","sources":["../../../src/internal/NoLocks.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAyB/F,sDAEC;AApBD,uCAAoG;AAEpG,yJAAyJ;AACzJ,MAAM,OAAO;IACK,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IACxD,IAAW,aAAa,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC,gBAAM,CAAC,KAAW,CAAC;IACpB,aAAa,KAAW,CAAC;IACzB,kBAAkB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC/C,eAAe,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5C,kBAAkB,KAAW,CAAC;IAC9B,eAAe,KAAW,CAAC;IAC3B,CAAC,4BAAkB,CAAC,KAAW,CAAC;IAChC,KAAK,CAAC,YAAY,KAAK,CAAC;IACxB,KAAK,CAAC,CAAC,0BAAgB,CAAC,KAAoB,CAAC;IAC7C,KAAK,CAAC,eAAe,KAAoB,CAAC;CAClD;AAED,SAAgB,qBAAqB;IACnC,OAAO,IAAI,OAAO,EAAE,CAAC;AACvB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module iModels\n */\n\nimport { LockControl } from \"../LockControl\";\nimport { _close, _elementWasCreated, _implementationProhibited, _releaseAllLocks } from \"./Symbols\";\n\n/** A null-implementation of LockControl that does not attempt to limit access between briefcases. This relies on change-merging to resolve conflicts. */\nclass NoLocks implements LockControl {\n public readonly [_implementationProhibited] = undefined;\n public get isServerBased() { return false; }\n public [_close](): void { }\n public clearAllLocks(): void { }\n public holdsExclusiveLock(): boolean { return false; }\n public holdsSharedLock(): boolean { return false; }\n public checkExclusiveLock(): void { }\n public checkSharedLock(): void { }\n public [_elementWasCreated](): void { }\n public async acquireLocks() { }\n public async [_releaseAllLocks](): Promise<void> { }\n public async releaseAllLocks(): Promise<void> { }\n}\n\nexport function createNoOpLockControl(): LockControl {\n return new NoLocks();\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnlineStatus.js","sourceRoot":"","sources":["../../../src/internal/OnlineStatus.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAS/F,0CAEC;AASD,0CAEC;AApBD,IAAI,QAAQ,GAAG,IAAI,CAAC;AAEpB;;;;GAIG;AACH,SAAgB,eAAe,CAAC,MAAe;IAC7C,QAAQ,GAAG,MAAM,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,eAAe;IAC7B,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"OnlineStatus.js","sourceRoot":"","sources":["../../../src/internal/OnlineStatus.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAS/F,0CAEC;AASD,0CAEC;AApBD,IAAI,QAAQ,GAAG,IAAI,CAAC;AAEpB;;;;GAIG;AACH,SAAgB,eAAe,CAAC,MAAe;IAC7C,QAAQ,GAAG,MAAM,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,eAAe;IAC7B,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nlet isOnline = true;\n\n/**\n * Sets the online status of the backend that will be returned by `getOnlineStatus`.\n * @param online The new online status.\n * @internal\n */\nexport function setOnlineStatus(online: boolean) {\n isOnline = online;\n}\n\n/**\n * Determine whether the backend is currently considered online.\n * @note This only works if `setOnlineStatus` has been called by something to update the status.\n * `NativeHost` does this whenever the connectivity changes. If `setOnlineStatus` has never been\n * called, this will return `true`.\n * @internal\n */\nexport function getOnlineStatus(): boolean {\n return isOnline;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerBasedLocks.js","sourceRoot":"","sources":["../../../src/internal/ServerBasedLocks.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AA8N/F,wDAEC;AA9ND;;GAEG;AAEH,sDAAkG;AAClG,oDAAoE;AAIpE,8CAA2C;AAC3C,0CAAuC;AACvC,uCAA2H;AAmB3H,MAAa,gBAAgB;IACX,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IAExD,IAAW,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACxB,MAAM,GAAG,IAAI,mBAAQ,EAAE,CAAC;IACxB,SAAS,CAAc;IAE1C,YAAmB,MAAmB;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QACxB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAS,CAAC,CAAC,mBAAmB,EAAE,QAAQ,CAAC;QAClE,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAQ,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,2FAA2F,CAAC,CAAC;YACpH,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAEM,CAAC,gBAAM,CAAC;QACb,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YACpB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAEO,SAAS,CAAC,EAAc;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,qDAAqD,EAAE,CAAC,IAAI,EAAE,EAAE;YAChH,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,uBAAQ,CAAC,aAAa,KAAK,EAAE;gBAC/B,MAAM,IAAI,yBAAW,CAAC,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAEvD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,EAAe;QAClC,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,oCAAoC,EAAE,CAAC,IAAI,EAAE,EAAE;YAClJ,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,OAAO,CAAC,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,qBAAqB;IACd,YAAY,CAAC,KAAgB;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1F,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,CAAC,0BAAgB,CAAC;QAC7B,MAAM,uBAAU,CAAC,oBAAU,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB;QACvF,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,eAAe;QAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,IAAI,CAAC,0BAAgB,CAAC,EAAE,CAAC;IAClC,CAAC;IAEO,UAAU,CAAC,EAAc,EAAE,KAAgB,EAAE,MAAkB;QACrE,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,6HAA6H,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9K,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,uBAAQ,CAAC,cAAc,KAAK,EAAE;gBAChC,MAAM,IAAI,yBAAW,CAAC,EAAE,EAAE,iCAAiC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,uBAAuB,CAAC,EAA0B;QACxD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,oBAAM,CAAC,aAAa;YACjD,OAAO,KAAK,CAAC,CAAC,gBAAgB;QAEhC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,uBAAS,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,uBAAS,CAAC,SAAS;YAC3G,OAAO,IAAI,CAAC;QAEd,wIAAwI;QACxI,IAAI,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;YACvC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,uBAAS,CAAC,SAAS,gCAAwB,CAAC;QAE9E,yIAAyI;QACzI,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAS,EAAE,uBAAS,CAAC,SAAS,gCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,+DAA+D;IACjM,CAAC;IAED,mGAAmG;IAC5F,kBAAkB,CAAC,EAAc;QACtC,2GAA2G;QAC3G,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,uBAAS,CAAC,SAAS,IAAI,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IAEM,eAAe,CAAC,EAAc;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACpC,gKAAgK;QAChK,OAAO,CAAC,KAAK,KAAK,uBAAS,CAAC,MAAM,IAAI,KAAK,KAAK,uBAAS,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,sIAAsI;IAC9H,aAAa,CAAC,EAA0B,EAAE,KAAsB;QACtE,gHAAgH;QAChH,0GAA0G;QAC1G,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACpF,OAAO;QAET,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,oCAAoC;QACnD,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,iCAAiC;IACxE,CAAC;IAED,sGAAsG;IAC9F,mBAAmB,CAAC,EAAc,EAAE,KAAsB;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,gCAAgC;QACxE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,kBAAkB;IAC3D,CAAC;IAED,mEAAmE;IAC3D,KAAK,CAAC,eAAe,CAAC,KAAc;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,yBAAyB;YAC7C,OAAO;QAET,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAEjD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,8CAA8C;gBACpE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAS,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,uBAAU,CAAC,oBAAU,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB;QAC3F,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,8BAAsB,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,GAA8C;QACtE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC/C,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,MAAM,EAAE,IAAI,mBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;oBAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAS,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,KAAK,MAAM,EAAE,IAAI,mBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAS,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,wGAAwG;IACjG,CAAC,4BAAkB,CAAC,CAAC,EAAc;QACxC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,uBAAS,CAAC,SAAS,gCAAwB,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,yDAAyD;IACzD,IAAY,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAElF,uGAAuG;IAChG,kBAAkB,CAAC,EAAc,EAAE,IAAY,EAAE,SAAiB;QACvE,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,yBAAW,CAAC,2BAAY,CAAC,WAAW,EAAE,8BAA8B,IAAI,QAAQ,SAAS,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtH,CAAC;IAED,kGAAkG;IAC3F,eAAe,CAAC,EAAc,EAAE,IAAY,EAAE,SAAiB;QACpE,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,yBAAW,CAAC,2BAAY,CAAC,WAAW,EAAE,2BAA2B,IAAI,QAAQ,SAAS,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnH,CAAC;CAEF;AA5LD,4CA4LC;AAED,SAAgB,sBAAsB,CAAC,MAAmB;IACxD,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { DbResult, Id64, Id64Arg, Id64String, IModelStatus, OpenMode } from \"@itwin/core-bentley\";\r\nimport { IModel, IModelError, LockState } from \"@itwin/core-common\";\r\nimport { LockMap } from \"../BackendHubAccess\";\r\nimport { BriefcaseDb } from \"../IModelDb\";\r\nimport { LockControl } from \"../LockControl\";\r\nimport { IModelHost } from \"../IModelHost\";\r\nimport { SQLiteDb } from \"../SQLiteDb\";\r\nimport { _close, _elementWasCreated, _hubAccess, _implementationProhibited, _nativeDb, _releaseAllLocks } from \"./Symbols\";\r\n\r\n/**\r\n * Both the Model and Parent of an element are considered \"owners\" of their member elements. That means:\r\n * 1) they must hold at least a shared lock before an exclusive lock can be acquired for their members\r\n * 2) if they hold an exclusive lock, then all of their members are exclusively locked implicitly.\r\n */\r\ninterface ElementOwners {\r\n readonly modelId: Id64String;\r\n readonly parentId: Id64String | undefined;\r\n}\r\n\r\n// eslint-disable-next-line no-restricted-syntax\r\nconst enum LockOrigin {\r\n Acquired = 0,\r\n NewElement = 1,\r\n Discovered = 2,\r\n}\r\n\r\nexport class ServerBasedLocks implements LockControl {\r\n public readonly [_implementationProhibited] = undefined;\r\n\r\n public get isServerBased() { return true; }\r\n protected readonly lockDb = new SQLiteDb();\r\n protected readonly briefcase: BriefcaseDb;\r\n\r\n public constructor(iModel: BriefcaseDb) {\r\n this.briefcase = iModel;\r\n const dbName = `${iModel[_nativeDb].getTempFileBaseName()}-locks`;\r\n try {\r\n this.lockDb.openDb(dbName, OpenMode.ReadWrite);\r\n } catch {\r\n this.lockDb.createDb(dbName);\r\n this.lockDb.executeSQL(\"CREATE TABLE locks(id INTEGER PRIMARY KEY NOT NULL,state INTEGER NOT NULL,origin INTEGER)\");\r\n this.lockDb.saveChanges();\r\n }\r\n }\r\n\r\n public [_close]() {\r\n if (this.lockDb.isOpen)\r\n this.lockDb.closeDb();\r\n }\r\n\r\n private getOwners(id: Id64String): ElementOwners {\r\n return this.briefcase.withPreparedSqliteStatement(\"SELECT ModelId,ParentId FROM bis_Element WHERE id=?\", (stmt) => {\r\n stmt.bindId(1, id);\r\n const rc = stmt.step();\r\n if (DbResult.BE_SQLITE_ROW !== rc)\r\n throw new IModelError(rc, `element ${id} not found`);\r\n\r\n return { modelId: stmt.getValueId(0), parentId: stmt.getValueId(1) };\r\n });\r\n }\r\n\r\n private getLockState(id?: Id64String): LockState | undefined {\r\n return (id === undefined || !Id64.isValid(id)) ? undefined : this.lockDb.withPreparedSqliteStatement(\"SELECT state FROM locks WHERE id=?\", (stmt) => {\r\n stmt.bindId(1, id);\r\n return (DbResult.BE_SQLITE_ROW === stmt.step()) ? stmt.getValueInteger(0) : undefined;\r\n });\r\n }\r\n\r\n /** Clear the cache of locally held locks.\r\n * Note: does *not* release locks from server.\r\n */\r\n private clearAllLocks() {\r\n this.lockDb.executeSQL(\"DELETE FROM locks\");\r\n this.lockDb.saveChanges();\r\n }\r\n\r\n /** only for tests */\r\n public getLockCount(state: LockState): number {\r\n return this.lockDb.withSqliteStatement(\"SELECT count(*) FROM locks WHERE state=?\", (stmt) => {\r\n stmt.bindInteger(1, state);\r\n stmt.step();\r\n return stmt.getValueInteger(0);\r\n });\r\n }\r\n\r\n public async [_releaseAllLocks](): Promise<void> {\r\n await IModelHost[_hubAccess].releaseAllLocks(this.briefcase); // throws if unsuccessful\r\n this.clearAllLocks();\r\n }\r\n\r\n public async releaseAllLocks(): Promise<void> {\r\n if (this.briefcase.txns.hasLocalChanges) {\r\n throw new Error(\"Locks cannot be released while the briefcase contains local changes\");\r\n }\r\n\r\n return this[_releaseAllLocks]();\r\n }\r\n\r\n private insertLock(id: Id64String, state: LockState, origin: LockOrigin): true {\r\n this.lockDb.withPreparedSqliteStatement(\"INSERT INTO locks(id,state,origin) VALUES (?,?,?) ON CONFLICT(id) DO UPDATE SET state=excluded.state,origin=excluded.origin\", (stmt) => {\r\n stmt.bindId(1, id);\r\n stmt.bindInteger(2, state);\r\n stmt.bindInteger(3, origin);\r\n const rc = stmt.step();\r\n if (DbResult.BE_SQLITE_DONE !== rc)\r\n throw new IModelError(rc, \"can't insert lock into database\");\r\n });\r\n return true;\r\n }\r\n\r\n private ownerHoldsExclusiveLock(id: Id64String | undefined): boolean {\r\n if (id === undefined || id === IModel.rootSubjectId)\r\n return false; // has no owners\r\n\r\n const { modelId, parentId } = this.getOwners(id);\r\n if (this.getLockState(modelId) === LockState.Exclusive || this.getLockState(parentId) === LockState.Exclusive)\r\n return true;\r\n\r\n // see if this model is exclusively locked by one of its owners. If so, save that fact on modelId so future tests won't have to descend.\r\n if (this.ownerHoldsExclusiveLock(modelId))\r\n return this.insertLock(modelId, LockState.Exclusive, LockOrigin.Discovered);\r\n\r\n // see if the parent is exclusively locked by one of its owners. If so, save that fact on parentId so future tests won't have to descend.\r\n return this.ownerHoldsExclusiveLock(parentId) ? this.insertLock(parentId!, LockState.Exclusive, LockOrigin.Discovered) : false; // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n }\r\n\r\n /** Determine whether an the exclusive lock is already held by an element (or one of its owners) */\r\n public holdsExclusiveLock(id: Id64String): boolean {\r\n // see if we hold the exclusive lock. or if one of the element's owners is exclusively locked (recursively)\r\n return this.getLockState(id) === LockState.Exclusive || this.ownerHoldsExclusiveLock(id);\r\n }\r\n\r\n public holdsSharedLock(id: Id64String): boolean {\r\n const state = this.getLockState(id);\r\n // see if we hold shared or exclusive lock, or if an owner has exclusive lock. If so we implicitly have shared lock, but owner holding shared lock doesn't help.\r\n return (state === LockState.Shared || state === LockState.Exclusive) || this.ownerHoldsExclusiveLock(id);\r\n }\r\n\r\n /** if the shared lock on the element supplied is not already held, add it to the set of shared locks required. Then, check owners. */\r\n private addSharedLock(id: Id64String | undefined, locks: Set<Id64String>) {\r\n // if the id is not valid, or of the lock is already in the set, or if we already hold a shared lock, we're done\r\n // Note: if we hold a shared lock, it is guaranteed that we also hold all required shared locks on owners.\r\n if (id === undefined || !Id64.isValid(id) || locks.has(id) || this.holdsSharedLock(id))\r\n return;\r\n\r\n locks.add(id); // add to set of needed shared locks\r\n this.addOwnerSharedLocks(id, locks); // check parent models and groups\r\n }\r\n\r\n /** add owners (recursively) of an element to a list of required shared locks, if not already held. */\r\n private addOwnerSharedLocks(id: Id64String, locks: Set<Id64String>) {\r\n const el = this.getOwners(id);\r\n this.addSharedLock(el.parentId, locks); // if this element is in a group\r\n this.addSharedLock(el.modelId, locks); // check its model\r\n }\r\n\r\n /** attempt to acquire all necessary locks for a set of elements */\r\n private async acquireAllLocks(locks: LockMap) {\r\n if (locks.size === 0) // no locks are required.\r\n return;\r\n\r\n const sharedLocks = new Set<Id64String>();\r\n for (const lock of locks)\r\n this.addOwnerSharedLocks(lock[0], sharedLocks);\r\n\r\n for (const shared of sharedLocks) {\r\n if (!locks.has(shared)) // we may already be asking for exclusive lock\r\n locks.set(shared, LockState.Shared);\r\n }\r\n\r\n await IModelHost[_hubAccess].acquireLocks(this.briefcase, locks); // throws if unsuccessful\r\n for (const lock of locks)\r\n this.insertLock(lock[0], lock[1], LockOrigin.Acquired);\r\n this.lockDb.saveChanges();\r\n }\r\n\r\n public async acquireLocks(arg: { shared?: Id64Arg, exclusive?: Id64Arg }): Promise<void> {\r\n const locks = new Map<Id64String, LockState>();\r\n if (arg.shared) {\r\n for (const id of Id64.iterable(arg.shared)) {\r\n if (!this.holdsSharedLock(id))\r\n locks.set(id, LockState.Shared);\r\n }\r\n }\r\n if (arg.exclusive) {\r\n for (const id of Id64.iterable(arg.exclusive)) {\r\n if (!this.holdsExclusiveLock(id))\r\n locks.set(id, LockState.Exclusive);\r\n }\r\n }\r\n return this.acquireAllLocks(locks);\r\n }\r\n\r\n /** When an element is newly created in a session, we hold the lock on it implicitly. Save that fact. */\r\n public [_elementWasCreated](id: Id64String) {\r\n this.insertLock(id, LockState.Exclusive, LockOrigin.NewElement);\r\n this.lockDb.saveChanges();\r\n }\r\n\r\n /** locks are not necessary during change propagation. */\r\n private get _locksAreRequired() { return !this.briefcase.txns.isIndirectChanges; }\r\n\r\n /** throw if locks are currently required and the exclusive lock is not held on the supplied element */\r\n public checkExclusiveLock(id: Id64String, type: string, operation: string) {\r\n if (this._locksAreRequired && !this.holdsExclusiveLock(id))\r\n throw new IModelError(IModelStatus.LockNotHeld, `exclusive lock not held on ${type} for ${operation} (id=${id})`);\r\n }\r\n\r\n /** throw if locks are currently required and a shared lock is not held on the supplied element */\r\n public checkSharedLock(id: Id64String, type: string, operation: string) {\r\n if (this._locksAreRequired && !this.holdsSharedLock(id))\r\n throw new IModelError(IModelStatus.LockNotHeld, `shared lock not held on ${type} for ${operation} (id=${id})`);\r\n }\r\n\r\n}\r\n\r\nexport function createServerBasedLocks(iModel: BriefcaseDb): LockControl {\r\n return new ServerBasedLocks(iModel);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ServerBasedLocks.js","sourceRoot":"","sources":["../../../src/internal/ServerBasedLocks.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module iModels\n */\n\nimport { DbResult, Id64, Id64Arg, Id64String, IModelStatus, OpenMode } from \"@itwin/core-bentley\";\nimport { IModel, IModelError, LockState } from \"@itwin/core-common\";\nimport { LockMap } from \"../BackendHubAccess\";\nimport { BriefcaseDb } from \"../IModelDb\";\nimport { LockControl } from \"../LockControl\";\nimport { IModelHost } from \"../IModelHost\";\nimport { SQLiteDb } from \"../SQLiteDb\";\nimport { _close, _elementWasCreated, _hubAccess, _implementationProhibited, _nativeDb, _releaseAllLocks } from \"./Symbols\";\n\n/**\n * Both the Model and Parent of an element are considered \"owners\" of their member elements. That means:\n * 1) they must hold at least a shared lock before an exclusive lock can be acquired for their members\n * 2) if they hold an exclusive lock, then all of their members are exclusively locked implicitly.\n */\ninterface ElementOwners {\n readonly modelId: Id64String;\n readonly parentId: Id64String | undefined;\n}\n\n// eslint-disable-next-line no-restricted-syntax\nconst enum LockOrigin {\n Acquired = 0,\n NewElement = 1,\n Discovered = 2,\n}\n\nexport class ServerBasedLocks implements LockControl {\n public readonly [_implementationProhibited] = undefined;\n\n public get isServerBased() { return true; }\n protected readonly lockDb = new SQLiteDb();\n protected readonly briefcase: BriefcaseDb;\n\n public constructor(iModel: BriefcaseDb) {\n this.briefcase = iModel;\n const dbName = `${iModel[_nativeDb].getTempFileBaseName()}-locks`;\n try {\n this.lockDb.openDb(dbName, OpenMode.ReadWrite);\n } catch {\n this.lockDb.createDb(dbName);\n this.lockDb.executeSQL(\"CREATE TABLE locks(id INTEGER PRIMARY KEY NOT NULL,state INTEGER NOT NULL,origin INTEGER)\");\n this.lockDb.saveChanges();\n }\n }\n\n public [_close]() {\n if (this.lockDb.isOpen)\n this.lockDb.closeDb();\n }\n\n private getOwners(id: Id64String): ElementOwners {\n return this.briefcase.withPreparedSqliteStatement(\"SELECT ModelId,ParentId FROM bis_Element WHERE id=?\", (stmt) => {\n stmt.bindId(1, id);\n const rc = stmt.step();\n if (DbResult.BE_SQLITE_ROW !== rc)\n throw new IModelError(rc, `element ${id} not found`);\n\n return { modelId: stmt.getValueId(0), parentId: stmt.getValueId(1) };\n });\n }\n\n private getLockState(id?: Id64String): LockState | undefined {\n return (id === undefined || !Id64.isValid(id)) ? undefined : this.lockDb.withPreparedSqliteStatement(\"SELECT state FROM locks WHERE id=?\", (stmt) => {\n stmt.bindId(1, id);\n return (DbResult.BE_SQLITE_ROW === stmt.step()) ? stmt.getValueInteger(0) : undefined;\n });\n }\n\n /** Clear the cache of locally held locks.\n * Note: does *not* release locks from server.\n */\n private clearAllLocks() {\n this.lockDb.executeSQL(\"DELETE FROM locks\");\n this.lockDb.saveChanges();\n }\n\n /** only for tests */\n public getLockCount(state: LockState): number {\n return this.lockDb.withSqliteStatement(\"SELECT count(*) FROM locks WHERE state=?\", (stmt) => {\n stmt.bindInteger(1, state);\n stmt.step();\n return stmt.getValueInteger(0);\n });\n }\n\n public async [_releaseAllLocks](): Promise<void> {\n await IModelHost[_hubAccess].releaseAllLocks(this.briefcase); // throws if unsuccessful\n this.clearAllLocks();\n }\n\n public async releaseAllLocks(): Promise<void> {\n if (this.briefcase.txns.hasLocalChanges) {\n throw new Error(\"Locks cannot be released while the briefcase contains local changes\");\n }\n\n return this[_releaseAllLocks]();\n }\n\n private insertLock(id: Id64String, state: LockState, origin: LockOrigin): true {\n this.lockDb.withPreparedSqliteStatement(\"INSERT INTO locks(id,state,origin) VALUES (?,?,?) ON CONFLICT(id) DO UPDATE SET state=excluded.state,origin=excluded.origin\", (stmt) => {\n stmt.bindId(1, id);\n stmt.bindInteger(2, state);\n stmt.bindInteger(3, origin);\n const rc = stmt.step();\n if (DbResult.BE_SQLITE_DONE !== rc)\n throw new IModelError(rc, \"can't insert lock into database\");\n });\n return true;\n }\n\n private ownerHoldsExclusiveLock(id: Id64String | undefined): boolean {\n if (id === undefined || id === IModel.rootSubjectId)\n return false; // has no owners\n\n const { modelId, parentId } = this.getOwners(id);\n if (this.getLockState(modelId) === LockState.Exclusive || this.getLockState(parentId) === LockState.Exclusive)\n return true;\n\n // see if this model is exclusively locked by one of its owners. If so, save that fact on modelId so future tests won't have to descend.\n if (this.ownerHoldsExclusiveLock(modelId))\n return this.insertLock(modelId, LockState.Exclusive, LockOrigin.Discovered);\n\n // see if the parent is exclusively locked by one of its owners. If so, save that fact on parentId so future tests won't have to descend.\n return this.ownerHoldsExclusiveLock(parentId) ? this.insertLock(parentId!, LockState.Exclusive, LockOrigin.Discovered) : false; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n }\n\n /** Determine whether an the exclusive lock is already held by an element (or one of its owners) */\n public holdsExclusiveLock(id: Id64String): boolean {\n // see if we hold the exclusive lock. or if one of the element's owners is exclusively locked (recursively)\n return this.getLockState(id) === LockState.Exclusive || this.ownerHoldsExclusiveLock(id);\n }\n\n public holdsSharedLock(id: Id64String): boolean {\n const state = this.getLockState(id);\n // see if we hold shared or exclusive lock, or if an owner has exclusive lock. If so we implicitly have shared lock, but owner holding shared lock doesn't help.\n return (state === LockState.Shared || state === LockState.Exclusive) || this.ownerHoldsExclusiveLock(id);\n }\n\n /** if the shared lock on the element supplied is not already held, add it to the set of shared locks required. Then, check owners. */\n private addSharedLock(id: Id64String | undefined, locks: Set<Id64String>) {\n // if the id is not valid, or of the lock is already in the set, or if we already hold a shared lock, we're done\n // Note: if we hold a shared lock, it is guaranteed that we also hold all required shared locks on owners.\n if (id === undefined || !Id64.isValid(id) || locks.has(id) || this.holdsSharedLock(id))\n return;\n\n locks.add(id); // add to set of needed shared locks\n this.addOwnerSharedLocks(id, locks); // check parent models and groups\n }\n\n /** add owners (recursively) of an element to a list of required shared locks, if not already held. */\n private addOwnerSharedLocks(id: Id64String, locks: Set<Id64String>) {\n const el = this.getOwners(id);\n this.addSharedLock(el.parentId, locks); // if this element is in a group\n this.addSharedLock(el.modelId, locks); // check its model\n }\n\n /** attempt to acquire all necessary locks for a set of elements */\n private async acquireAllLocks(locks: LockMap) {\n if (locks.size === 0) // no locks are required.\n return;\n\n const sharedLocks = new Set<Id64String>();\n for (const lock of locks)\n this.addOwnerSharedLocks(lock[0], sharedLocks);\n\n for (const shared of sharedLocks) {\n if (!locks.has(shared)) // we may already be asking for exclusive lock\n locks.set(shared, LockState.Shared);\n }\n\n await IModelHost[_hubAccess].acquireLocks(this.briefcase, locks); // throws if unsuccessful\n for (const lock of locks)\n this.insertLock(lock[0], lock[1], LockOrigin.Acquired);\n this.lockDb.saveChanges();\n }\n\n public async acquireLocks(arg: { shared?: Id64Arg, exclusive?: Id64Arg }): Promise<void> {\n const locks = new Map<Id64String, LockState>();\n if (arg.shared) {\n for (const id of Id64.iterable(arg.shared)) {\n if (!this.holdsSharedLock(id))\n locks.set(id, LockState.Shared);\n }\n }\n if (arg.exclusive) {\n for (const id of Id64.iterable(arg.exclusive)) {\n if (!this.holdsExclusiveLock(id))\n locks.set(id, LockState.Exclusive);\n }\n }\n return this.acquireAllLocks(locks);\n }\n\n /** When an element is newly created in a session, we hold the lock on it implicitly. Save that fact. */\n public [_elementWasCreated](id: Id64String) {\n this.insertLock(id, LockState.Exclusive, LockOrigin.NewElement);\n this.lockDb.saveChanges();\n }\n\n /** locks are not necessary during change propagation. */\n private get _locksAreRequired() { return !this.briefcase.txns.isIndirectChanges; }\n\n /** throw if locks are currently required and the exclusive lock is not held on the supplied element */\n public checkExclusiveLock(id: Id64String, type: string, operation: string) {\n if (this._locksAreRequired && !this.holdsExclusiveLock(id))\n throw new IModelError(IModelStatus.LockNotHeld, `exclusive lock not held on ${type} for ${operation} (id=${id})`);\n }\n\n /** throw if locks are currently required and a shared lock is not held on the supplied element */\n public checkSharedLock(id: Id64String, type: string, operation: string) {\n if (this._locksAreRequired && !this.holdsSharedLock(id))\n throw new IModelError(IModelStatus.LockNotHeld, `shared lock not held on ${type} for ${operation} (id=${id})`);\n }\n\n}\n\nexport function createServerBasedLocks(iModel: BriefcaseDb): LockControl {\n return new ServerBasedLocks(iModel);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Symbols.js","sourceRoot":"","sources":["../../../src/internal/Symbols.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEU,QAAA,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;AAE1I,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,GAAG,IAAI,wCAAwC,CAAC;AACzD,CAAC;AAEY,QAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,QAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC1D,QAAA,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1C,QAAA,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,QAAA,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,gBAAgB;AACH,QAAA,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACxC,QAAA,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACtD,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;AAC/D,gBAAgB;AACH,QAAA,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1C,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAChD,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAChD,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACpD,QAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,QAAA,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACxD,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"Symbols.js","sourceRoot":"","sources":["../../../src/internal/Symbols.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEU,QAAA,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;AAE1I,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,GAAG,IAAI,wCAAwC,CAAC;AACzD,CAAC;AAEY,QAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,QAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC1D,QAAA,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1C,QAAA,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,QAAA,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,gBAAgB;AACH,QAAA,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACxC,QAAA,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACtD,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;AAC/D,gBAAgB;AACH,QAAA,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1C,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAChD,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAChD,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACpD,QAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,QAAA,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACxD,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nexport const _implementationProhibited = Symbol.for(\"Implementations of this interface can only be obtained from the containing package\");\n\nfunction sym(name: string): string {\n return `${name}_core-backend_INTERNAL_ONLY_DO_NOT_USE`;\n}\n\nexport const _close = Symbol.for(sym(\"close\"));\nexport const _elementWasCreated = Symbol.for(sym(\"elementWasCreated\"));\nexport const _faceProps = Symbol.for(sym(\"faceProps\"));\nexport const _getData = Symbol.for(sym(\"getData\"));\nexport const _key = Symbol.for(sym(\"key\"));\n/** @internal */\nexport const _nativeDb = Symbol.for(sym(\"nativeDb\"));\nexport const _releaseAllLocks = Symbol.for(sym(\"releaseAllLocks\"));\nexport const _verifyChannel = Symbol.for(sym(\"verifyChannel\"));\n/** @internal */\nexport const _hubAccess = Symbol.for(sym(\"hubAccess\"));\nexport const _setHubAccess = Symbol.for(sym(\"setHubAccess\"));\nexport const _getHubAccess = Symbol.for(sym(\"getHubAccess\"));\nexport const _mockCheckpoint = Symbol.for(sym(\"mockCheckpoint\"));\nexport const _cache = Symbol.for(sym(\"cache\"));\nexport const _instanceKeyCache = Symbol.for(sym(\"instanceKeyCache\"));\nexport const _resetIModelDb = Symbol.for(sym(\"resetIModelDb\"));\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../../src/internal/annotations/fields.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { ECSqlValueType, FieldPrimitiveValue, FieldPropertyType, FieldRun, FieldValue, formatFieldValue, RelationshipProps, TextBlock, traverseTextBlockComponent } from \"@itwin/core-common\";\r\nimport { IModelDb } from \"../../IModelDb\";\r\nimport { assert, DbResult, expectDefined, Id64String, Logger } from \"@itwin/core-bentley\";\r\nimport { BackendLoggerCategory } from \"../../BackendLoggerCategory\";\r\nimport { isITextAnnotation } from \"../../annotations/ElementDrivesTextAnnotation\";\r\nimport { AnyClass, EntityClass, PrimitiveType, Property, PropertyType, StructArrayProperty } from \"@itwin/ecschema-metadata\";\r\n\r\ninterface FieldStructValue { [key: string]: any }\r\n\r\n// An intermediate value obtained while evaluating a FieldPropertyPath.\r\ntype FieldValueType = {\r\n primitive: FieldPrimitiveValue;\r\n struct?: never;\r\n primitiveArray?: never;\r\n structArray?: never;\r\n} | {\r\n primitive?: never;\r\n struct: FieldStructValue;\r\n primitiveArray?: never;\r\n structArray?: never;\r\n} | {\r\n primitive?: never;\r\n struct?: never;\r\n primitiveArray: FieldPrimitiveValue[];\r\n structArray?: never;\r\n} | {\r\n primitive?: never;\r\n struct?: never;\r\n primitiveArray?: never;\r\n structArray: FieldStructValue[];\r\n}\r\n\r\nexport interface UpdateFieldsContext {\r\n readonly hostElementId: Id64String | undefined;\r\n\r\n getProperty(field: FieldRun): FieldValue | undefined\r\n}\r\n\r\n// Resolve the raw primitive value of the property that a field points to.\r\nfunction getFieldPropertyValue(field: FieldRun, iModel: IModelDb): FieldValue | undefined {\r\n const host = field.propertyHost;\r\n const schemaItem = iModel.schemaContext.getSchemaItemSync(host.schemaName, host.className);\r\n if (!EntityClass.isEntityClass(schemaItem)) {\r\n return undefined;\r\n }\r\n\r\n let ecClass: AnyClass = schemaItem;\r\n const { propertyName, accessors } = field.propertyPath;\r\n let ecProp = ecClass.getPropertySync(propertyName);\r\n if (!ecProp) {\r\n return undefined;\r\n }\r\n\r\n const isAspect = ecClass.isSync(\"ElementAspect\", \"BisCore\");\r\n const where = ` WHERE ${isAspect ? \"Element.Id\" : \"ECInstanceId\"}=${host.elementId}`;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n let curValue: FieldValueType | undefined = iModel.withPreparedStatement(`SELECT ${propertyName} FROM ${host.schemaName}.${host.className} ${where}`, (stmt) => {\r\n if (stmt.step() !== DbResult.BE_SQLITE_ROW) {\r\n return undefined;\r\n }\r\n\r\n const rootValue = stmt.getValue(0);\r\n if (undefined === rootValue || rootValue.isNull) {\r\n return undefined;\r\n }\r\n\r\n switch (rootValue.columnInfo.getType()) {\r\n case ECSqlValueType.Blob:\r\n return { primitive: rootValue.getBlob() };\r\n case ECSqlValueType.Boolean:\r\n return { primitive: rootValue.getBoolean() };\r\n case ECSqlValueType.DateTime:\r\n return { primitive: new Date(rootValue.getDateTime()) };\r\n case ECSqlValueType.Double:\r\n return { primitive: rootValue.getDouble() };\r\n case ECSqlValueType.Guid:\r\n return { primitive: rootValue.getGuid() };\r\n case ECSqlValueType.Int:\r\n case ECSqlValueType.Int64:\r\n return { primitive: rootValue.getInteger() };\r\n case ECSqlValueType.Point2d:\r\n return { primitive: rootValue.getXAndY() };\r\n case ECSqlValueType.Point3d:\r\n return { primitive: rootValue.getXYAndZ() };\r\n case ECSqlValueType.String:\r\n return { primitive: rootValue.getString() };\r\n case ECSqlValueType.Struct: {\r\n ecProp = expectDefined(ecProp);\r\n assert(ecProp.isStruct());\r\n ecClass = ecProp.structClass;\r\n return { struct: rootValue.getStruct() };\r\n }\r\n case ECSqlValueType.PrimitiveArray: {\r\n return { primitiveArray: rootValue.getArray() };\r\n }\r\n case ECSqlValueType.StructArray: {\r\n return { structArray: rootValue.getArray() };\r\n }\r\n // Unsupported:\r\n // case ECSqlValueType.Geometry:\r\n // case ECSqlValueType.Navigation:\r\n // case ECSqlValueType.Id:\r\n }\r\n\r\n return undefined;\r\n });\r\n\r\n if (undefined === curValue) {\r\n return undefined;\r\n }\r\n\r\n if (accessors) {\r\n for (const accessor of accessors) {\r\n if (undefined !== curValue.primitive) {\r\n // Can't index into a primitive.\r\n return undefined;\r\n }\r\n\r\n if (typeof accessor === \"number\") {\r\n const array: FieldPrimitiveValue[] | FieldStructValue[] | undefined = curValue.primitiveArray ?? curValue.structArray;\r\n if (!array) {\r\n return undefined;\r\n }\r\n\r\n const index: number = accessor < 0 ? (array.length + accessor) : accessor;\r\n const item: FieldPrimitiveValue | FieldStructValue = array[index];\r\n if (undefined === item) {\r\n return undefined;\r\n } else if (curValue.primitiveArray) {\r\n curValue = { primitive: curValue.primitiveArray[index] };\r\n } else {\r\n assert(undefined !== curValue.structArray);\r\n assert(ecProp instanceof StructArrayProperty);\r\n\r\n ecClass = ecProp.structClass;\r\n curValue = { struct: curValue.structArray[index] };\r\n }\r\n } else {\r\n if (undefined === curValue.struct) {\r\n return undefined;\r\n }\r\n\r\n const item: any = curValue.struct[accessor];\r\n if (undefined === item) {\r\n return undefined;\r\n }\r\n\r\n ecProp = ecClass.getPropertySync(accessor);\r\n if (!ecProp) {\r\n return undefined;\r\n }\r\n\r\n if (ecProp.isArray()) {\r\n curValue = ecProp.isStruct() ? { structArray: item } : { primitiveArray: item };\r\n } else if (ecProp.isStruct()) {\r\n ecClass = ecProp.structClass;\r\n curValue = { struct: item };\r\n } else if (ecProp.isPrimitive()) {\r\n curValue = { primitive: item };\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const propertyType = determineFieldPropertyType(ecProp);\r\n if(!propertyType) {\r\n return undefined;\r\n }\r\n\r\n // The ultimate result must be a primitive value.\r\n if (undefined === curValue.primitive) {\r\n return undefined;\r\n }\r\n\r\n return { value: curValue.primitive, type: propertyType };\r\n}\r\n\r\nfunction determineFieldPropertyType(prop: Property): FieldPropertyType | undefined {\r\n if (prop.isEnumeration()) {\r\n switch (prop.propertyType) {\r\n case PropertyType.Integer_Enumeration:\r\n return \"int-enum\";\r\n case PropertyType.String_Enumeration:\r\n return \"string-enum\";\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n if (prop.isPrimitive()) {\r\n switch (prop.primitiveType) {\r\n case PrimitiveType.Boolean:\r\n return \"boolean\";\r\n case PrimitiveType.String:\r\n return prop.extendedTypeName === \"DateTime\" ? \"datetime\" : \"string\";\r\n case PrimitiveType.DateTime:\r\n return \"datetime\";\r\n case PrimitiveType.Double:\r\n case PrimitiveType.Long:\r\n return \"quantity\";\r\n case PrimitiveType.Point2d:\r\n case PrimitiveType.Point3d:\r\n return \"coordinate\";\r\n case PrimitiveType.Binary:\r\n return prop.extendedTypeName === \"BeGuid\" ? \"string\" : undefined;\r\n case PrimitiveType.Integer:\r\n case PrimitiveType.Long:\r\n return \"string\";\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function createUpdateContext(hostElementId: string | undefined, iModel: IModelDb, deleted: boolean): UpdateFieldsContext {\r\n return {\r\n hostElementId,\r\n getProperty: deleted ? () => undefined : (field) => getFieldPropertyValue(field, iModel),\r\n };\r\n}\r\n\r\n// Recompute the display value of a single field, return false if it couldn't be evaluated.\r\nexport function updateField(field: FieldRun, context: UpdateFieldsContext): boolean {\r\n if (context.hostElementId && context.hostElementId !== field.propertyHost.elementId) {\r\n return false;\r\n }\r\n\r\n let newContent: string | undefined;\r\n try {\r\n const propValue = context.getProperty(field);\r\n if (undefined !== propValue) {\r\n newContent = formatFieldValue(propValue, field.formatOptions);\r\n }\r\n } catch (err) {\r\n Logger.logException(BackendLoggerCategory.IModelDb, err);\r\n }\r\n\r\n newContent = newContent ?? FieldRun.invalidContentIndicator;\r\n if (newContent === field.cachedContent) {\r\n return false;\r\n }\r\n\r\n field.setCachedContent(newContent);\r\n return true;\r\n}\r\n\r\n// Re-evaluates the display strings for all fields that target the element specified by `context` and returns the number\r\n// of fields whose display strings changed as a result.\r\nexport function updateFields(textBlock: TextBlock, context: UpdateFieldsContext): number {\r\n let numUpdated = 0;\r\n for (const { child } of traverseTextBlockComponent(textBlock)) {\r\n if (child.type === \"field\" && updateField(child, context)) {\r\n ++numUpdated;\r\n }\r\n }\r\n\r\n return numUpdated;\r\n}\r\n\r\nfunction doUpdateFields(annotationId: Id64String, sourceId: Id64String | undefined, iModel: IModelDb, deleted: boolean): void {\r\n try {\r\n const target = iModel.elements.getElement(annotationId);\r\n if (isITextAnnotation(target)) {\r\n const context = createUpdateContext(sourceId, iModel, deleted);\r\n const updatedBlocks = [];\r\n for (const block of target.getTextBlocks()) {\r\n if (updateFields(block.textBlock, context)) {\r\n updatedBlocks.push(block);\r\n }\r\n }\r\n\r\n if (updatedBlocks.length > 0) {\r\n target.updateTextBlocks(updatedBlocks);\r\n target.update();\r\n }\r\n }\r\n } catch (err) {\r\n Logger.logException(BackendLoggerCategory.IModelDb, err);\r\n }\r\n}\r\n\r\n// Invoked by ElementDrivesTextAnnotation to update fields in target element when source element changes or is deleted.\r\nexport function updateElementFields(props: RelationshipProps, iModel: IModelDb, deleted: boolean): void {\r\n doUpdateFields(props.targetId, props.sourceId, iModel, deleted);\r\n}\r\n\r\nexport function updateAllFields(annotationElementId: Id64String, iModel: IModelDb): void {\r\n doUpdateFields(annotationElementId, undefined, iModel, false);\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../../src/internal/annotations/fields.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { ECSqlValueType, FieldPrimitiveValue, FieldPropertyType, FieldRun, FieldValue, formatFieldValue, RelationshipProps, TextBlock, traverseTextBlockComponent } from \"@itwin/core-common\";\nimport { IModelDb } from \"../../IModelDb\";\nimport { assert, DbResult, expectDefined, Id64String, Logger } from \"@itwin/core-bentley\";\nimport { BackendLoggerCategory } from \"../../BackendLoggerCategory\";\nimport { isITextAnnotation } from \"../../annotations/ElementDrivesTextAnnotation\";\nimport { AnyClass, EntityClass, PrimitiveType, Property, PropertyType, StructArrayProperty } from \"@itwin/ecschema-metadata\";\n\ninterface FieldStructValue { [key: string]: any }\n\n// An intermediate value obtained while evaluating a FieldPropertyPath.\ntype FieldValueType = {\n primitive: FieldPrimitiveValue;\n struct?: never;\n primitiveArray?: never;\n structArray?: never;\n} | {\n primitive?: never;\n struct: FieldStructValue;\n primitiveArray?: never;\n structArray?: never;\n} | {\n primitive?: never;\n struct?: never;\n primitiveArray: FieldPrimitiveValue[];\n structArray?: never;\n} | {\n primitive?: never;\n struct?: never;\n primitiveArray?: never;\n structArray: FieldStructValue[];\n}\n\nexport interface UpdateFieldsContext {\n readonly hostElementId: Id64String | undefined;\n\n getProperty(field: FieldRun): FieldValue | undefined\n}\n\n// Resolve the raw primitive value of the property that a field points to.\nfunction getFieldPropertyValue(field: FieldRun, iModel: IModelDb): FieldValue | undefined {\n const host = field.propertyHost;\n const schemaItem = iModel.schemaContext.getSchemaItemSync(host.schemaName, host.className);\n if (!EntityClass.isEntityClass(schemaItem)) {\n return undefined;\n }\n\n let ecClass: AnyClass = schemaItem;\n const { propertyName, accessors } = field.propertyPath;\n let ecProp = ecClass.getPropertySync(propertyName);\n if (!ecProp) {\n return undefined;\n }\n\n const isAspect = ecClass.isSync(\"ElementAspect\", \"BisCore\");\n const where = ` WHERE ${isAspect ? \"Element.Id\" : \"ECInstanceId\"}=${host.elementId}`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let curValue: FieldValueType | undefined = iModel.withPreparedStatement(`SELECT ${propertyName} FROM ${host.schemaName}.${host.className} ${where}`, (stmt) => {\n if (stmt.step() !== DbResult.BE_SQLITE_ROW) {\n return undefined;\n }\n\n const rootValue = stmt.getValue(0);\n if (undefined === rootValue || rootValue.isNull) {\n return undefined;\n }\n\n switch (rootValue.columnInfo.getType()) {\n case ECSqlValueType.Blob:\n return { primitive: rootValue.getBlob() };\n case ECSqlValueType.Boolean:\n return { primitive: rootValue.getBoolean() };\n case ECSqlValueType.DateTime:\n return { primitive: new Date(rootValue.getDateTime()) };\n case ECSqlValueType.Double:\n return { primitive: rootValue.getDouble() };\n case ECSqlValueType.Guid:\n return { primitive: rootValue.getGuid() };\n case ECSqlValueType.Int:\n case ECSqlValueType.Int64:\n return { primitive: rootValue.getInteger() };\n case ECSqlValueType.Point2d:\n return { primitive: rootValue.getXAndY() };\n case ECSqlValueType.Point3d:\n return { primitive: rootValue.getXYAndZ() };\n case ECSqlValueType.String:\n return { primitive: rootValue.getString() };\n case ECSqlValueType.Struct: {\n ecProp = expectDefined(ecProp);\n assert(ecProp.isStruct());\n ecClass = ecProp.structClass;\n return { struct: rootValue.getStruct() };\n }\n case ECSqlValueType.PrimitiveArray: {\n return { primitiveArray: rootValue.getArray() };\n }\n case ECSqlValueType.StructArray: {\n return { structArray: rootValue.getArray() };\n }\n // Unsupported:\n // case ECSqlValueType.Geometry:\n // case ECSqlValueType.Navigation:\n // case ECSqlValueType.Id:\n }\n\n return undefined;\n });\n\n if (undefined === curValue) {\n return undefined;\n }\n\n if (accessors) {\n for (const accessor of accessors) {\n if (undefined !== curValue.primitive) {\n // Can't index into a primitive.\n return undefined;\n }\n\n if (typeof accessor === \"number\") {\n const array: FieldPrimitiveValue[] | FieldStructValue[] | undefined = curValue.primitiveArray ?? curValue.structArray;\n if (!array) {\n return undefined;\n }\n\n const index: number = accessor < 0 ? (array.length + accessor) : accessor;\n const item: FieldPrimitiveValue | FieldStructValue = array[index];\n if (undefined === item) {\n return undefined;\n } else if (curValue.primitiveArray) {\n curValue = { primitive: curValue.primitiveArray[index] };\n } else {\n assert(undefined !== curValue.structArray);\n assert(ecProp instanceof StructArrayProperty);\n\n ecClass = ecProp.structClass;\n curValue = { struct: curValue.structArray[index] };\n }\n } else {\n if (undefined === curValue.struct) {\n return undefined;\n }\n\n const item: any = curValue.struct[accessor];\n if (undefined === item) {\n return undefined;\n }\n\n ecProp = ecClass.getPropertySync(accessor);\n if (!ecProp) {\n return undefined;\n }\n\n if (ecProp.isArray()) {\n curValue = ecProp.isStruct() ? { structArray: item } : { primitiveArray: item };\n } else if (ecProp.isStruct()) {\n ecClass = ecProp.structClass;\n curValue = { struct: item };\n } else if (ecProp.isPrimitive()) {\n curValue = { primitive: item };\n } else {\n return undefined;\n }\n }\n }\n }\n\n const propertyType = determineFieldPropertyType(ecProp);\n if(!propertyType) {\n return undefined;\n }\n\n // The ultimate result must be a primitive value.\n if (undefined === curValue.primitive) {\n return undefined;\n }\n\n return { value: curValue.primitive, type: propertyType };\n}\n\nfunction determineFieldPropertyType(prop: Property): FieldPropertyType | undefined {\n if (prop.isEnumeration()) {\n switch (prop.propertyType) {\n case PropertyType.Integer_Enumeration:\n return \"int-enum\";\n case PropertyType.String_Enumeration:\n return \"string-enum\";\n default:\n return undefined;\n }\n }\n\n if (prop.isPrimitive()) {\n switch (prop.primitiveType) {\n case PrimitiveType.Boolean:\n return \"boolean\";\n case PrimitiveType.String:\n return prop.extendedTypeName === \"DateTime\" ? \"datetime\" : \"string\";\n case PrimitiveType.DateTime:\n return \"datetime\";\n case PrimitiveType.Double:\n case PrimitiveType.Long:\n return \"quantity\";\n case PrimitiveType.Point2d:\n case PrimitiveType.Point3d:\n return \"coordinate\";\n case PrimitiveType.Binary:\n return prop.extendedTypeName === \"BeGuid\" ? \"string\" : undefined;\n case PrimitiveType.Integer:\n case PrimitiveType.Long:\n return \"string\";\n default:\n return undefined;\n }\n }\n\n return undefined;\n}\n\nexport function createUpdateContext(hostElementId: string | undefined, iModel: IModelDb, deleted: boolean): UpdateFieldsContext {\n return {\n hostElementId,\n getProperty: deleted ? () => undefined : (field) => getFieldPropertyValue(field, iModel),\n };\n}\n\n// Recompute the display value of a single field, return false if it couldn't be evaluated.\nexport function updateField(field: FieldRun, context: UpdateFieldsContext): boolean {\n if (context.hostElementId && context.hostElementId !== field.propertyHost.elementId) {\n return false;\n }\n\n let newContent: string | undefined;\n try {\n const propValue = context.getProperty(field);\n if (undefined !== propValue) {\n newContent = formatFieldValue(propValue, field.formatOptions);\n }\n } catch (err) {\n Logger.logException(BackendLoggerCategory.IModelDb, err);\n }\n\n newContent = newContent ?? FieldRun.invalidContentIndicator;\n if (newContent === field.cachedContent) {\n return false;\n }\n\n field.setCachedContent(newContent);\n return true;\n}\n\n// Re-evaluates the display strings for all fields that target the element specified by `context` and returns the number\n// of fields whose display strings changed as a result.\nexport function updateFields(textBlock: TextBlock, context: UpdateFieldsContext): number {\n let numUpdated = 0;\n for (const { child } of traverseTextBlockComponent(textBlock)) {\n if (child.type === \"field\" && updateField(child, context)) {\n ++numUpdated;\n }\n }\n\n return numUpdated;\n}\n\nfunction doUpdateFields(annotationId: Id64String, sourceId: Id64String | undefined, iModel: IModelDb, deleted: boolean): void {\n try {\n const target = iModel.elements.getElement(annotationId);\n if (isITextAnnotation(target)) {\n const context = createUpdateContext(sourceId, iModel, deleted);\n const updatedBlocks = [];\n for (const block of target.getTextBlocks()) {\n if (updateFields(block.textBlock, context)) {\n updatedBlocks.push(block);\n }\n }\n\n if (updatedBlocks.length > 0) {\n target.updateTextBlocks(updatedBlocks);\n target.update();\n }\n }\n } catch (err) {\n Logger.logException(BackendLoggerCategory.IModelDb, err);\n }\n}\n\n// Invoked by ElementDrivesTextAnnotation to update fields in target element when source element changes or is deleted.\nexport function updateElementFields(props: RelationshipProps, iModel: IModelDb, deleted: boolean): void {\n doUpdateFields(props.targetId, props.sourceId, iModel, deleted);\n}\n\nexport function updateAllFields(annotationElementId: Id64String, iModel: IModelDb): void {\n doUpdateFields(annotationElementId, undefined, iModel, false);\n}\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-package.js","sourceRoot":"","sources":["../../../src/internal/cross-package.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,4DAAmG;AAA1F,iHAAA,cAAc,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAChE,mDAAgD;AAAvC,8GAAA,YAAY,OAAA;AACrB,qCAEmB;AADjB,oGAAA,SAAS,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"cross-package.js","sourceRoot":"","sources":["../../../src/internal/cross-package.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,4DAAmG;AAA1F,iHAAA,cAAc,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAChE,mDAAgD;AAAvC,8GAAA,YAAY,OAAA;AACrB,qCAEmB;AADjB,oGAAA,SAAS,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nexport { IModelJsNative, NativeCloudSqlite, NativeLoggerCategory } from \"@bentley/imodeljs-native\";\nexport { IModelNative } from \"./NativePlatform\";\nexport {\n _nativeDb,\n} from \"./Symbols\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Workspace\r\n */\r\n\r\nimport * as fs from \"fs-extra\";\r\nimport { parse } from \"json5\";\r\nimport { extname, join } from \"path\";\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { Setting, SettingName, Settings, SettingsContainer, SettingsDictionary, SettingsDictionaryProps, SettingsDictionarySource, SettingsPriority } from \"../../workspace/Settings\";\r\nimport { IModelHost } from \"../../IModelHost\";\r\nimport { _implementationProhibited } from \"../Symbols\";\r\n\r\nconst dictionaryMatches = (d1: SettingsDictionarySource, d2: SettingsDictionarySource): boolean => {\r\n return (d1.workspaceDb === d2.workspaceDb) && (d1.name === d2.name);\r\n};\r\n\r\nclass SettingsDictionaryImpl implements SettingsDictionary {\r\n public readonly [_implementationProhibited] = undefined;\r\n public readonly props: SettingsDictionaryProps;\r\n public readonly settings: SettingsContainer;\r\n\r\n public constructor(props: SettingsDictionaryProps, settings: SettingsContainer) {\r\n this.props = { ...props }; // make a copy so it can't be changed by caller\r\n this.settings = settings;\r\n }\r\n\r\n public getSetting<T extends Setting>(settingName: string): T | undefined {\r\n const value = this.settings[settingName] as T | undefined;\r\n return undefined !== value ? Setting.clone(value) : undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Internal implementation of Settings interface.\r\n * @internal\r\n */\r\nexport class SettingsImpl implements Settings {\r\n public readonly [_implementationProhibited] = undefined;\r\n public dictionaries: SettingsDictionary[] = [];\r\n protected verifyPriority(_priority: SettingsPriority) { }\r\n public close() { }\r\n public readonly onSettingsChanged = new BeEvent<() => void>();\r\n\r\n public addFile(fileName: LocalFileName, priority: SettingsPriority) {\r\n this.addJson({ name: fileName, priority }, fs.readFileSync(fileName, \"utf-8\"));\r\n }\r\n\r\n public addDirectory(dirName: LocalDirName, priority: SettingsPriority) {\r\n for (const fileName of IModelJsFs.readdirSync(dirName)) {\r\n const ext = extname(fileName);\r\n if (ext === \".json5\" || ext === \".json\")\r\n this.addFile(join(dirName, fileName), priority);\r\n }\r\n }\r\n\r\n public addJson(props: SettingsDictionaryProps, settingsJson: string) {\r\n this.addDictionary(props, parse(settingsJson));\r\n }\r\n\r\n public addDictionary(props: SettingsDictionaryProps, settings: SettingsContainer) {\r\n this.verifyPriority(props.priority);\r\n this.dropDictionary(props, false); // make sure we don't have the same dictionary twice\r\n const dict = new SettingsDictionaryImpl(props, settings);\r\n const doAdd = () => {\r\n for (let i = 0; i < this.dictionaries.length; ++i) {\r\n if (this.dictionaries[i].props.priority <= dict.props.priority) {\r\n this.dictionaries.splice(i, 0, dict);\r\n return;\r\n }\r\n }\r\n this.dictionaries.push(dict);\r\n };\r\n doAdd();\r\n this.onSettingsChanged.raiseEvent();\r\n }\r\n\r\n public getDictionary(source: SettingsDictionarySource): SettingsDictionary | undefined {\r\n for (const dictionary of this.dictionaries) {\r\n if (dictionaryMatches(dictionary.props, source))\r\n return dictionary;\r\n }\r\n return undefined;\r\n }\r\n\r\n public dropDictionary(source: SettingsDictionarySource, raiseEvent = true) {\r\n for (let i = 0; i < this.dictionaries.length; ++i) {\r\n if (dictionaryMatches(this.dictionaries[i].props, source)) {\r\n this.dictionaries.splice(i, 1);\r\n if (raiseEvent)\r\n this.onSettingsChanged.raiseEvent();\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public * getSettingEntries<T extends Setting>(settingName: SettingName): Iterable<{ value: T, dictionary: SettingsDictionary}> {\r\n for (const dictionary of this.dictionaries) {\r\n const value = dictionary.getSetting<T>(settingName);\r\n if (undefined !== value) {\r\n yield { value, dictionary };\r\n }\r\n }\r\n }\r\n\r\n public * getSettingValues<T extends Setting>(settingName: SettingName): Iterable<T> {\r\n for (const entry of this.getSettingEntries<T>(settingName)) {\r\n yield entry.value;\r\n }\r\n }\r\n\r\n public getSetting<T extends Setting>(settingName: SettingName, defaultValue?: T): T | undefined {\r\n for (const value of this.getSettingValues<T>(settingName)) {\r\n return value;\r\n }\r\n\r\n return defaultValue;\r\n }\r\n\r\n // get the setting and verify the result is either undefined or the correct type. If so, return it. Otherwise throw an exception.\r\n private getResult<T extends Setting>(name: SettingName, expectedType: string) {\r\n const out = this.getSetting<T>(name);\r\n if (out === undefined || typeof out === expectedType)\r\n return out;\r\n throw new Error(`setting \"${name}\" is not a ${expectedType}: ${typeof out}`);\r\n }\r\n public getString(name: SettingName, defaultValue: string): string;\r\n public getString(name: SettingName): string | undefined;\r\n public getString(name: SettingName, defaultValue?: string): string | undefined {\r\n return this.getResult<string>(name, \"string\") ?? defaultValue;\r\n }\r\n public getBoolean(name: SettingName, defaultValue: boolean): boolean;\r\n public getBoolean(name: SettingName): boolean | undefined;\r\n public getBoolean(name: SettingName, defaultValue?: boolean): boolean | undefined {\r\n return this.getResult<boolean>(name, \"boolean\") ?? defaultValue;\r\n }\r\n public getNumber(name: SettingName, defaultValue: number): number;\r\n public getNumber(name: SettingName): number | undefined;\r\n public getNumber(name: SettingName, defaultValue?: number): number | undefined {\r\n return this.getResult<number>(name, \"number\") ?? defaultValue;\r\n }\r\n public getObject<T extends object>(name: SettingName, defaultValue: T): T;\r\n public getObject<T extends object>(name: SettingName): T | undefined;\r\n public getObject<T extends object>(name: SettingName, defaultValue?: T): T | undefined {\r\n const out = this.getResult<T>(name, \"object\");\r\n return out ? IModelHost.settingsSchemas.validateSetting(out, name) : defaultValue;\r\n }\r\n public getArray<T extends Setting>(name: SettingName, defaultValue: T[]): T[];\r\n public getArray<T extends Setting>(name: SettingName): T[] | undefined;\r\n public getArray<T extends Setting>(name: SettingName, defaultValue?: T[]): T[] | undefined {\r\n if (IModelHost.settingsSchemas.settingDefs.get(name)?.combineArray) {\r\n return this.getCombinedArray<T>(name, defaultValue);\r\n }\r\n\r\n const out = this.getSetting<T[]>(name);\r\n if (out === undefined)\r\n return defaultValue;\r\n if (!Array.isArray(out))\r\n throw new Error(`setting ${name} is not an array: ${String(out)}`);\r\n return IModelHost.settingsSchemas.validateSetting(out, name);\r\n }\r\n\r\n private getCombinedArray<T extends Setting>(name: SettingName, defaultValue?: T[]): T[] | undefined {\r\n let foundSetting = false;\r\n const out: T[] = [];\r\n for (const array of this.getSettingValues<T[]>(name)) {\r\n foundSetting = true;\r\n\r\n IModelHost.settingsSchemas.validateSetting(array, name);\r\n for (const value of array) {\r\n if (undefined === out.find((x) => Setting.areEqual(x, value))) {\r\n out.push(value);\r\n }\r\n }\r\n }\r\n\r\n return foundSetting ? out : defaultValue;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SettingsImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport * as fs from \"fs-extra\";\nimport { parse } from \"json5\";\nimport { extname, join } from \"path\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { Setting, SettingName, Settings, SettingsContainer, SettingsDictionary, SettingsDictionaryProps, SettingsDictionarySource, SettingsPriority } from \"../../workspace/Settings\";\nimport { IModelHost } from \"../../IModelHost\";\nimport { _implementationProhibited } from \"../Symbols\";\n\nconst dictionaryMatches = (d1: SettingsDictionarySource, d2: SettingsDictionarySource): boolean => {\n return (d1.workspaceDb === d2.workspaceDb) && (d1.name === d2.name);\n};\n\nclass SettingsDictionaryImpl implements SettingsDictionary {\n public readonly [_implementationProhibited] = undefined;\n public readonly props: SettingsDictionaryProps;\n public readonly settings: SettingsContainer;\n\n public constructor(props: SettingsDictionaryProps, settings: SettingsContainer) {\n this.props = { ...props }; // make a copy so it can't be changed by caller\n this.settings = settings;\n }\n\n public getSetting<T extends Setting>(settingName: string): T | undefined {\n const value = this.settings[settingName] as T | undefined;\n return undefined !== value ? Setting.clone(value) : undefined;\n }\n}\n\n/**\n * Internal implementation of Settings interface.\n * @internal\n */\nexport class SettingsImpl implements Settings {\n public readonly [_implementationProhibited] = undefined;\n public dictionaries: SettingsDictionary[] = [];\n protected verifyPriority(_priority: SettingsPriority) { }\n public close() { }\n public readonly onSettingsChanged = new BeEvent<() => void>();\n\n public addFile(fileName: LocalFileName, priority: SettingsPriority) {\n this.addJson({ name: fileName, priority }, fs.readFileSync(fileName, \"utf-8\"));\n }\n\n public addDirectory(dirName: LocalDirName, priority: SettingsPriority) {\n for (const fileName of IModelJsFs.readdirSync(dirName)) {\n const ext = extname(fileName);\n if (ext === \".json5\" || ext === \".json\")\n this.addFile(join(dirName, fileName), priority);\n }\n }\n\n public addJson(props: SettingsDictionaryProps, settingsJson: string) {\n this.addDictionary(props, parse(settingsJson));\n }\n\n public addDictionary(props: SettingsDictionaryProps, settings: SettingsContainer) {\n this.verifyPriority(props.priority);\n this.dropDictionary(props, false); // make sure we don't have the same dictionary twice\n const dict = new SettingsDictionaryImpl(props, settings);\n const doAdd = () => {\n for (let i = 0; i < this.dictionaries.length; ++i) {\n if (this.dictionaries[i].props.priority <= dict.props.priority) {\n this.dictionaries.splice(i, 0, dict);\n return;\n }\n }\n this.dictionaries.push(dict);\n };\n doAdd();\n this.onSettingsChanged.raiseEvent();\n }\n\n public getDictionary(source: SettingsDictionarySource): SettingsDictionary | undefined {\n for (const dictionary of this.dictionaries) {\n if (dictionaryMatches(dictionary.props, source))\n return dictionary;\n }\n return undefined;\n }\n\n public dropDictionary(source: SettingsDictionarySource, raiseEvent = true) {\n for (let i = 0; i < this.dictionaries.length; ++i) {\n if (dictionaryMatches(this.dictionaries[i].props, source)) {\n this.dictionaries.splice(i, 1);\n if (raiseEvent)\n this.onSettingsChanged.raiseEvent();\n return true;\n }\n }\n return false;\n }\n\n public * getSettingEntries<T extends Setting>(settingName: SettingName): Iterable<{ value: T, dictionary: SettingsDictionary}> {\n for (const dictionary of this.dictionaries) {\n const value = dictionary.getSetting<T>(settingName);\n if (undefined !== value) {\n yield { value, dictionary };\n }\n }\n }\n\n public * getSettingValues<T extends Setting>(settingName: SettingName): Iterable<T> {\n for (const entry of this.getSettingEntries<T>(settingName)) {\n yield entry.value;\n }\n }\n\n public getSetting<T extends Setting>(settingName: SettingName, defaultValue?: T): T | undefined {\n for (const value of this.getSettingValues<T>(settingName)) {\n return value;\n }\n\n return defaultValue;\n }\n\n // get the setting and verify the result is either undefined or the correct type. If so, return it. Otherwise throw an exception.\n private getResult<T extends Setting>(name: SettingName, expectedType: string) {\n const out = this.getSetting<T>(name);\n if (out === undefined || typeof out === expectedType)\n return out;\n throw new Error(`setting \"${name}\" is not a ${expectedType}: ${typeof out}`);\n }\n public getString(name: SettingName, defaultValue: string): string;\n public getString(name: SettingName): string | undefined;\n public getString(name: SettingName, defaultValue?: string): string | undefined {\n return this.getResult<string>(name, \"string\") ?? defaultValue;\n }\n public getBoolean(name: SettingName, defaultValue: boolean): boolean;\n public getBoolean(name: SettingName): boolean | undefined;\n public getBoolean(name: SettingName, defaultValue?: boolean): boolean | undefined {\n return this.getResult<boolean>(name, \"boolean\") ?? defaultValue;\n }\n public getNumber(name: SettingName, defaultValue: number): number;\n public getNumber(name: SettingName): number | undefined;\n public getNumber(name: SettingName, defaultValue?: number): number | undefined {\n return this.getResult<number>(name, \"number\") ?? defaultValue;\n }\n public getObject<T extends object>(name: SettingName, defaultValue: T): T;\n public getObject<T extends object>(name: SettingName): T | undefined;\n public getObject<T extends object>(name: SettingName, defaultValue?: T): T | undefined {\n const out = this.getResult<T>(name, \"object\");\n return out ? IModelHost.settingsSchemas.validateSetting(out, name) : defaultValue;\n }\n public getArray<T extends Setting>(name: SettingName, defaultValue: T[]): T[];\n public getArray<T extends Setting>(name: SettingName): T[] | undefined;\n public getArray<T extends Setting>(name: SettingName, defaultValue?: T[]): T[] | undefined {\n if (IModelHost.settingsSchemas.settingDefs.get(name)?.combineArray) {\n return this.getCombinedArray<T>(name, defaultValue);\n }\n\n const out = this.getSetting<T[]>(name);\n if (out === undefined)\n return defaultValue;\n if (!Array.isArray(out))\n throw new Error(`setting ${name} is not an array: ${String(out)}`);\n return IModelHost.settingsSchemas.validateSetting(out, name);\n }\n\n private getCombinedArray<T extends Setting>(name: SettingName, defaultValue?: T[]): T[] | undefined {\n let foundSetting = false;\n const out: T[] = [];\n for (const array of this.getSettingValues<T[]>(name)) {\n foundSetting = true;\n\n IModelHost.settingsSchemas.validateSetting(array, name);\n for (const value of array) {\n if (undefined === out.find((x) => Setting.areEqual(x, value))) {\n out.push(value);\n }\n }\n }\n\n return foundSetting ? out : defaultValue;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsSchemasImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsSchemasImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Workspace\r\n */\r\n\r\nimport * as fs from \"fs-extra\";\r\nimport { parse } from \"json5\";\r\nimport { extname, join } from \"path\";\r\nimport { assert, BeEvent, JSONSchemaType, JSONSchemaTypeName, Mutable } from \"@itwin/core-bentley\";\r\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { SettingGroupSchema, SettingSchema, SettingsSchemas } from \"../../workspace/SettingsSchemas\";\r\nimport { _implementationProhibited } from \"../Symbols\";\r\n\r\nconst makeSettingKey = (prefix: string, key: string) => `${prefix}/${key}`;\r\n\r\nclass SettingsSchemasImpl implements SettingsSchemas {\r\n public readonly [_implementationProhibited] = undefined;\r\n private readonly _allGroups = new Map<string, SettingGroupSchema>();\r\n /** a map of all registered Setting Definitions */\r\n public readonly settingDefs = new Map<string, SettingSchema>();\r\n /** a map of all registered TypeDefs */\r\n public readonly typeDefs = new Map<string, SettingSchema>();\r\n /** event that signals that the values in [[allSchemas]] have changed in some way. */\r\n public readonly onSchemaChanged = new BeEvent<() => void>();\r\n\r\n private verifyType<T>(val: T, expectedType: JSONSchemaTypeName, path: string) {\r\n if (expectedType === \"integer\") {\r\n if (Number.isInteger(val))\r\n return;\r\n } else if (expectedType === \"null\") {\r\n if (val === null || val === undefined)\r\n return;\r\n } else if (typeof val === expectedType)\r\n return;\r\n\r\n throw new Error(`value for ${path}: \"${String(val)}\" is wrong type, expected ${expectedType}`);\r\n }\r\n\r\n public validateSetting<T>(value: T, settingName: string): T {\r\n const settingDef = this.settingDefs.get(settingName);\r\n if (undefined !== settingDef) // if there's no setting definition, there's no rules so just return ok\r\n this.validateProperty(value, settingDef, settingName);\r\n return value;\r\n }\r\n\r\n /** @internal */\r\n public getObjectProperties(propDef: Readonly<SettingSchema>, scope: string): { required?: string[], properties: { [name: string]: SettingSchema } } {\r\n let required = propDef.required;\r\n let properties = propDef.properties;\r\n\r\n // if this object extends a typeDef, add typeDef's properties and required values, recursively\r\n if (propDef.extends !== undefined) {\r\n const typeDef = this.typeDefs.get(propDef.extends);\r\n if (undefined === typeDef)\r\n throw new Error(`typeDef ${propDef.extends} does not exist for ${scope}`);\r\n const expanded = this.getObjectProperties(typeDef, `${scope}.${propDef.extends}`);\r\n if (expanded.required)\r\n required = required ? [...required, ...expanded.required] : expanded.required;\r\n if (expanded.properties) {\r\n properties = properties ? { ...expanded.properties, ...properties } : expanded.properties;\r\n }\r\n }\r\n properties = properties ?? {};\r\n return { required, properties };\r\n }\r\n\r\n /** @internal */\r\n public getArrayItems(propDef: Readonly<SettingSchema>, scope: string): SettingSchema {\r\n let items = propDef.items;\r\n if (undefined === items && propDef.extends) {\r\n const typeDef = this.typeDefs.get(propDef.extends);\r\n if (undefined === typeDef)\r\n throw new Error(`typeDef ${propDef.extends} does not exist for ${scope}`);\r\n items = typeDef.items;\r\n }\r\n if (undefined === items)\r\n throw new Error(`array ${scope} has no items definition`);\r\n return items;\r\n }\r\n\r\n private validateProperty<T>(val: T, propDef: Readonly<SettingSchema>, path: string) {\r\n switch (propDef.type) {\r\n case \"boolean\":\r\n case \"number\":\r\n case \"string\":\r\n case \"integer\":\r\n case \"null\":\r\n return this.verifyType(val, propDef.type, path);\r\n\r\n case \"array\":\r\n if (!Array.isArray(val))\r\n throw new Error(`Property ${path} must be an array`);\r\n const items = this.getArrayItems(propDef, path);\r\n for (let i = 0; i < val.length; ++i)\r\n this.validateProperty(val[i], items, `${path}[${i}]`);\r\n return;\r\n }\r\n if (!val || typeof val !== \"object\")\r\n throw new Error(`${path} must be an object`);\r\n\r\n const { required, properties } = this.getObjectProperties(propDef, path);\r\n\r\n // first ensure all required properties are present\r\n if (undefined !== required) {\r\n for (const entry of required) {\r\n const value = (val as any)[entry];\r\n if (undefined === value)\r\n throw new Error(`required value for \"${entry}\" is missing in \"${path}\"`);\r\n }\r\n }\r\n\r\n // you can supply default values in typeDefs. See if any members are undefined that have a default.\r\n if (undefined !== properties) {\r\n for (const [key, prop] of Object.entries(properties)) {\r\n if ((val as any)[key] === undefined && prop.default)\r\n (val as any)[key] = prop.default;\r\n }\r\n }\r\n\r\n // then validate all values in the supplied object are valid\r\n for (const key of Object.keys(val)) {\r\n const prop = properties[key];\r\n if (prop !== undefined) { // note: extra values are ignored.\r\n this.validateProperty((val as any)[key], prop, `${path}.${key}`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add one or more [[SettingSchemaGroup]]s. `SettingSchemaGroup`s must include a `schemaPrefix` member that is used\r\n * to identify the group. If a group with the same name is already registered, the old values are first removed and then the new group is added.\r\n */\r\n public addGroup(settingsGroup: SettingGroupSchema | SettingGroupSchema[]): void {\r\n if (!Array.isArray(settingsGroup))\r\n settingsGroup = [settingsGroup];\r\n\r\n this.doAdd(settingsGroup);\r\n this.onSchemaChanged.raiseEvent();\r\n }\r\n\r\n /** Add a [[SettingSchemaGroup]] from stringified json5. */\r\n public addJson(settingSchema: string): void {\r\n this.addGroup(parse(settingSchema));\r\n }\r\n\r\n /** Add a [[SettingSchemaGroup]] from a json5 file. */\r\n public addFile(fileName: LocalFileName): void {\r\n try {\r\n this.addJson(fs.readFileSync(fileName, \"utf-8\"));\r\n } catch (e: any) {\r\n throw new Error(`parsing SettingSchema file \"${fileName}\": ${e.message}\"`);\r\n }\r\n }\r\n\r\n /** Add all files with a either \".json\" or \".json5\" extension from a supplied directory. */\r\n public addDirectory(dirName: LocalDirName) {\r\n for (const fileName of IModelJsFs.readdirSync(dirName)) {\r\n const ext = extname(fileName);\r\n if (ext === \".json5\" || ext === \".json\")\r\n this.addFile(join(dirName, fileName));\r\n }\r\n }\r\n\r\n /** Remove a previously added [[SettingSchemaGroup]] by schemaPrefix */\r\n public removeGroup(schemaPrefix: string): void {\r\n this.doRemove(schemaPrefix);\r\n this.onSchemaChanged.raiseEvent();\r\n }\r\n\r\n private doAdd(settingsGroup: SettingGroupSchema[]) {\r\n settingsGroup.forEach((group) => {\r\n if (undefined === group.schemaPrefix)\r\n throw new Error(`settings group has no \"schemaPrefix\" member`);\r\n\r\n this.doRemove(group.schemaPrefix);\r\n this.validateAndAdd(group);\r\n this._allGroups.set(group.schemaPrefix, group);\r\n });\r\n }\r\n\r\n private doRemove(schemaPrefix: string) {\r\n const group = this._allGroups.get(schemaPrefix);\r\n if (undefined !== group?.settingDefs) {\r\n for (const key of Object.keys(group.settingDefs))\r\n this.settingDefs.delete(makeSettingKey(schemaPrefix, key));\r\n }\r\n if (undefined !== group?.typeDefs) {\r\n for (const key of Object.keys(group.typeDefs))\r\n this.settingDefs.delete(makeSettingKey(schemaPrefix, key));\r\n }\r\n this._allGroups.delete(schemaPrefix);\r\n }\r\n\r\n private validateName(name: string) {\r\n if (!name.trim())\r\n throw new Error(`empty property name`);\r\n }\r\n\r\n private verifyPropertyDef(name: string, property: SettingSchema | undefined) {\r\n if (!property)\r\n throw new Error(`missing required property ${name}`);\r\n\r\n if (!property.type)\r\n throw new Error(`property ${name} has no type`);\r\n\r\n switch (property.type) {\r\n case \"boolean\":\r\n case \"integer\":\r\n case \"null\":\r\n case \"number\":\r\n case \"string\":\r\n return;\r\n\r\n case \"object\":\r\n const required = property.required;\r\n const props = property.properties;\r\n if (required && props) {\r\n for (const entry of required) {\r\n if (undefined === props[entry])\r\n throw new Error(`missing required property of ${name}: \"${entry}\"`);\r\n }\r\n }\r\n if (props) {\r\n for (const key of Object.keys(props))\r\n try {\r\n this.verifyPropertyDef(key, props[key]);\r\n } catch (e: any) {\r\n throw new Error(`property ${key} of ${name}: ${e.message}`);\r\n }\r\n }\r\n return;\r\n\r\n case \"array\":\r\n if (typeof property.extends === \"string\")\r\n return;\r\n if (typeof property.items !== \"object\")\r\n throw new Error(`array property ${name} has no items member`);\r\n try {\r\n this.verifyPropertyDef(\"items\", property.items);\r\n } catch (e: any) {\r\n throw new Error(`array property ${name}: ${e.message}`);\r\n }\r\n return;\r\n\r\n default:\r\n throw new Error(`property ${name} has illegal type \"${String(property.type)}\"`);\r\n }\r\n }\r\n\r\n private validateAndAdd(group: SettingGroupSchema) {\r\n const settingDefs = group.settingDefs;\r\n if (undefined !== settingDefs) {\r\n for (const key of Object.keys(settingDefs)) {\r\n this.validateName(key);\r\n this.verifyPropertyDef(key, settingDefs[key]);\r\n const property: Mutable<SettingSchema> | undefined = settingDefs[key];\r\n assert(undefined !== property);\r\n property.default = property.default ?? this.getDefaultValue(property.type);\r\n this.settingDefs.set(makeSettingKey(group.schemaPrefix, key), property);\r\n }\r\n }\r\n const typeDefs = group.typeDefs ?? {};\r\n for (const key of Object.keys(typeDefs)) {\r\n this.validateName(key);\r\n this.verifyPropertyDef(key, typeDefs[key]);\r\n const typeDef = typeDefs[key];\r\n assert(undefined !== typeDef);\r\n this.typeDefs.set(makeSettingKey(group.schemaPrefix, key), typeDef);\r\n }\r\n }\r\n\r\n private getDefaultValue(type: JSONSchemaTypeName | JSONSchemaTypeName[]): JSONSchemaType | undefined {\r\n type = Array.isArray(type) ? type[0] : type;\r\n switch (type) {\r\n case \"boolean\":\r\n return false;\r\n case \"integer\":\r\n case \"number\":\r\n return 0;\r\n case \"string\":\r\n return \"\";\r\n case \"array\":\r\n return [];\r\n case \"object\":\r\n return {};\r\n default:\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nexport function constructSettingsSchemas(): SettingsSchemas {\r\n return new SettingsSchemasImpl();\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SettingsSchemasImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsSchemasImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport * as fs from \"fs-extra\";\nimport { parse } from \"json5\";\nimport { extname, join } from \"path\";\nimport { assert, BeEvent, JSONSchemaType, JSONSchemaTypeName, Mutable } from \"@itwin/core-bentley\";\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { SettingGroupSchema, SettingSchema, SettingsSchemas } from \"../../workspace/SettingsSchemas\";\nimport { _implementationProhibited } from \"../Symbols\";\n\nconst makeSettingKey = (prefix: string, key: string) => `${prefix}/${key}`;\n\nclass SettingsSchemasImpl implements SettingsSchemas {\n public readonly [_implementationProhibited] = undefined;\n private readonly _allGroups = new Map<string, SettingGroupSchema>();\n /** a map of all registered Setting Definitions */\n public readonly settingDefs = new Map<string, SettingSchema>();\n /** a map of all registered TypeDefs */\n public readonly typeDefs = new Map<string, SettingSchema>();\n /** event that signals that the values in [[allSchemas]] have changed in some way. */\n public readonly onSchemaChanged = new BeEvent<() => void>();\n\n private verifyType<T>(val: T, expectedType: JSONSchemaTypeName, path: string) {\n if (expectedType === \"integer\") {\n if (Number.isInteger(val))\n return;\n } else if (expectedType === \"null\") {\n if (val === null || val === undefined)\n return;\n } else if (typeof val === expectedType)\n return;\n\n throw new Error(`value for ${path}: \"${String(val)}\" is wrong type, expected ${expectedType}`);\n }\n\n public validateSetting<T>(value: T, settingName: string): T {\n const settingDef = this.settingDefs.get(settingName);\n if (undefined !== settingDef) // if there's no setting definition, there's no rules so just return ok\n this.validateProperty(value, settingDef, settingName);\n return value;\n }\n\n /** @internal */\n public getObjectProperties(propDef: Readonly<SettingSchema>, scope: string): { required?: string[], properties: { [name: string]: SettingSchema } } {\n let required = propDef.required;\n let properties = propDef.properties;\n\n // if this object extends a typeDef, add typeDef's properties and required values, recursively\n if (propDef.extends !== undefined) {\n const typeDef = this.typeDefs.get(propDef.extends);\n if (undefined === typeDef)\n throw new Error(`typeDef ${propDef.extends} does not exist for ${scope}`);\n const expanded = this.getObjectProperties(typeDef, `${scope}.${propDef.extends}`);\n if (expanded.required)\n required = required ? [...required, ...expanded.required] : expanded.required;\n if (expanded.properties) {\n properties = properties ? { ...expanded.properties, ...properties } : expanded.properties;\n }\n }\n properties = properties ?? {};\n return { required, properties };\n }\n\n /** @internal */\n public getArrayItems(propDef: Readonly<SettingSchema>, scope: string): SettingSchema {\n let items = propDef.items;\n if (undefined === items && propDef.extends) {\n const typeDef = this.typeDefs.get(propDef.extends);\n if (undefined === typeDef)\n throw new Error(`typeDef ${propDef.extends} does not exist for ${scope}`);\n items = typeDef.items;\n }\n if (undefined === items)\n throw new Error(`array ${scope} has no items definition`);\n return items;\n }\n\n private validateProperty<T>(val: T, propDef: Readonly<SettingSchema>, path: string) {\n switch (propDef.type) {\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"integer\":\n case \"null\":\n return this.verifyType(val, propDef.type, path);\n\n case \"array\":\n if (!Array.isArray(val))\n throw new Error(`Property ${path} must be an array`);\n const items = this.getArrayItems(propDef, path);\n for (let i = 0; i < val.length; ++i)\n this.validateProperty(val[i], items, `${path}[${i}]`);\n return;\n }\n if (!val || typeof val !== \"object\")\n throw new Error(`${path} must be an object`);\n\n const { required, properties } = this.getObjectProperties(propDef, path);\n\n // first ensure all required properties are present\n if (undefined !== required) {\n for (const entry of required) {\n const value = (val as any)[entry];\n if (undefined === value)\n throw new Error(`required value for \"${entry}\" is missing in \"${path}\"`);\n }\n }\n\n // you can supply default values in typeDefs. See if any members are undefined that have a default.\n if (undefined !== properties) {\n for (const [key, prop] of Object.entries(properties)) {\n if ((val as any)[key] === undefined && prop.default)\n (val as any)[key] = prop.default;\n }\n }\n\n // then validate all values in the supplied object are valid\n for (const key of Object.keys(val)) {\n const prop = properties[key];\n if (prop !== undefined) { // note: extra values are ignored.\n this.validateProperty((val as any)[key], prop, `${path}.${key}`);\n }\n }\n }\n\n /**\n * Add one or more [[SettingSchemaGroup]]s. `SettingSchemaGroup`s must include a `schemaPrefix` member that is used\n * to identify the group. If a group with the same name is already registered, the old values are first removed and then the new group is added.\n */\n public addGroup(settingsGroup: SettingGroupSchema | SettingGroupSchema[]): void {\n if (!Array.isArray(settingsGroup))\n settingsGroup = [settingsGroup];\n\n this.doAdd(settingsGroup);\n this.onSchemaChanged.raiseEvent();\n }\n\n /** Add a [[SettingSchemaGroup]] from stringified json5. */\n public addJson(settingSchema: string): void {\n this.addGroup(parse(settingSchema));\n }\n\n /** Add a [[SettingSchemaGroup]] from a json5 file. */\n public addFile(fileName: LocalFileName): void {\n try {\n this.addJson(fs.readFileSync(fileName, \"utf-8\"));\n } catch (e: any) {\n throw new Error(`parsing SettingSchema file \"${fileName}\": ${e.message}\"`);\n }\n }\n\n /** Add all files with a either \".json\" or \".json5\" extension from a supplied directory. */\n public addDirectory(dirName: LocalDirName) {\n for (const fileName of IModelJsFs.readdirSync(dirName)) {\n const ext = extname(fileName);\n if (ext === \".json5\" || ext === \".json\")\n this.addFile(join(dirName, fileName));\n }\n }\n\n /** Remove a previously added [[SettingSchemaGroup]] by schemaPrefix */\n public removeGroup(schemaPrefix: string): void {\n this.doRemove(schemaPrefix);\n this.onSchemaChanged.raiseEvent();\n }\n\n private doAdd(settingsGroup: SettingGroupSchema[]) {\n settingsGroup.forEach((group) => {\n if (undefined === group.schemaPrefix)\n throw new Error(`settings group has no \"schemaPrefix\" member`);\n\n this.doRemove(group.schemaPrefix);\n this.validateAndAdd(group);\n this._allGroups.set(group.schemaPrefix, group);\n });\n }\n\n private doRemove(schemaPrefix: string) {\n const group = this._allGroups.get(schemaPrefix);\n if (undefined !== group?.settingDefs) {\n for (const key of Object.keys(group.settingDefs))\n this.settingDefs.delete(makeSettingKey(schemaPrefix, key));\n }\n if (undefined !== group?.typeDefs) {\n for (const key of Object.keys(group.typeDefs))\n this.settingDefs.delete(makeSettingKey(schemaPrefix, key));\n }\n this._allGroups.delete(schemaPrefix);\n }\n\n private validateName(name: string) {\n if (!name.trim())\n throw new Error(`empty property name`);\n }\n\n private verifyPropertyDef(name: string, property: SettingSchema | undefined) {\n if (!property)\n throw new Error(`missing required property ${name}`);\n\n if (!property.type)\n throw new Error(`property ${name} has no type`);\n\n switch (property.type) {\n case \"boolean\":\n case \"integer\":\n case \"null\":\n case \"number\":\n case \"string\":\n return;\n\n case \"object\":\n const required = property.required;\n const props = property.properties;\n if (required && props) {\n for (const entry of required) {\n if (undefined === props[entry])\n throw new Error(`missing required property of ${name}: \"${entry}\"`);\n }\n }\n if (props) {\n for (const key of Object.keys(props))\n try {\n this.verifyPropertyDef(key, props[key]);\n } catch (e: any) {\n throw new Error(`property ${key} of ${name}: ${e.message}`);\n }\n }\n return;\n\n case \"array\":\n if (typeof property.extends === \"string\")\n return;\n if (typeof property.items !== \"object\")\n throw new Error(`array property ${name} has no items member`);\n try {\n this.verifyPropertyDef(\"items\", property.items);\n } catch (e: any) {\n throw new Error(`array property ${name}: ${e.message}`);\n }\n return;\n\n default:\n throw new Error(`property ${name} has illegal type \"${String(property.type)}\"`);\n }\n }\n\n private validateAndAdd(group: SettingGroupSchema) {\n const settingDefs = group.settingDefs;\n if (undefined !== settingDefs) {\n for (const key of Object.keys(settingDefs)) {\n this.validateName(key);\n this.verifyPropertyDef(key, settingDefs[key]);\n const property: Mutable<SettingSchema> | undefined = settingDefs[key];\n assert(undefined !== property);\n property.default = property.default ?? this.getDefaultValue(property.type);\n this.settingDefs.set(makeSettingKey(group.schemaPrefix, key), property);\n }\n }\n const typeDefs = group.typeDefs ?? {};\n for (const key of Object.keys(typeDefs)) {\n this.validateName(key);\n this.verifyPropertyDef(key, typeDefs[key]);\n const typeDef = typeDefs[key];\n assert(undefined !== typeDef);\n this.typeDefs.set(makeSettingKey(group.schemaPrefix, key), typeDef);\n }\n }\n\n private getDefaultValue(type: JSONSchemaTypeName | JSONSchemaTypeName[]): JSONSchemaType | undefined {\n type = Array.isArray(type) ? type[0] : type;\n switch (type) {\n case \"boolean\":\n return false;\n case \"integer\":\n case \"number\":\n return 0;\n case \"string\":\n return \"\";\n case \"array\":\n return [];\n case \"object\":\n return {};\n default:\n return undefined;\n }\n }\n}\n\nexport function constructSettingsSchemas(): SettingsSchemas {\n return new SettingsSchemasImpl();\n}\n"]}
|