@itwin/core-backend 5.1.0-dev.4 → 5.1.0-dev.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +109 -1
- package/lib/cjs/BackendHubAccess.d.ts +1 -1
- package/lib/cjs/BackendHubAccess.js +1 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BriefcaseManager.d.ts +10 -2
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +12 -0
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/Category.d.ts +4 -4
- package/lib/cjs/Category.js +4 -4
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts +67 -8
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -33
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ClassRegistry.d.ts +1 -1
- package/lib/cjs/ClassRegistry.js +1 -1
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +1 -1
- package/lib/cjs/CodeSpecs.js +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +4 -4
- package/lib/cjs/DisplayStyle.js +3 -3
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +4 -4
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +4 -4
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts +15 -6
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +18 -4
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.d.ts +51 -51
- package/lib/cjs/Element.js +51 -51
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +8 -8
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +8 -8
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/Entity.d.ts +3 -3
- package/lib/cjs/Entity.js +2 -2
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/ExportGraphics.d.ts +54 -8
- package/lib/cjs/ExportGraphics.d.ts.map +1 -1
- package/lib/cjs/ExportGraphics.js +158 -59
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.d.ts +6 -2
- package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
- package/lib/cjs/GeographicCRSServices.js +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +23 -21
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +57 -31
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +2 -2
- package/lib/cjs/IModelHost.js +2 -2
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/Material.d.ts +1 -1
- package/lib/cjs/Material.js +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +22 -22
- package/lib/cjs/Model.js +22 -22
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/SQLiteDb.d.ts +1 -1
- package/lib/cjs/SQLiteDb.js +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/SqliteStatement.d.ts +1 -1
- package/lib/cjs/SqliteStatement.d.ts.map +1 -1
- package/lib/cjs/SqliteStatement.js +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/Texture.d.ts +1 -1
- package/lib/cjs/Texture.js +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +4 -4
- package/lib/cjs/TxnManager.js +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +40 -14
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +42 -14
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.d.ts +52 -0
- package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -0
- package/lib/cjs/annotations/FrameGeometry.js +250 -0
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -0
- package/lib/cjs/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -0
- package/lib/cjs/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +20 -26
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +31 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.js +83 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -0
- package/lib/cjs/annotations/TextBlockGeometry.d.ts +16 -0
- package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -0
- package/lib/cjs/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +11 -68
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -0
- package/lib/cjs/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +19 -7
- package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -0
- package/lib/cjs/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +19 -7
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -0
- package/lib/cjs/core-backend.d.ts +5 -3
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +25 -6
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/BackendHubAccess.d.ts +1 -1
- package/lib/esm/BackendHubAccess.js +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BisCoreSchema.js +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +10 -2
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +12 -0
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/Category.d.ts +4 -4
- package/lib/esm/Category.js +4 -4
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts +67 -8
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -33
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ClassRegistry.d.ts +1 -1
- package/lib/esm/ClassRegistry.js +1 -1
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +1 -1
- package/lib/esm/CodeSpecs.js +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +4 -4
- package/lib/esm/DisplayStyle.js +3 -3
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.d.ts +4 -4
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +4 -4
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts +15 -6
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +18 -4
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.d.ts +51 -51
- package/lib/esm/Element.js +51 -51
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +8 -8
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +8 -8
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/Entity.d.ts +3 -3
- package/lib/esm/Entity.js +2 -2
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/ExportGraphics.d.ts +54 -8
- package/lib/esm/ExportGraphics.d.ts.map +1 -1
- package/lib/esm/ExportGraphics.js +156 -58
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/GeographicCRSServices.d.ts +6 -2
- package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
- package/lib/esm/GeographicCRSServices.js +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +23 -21
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +58 -32
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/esm/IModelElementCloneContext.js +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +2 -2
- package/lib/esm/IModelHost.js +2 -2
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/Material.d.ts +1 -1
- package/lib/esm/Material.js +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +22 -22
- package/lib/esm/Model.js +22 -22
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/SQLiteDb.d.ts +1 -1
- package/lib/esm/SQLiteDb.js +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/SqliteStatement.d.ts +1 -1
- package/lib/esm/SqliteStatement.d.ts.map +1 -1
- package/lib/esm/SqliteStatement.js +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/Texture.d.ts +1 -1
- package/lib/esm/Texture.js +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +4 -4
- package/lib/esm/TxnManager.js +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +40 -14
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +42 -14
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.d.ts +52 -0
- package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -0
- package/lib/esm/annotations/FrameGeometry.js +245 -0
- package/lib/esm/annotations/FrameGeometry.js.map +1 -0
- package/lib/esm/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -0
- package/lib/esm/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +22 -28
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -0
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts +31 -0
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -0
- package/lib/esm/annotations/TextAnnotationGeometry.js +80 -0
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -0
- package/lib/esm/annotations/TextBlockGeometry.d.ts +16 -0
- package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -0
- package/lib/esm/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +11 -68
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -0
- package/lib/esm/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +19 -7
- package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -0
- package/lib/esm/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +19 -7
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -0
- package/lib/esm/core-backend.d.ts +5 -3
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +25 -3
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/TestUtils.d.ts +1 -1
- package/lib/esm/test/TestUtils.d.ts.map +1 -1
- package/lib/esm/test/TestUtils.js +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +190 -1025
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.d.ts +2 -0
- package/lib/esm/test/annotations/TextBlock.test.d.ts.map +1 -0
- package/lib/esm/test/annotations/TextBlock.test.js +969 -0
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -0
- package/lib/esm/test/ecdb/ECDb.test.js +29 -8
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +192 -0
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +228 -5
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js +23 -9
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +451 -136
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +53 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js +49 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.d.ts +2 -0
- package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
- package/lib/esm/test/standalone/SnapshotDb.test.js +19 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/package.json +13 -13
- package/lib/cjs/TextAnnotationElement.d.ts.map +0 -1
- package/lib/cjs/TextAnnotationElement.js.map +0 -1
- package/lib/cjs/TextAnnotationGeometry.d.ts +0 -32
- package/lib/cjs/TextAnnotationGeometry.d.ts.map +0 -1
- package/lib/cjs/TextAnnotationGeometry.js.map +0 -1
- package/lib/cjs/TextAnnotationLayout.d.ts.map +0 -1
- package/lib/cjs/TextAnnotationLayout.js.map +0 -1
- package/lib/esm/TextAnnotationElement.d.ts.map +0 -1
- package/lib/esm/TextAnnotationElement.js.map +0 -1
- package/lib/esm/TextAnnotationGeometry.d.ts +0 -32
- package/lib/esm/TextAnnotationGeometry.d.ts.map +0 -1
- package/lib/esm/TextAnnotationGeometry.js.map +0 -1
- package/lib/esm/TextAnnotationLayout.d.ts.map +0 -1
- package/lib/esm/TextAnnotationLayout.js.map +0 -1
|
@@ -62,7 +62,7 @@ import { DbResult, Guid, Id64, IModelStatus, Logger, OpenMode, ProcessDetector }
|
|
|
62
62
|
import { BisCodeSpec, BriefcaseIdValue, Code, CodeScopeSpec, CodeSpec, ColorByName, ColorDef, DisplayStyleSettings, EcefLocation, FontMap, FontType, GeoCoordStatus, GeographicCRS, GeometryParams, GeometryStreamBuilder, ImageSourceFormat, IModel, IModelError, RelatedElement, RenderMode, SchemaState, SubCategoryAppearance, TextureMapping, TextureMapUnits, ViewFlags, } from "@itwin/core-common";
|
|
63
63
|
import { Geometry, LineString3d, Loop, Matrix4d, Point3d, PolyfaceBuilder, Range3d, StrokeOptions, Transform, YawPitchRollAngles, } from "@itwin/core-geometry";
|
|
64
64
|
import { V2CheckpointManager } from "../../CheckpointManager";
|
|
65
|
-
import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
|
|
65
|
+
import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GenericGraphicalType2d, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
|
|
66
66
|
import { BriefcaseDb } from "../../IModelDb";
|
|
67
67
|
import { HubMock } from "../../internal/HubMock";
|
|
68
68
|
import { KnownTestLocations } from "../KnownTestLocations";
|
|
@@ -1301,12 +1301,15 @@ describe("iModel", () => {
|
|
|
1301
1301
|
// Delete the model
|
|
1302
1302
|
testImodel.models.deleteModel(newModelId);
|
|
1303
1303
|
// Test insertModel error handling
|
|
1304
|
-
|
|
1304
|
+
try {
|
|
1305
1305
|
testImodel.models.insertModel({
|
|
1306
1306
|
classFullName: DefinitionModel.classFullName,
|
|
1307
1307
|
modeledElement: { id: "0x10000000bad" },
|
|
1308
1308
|
});
|
|
1309
|
-
}
|
|
1309
|
+
}
|
|
1310
|
+
catch (error) {
|
|
1311
|
+
assert.isTrue(error instanceof IModelError || error.iTwinErrorId !== undefined);
|
|
1312
|
+
}
|
|
1310
1313
|
});
|
|
1311
1314
|
it("should create model with custom relationship to modeled element", async () => {
|
|
1312
1315
|
const testImodel = imodel1;
|
|
@@ -2086,10 +2089,41 @@ describe("iModel", () => {
|
|
|
2086
2089
|
db.abandonChanges();
|
|
2087
2090
|
db.close();
|
|
2088
2091
|
});
|
|
2092
|
+
it("Cache cleared on abandonChanges", () => {
|
|
2093
|
+
const standaloneFile = IModelTestUtils.prepareOutputFile("IModel", "StandaloneReadWrite.bim");
|
|
2094
|
+
const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: "Standalone" } });
|
|
2095
|
+
db.saveChanges();
|
|
2096
|
+
const code = Code.createEmpty();
|
|
2097
|
+
code.value = "foo";
|
|
2098
|
+
const props = {
|
|
2099
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2100
|
+
model: IModel.dictionaryId,
|
|
2101
|
+
code,
|
|
2102
|
+
};
|
|
2103
|
+
const id = db.elements.insertElement(props);
|
|
2104
|
+
const element1 = db.elements.getElementProps(id);
|
|
2105
|
+
db.abandonChanges();
|
|
2106
|
+
code.value = "bar";
|
|
2107
|
+
const props2 = {
|
|
2108
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2109
|
+
model: IModel.dictionaryId,
|
|
2110
|
+
code,
|
|
2111
|
+
};
|
|
2112
|
+
const id2 = db.elements.insertElement(props2);
|
|
2113
|
+
expect(id2).to.equal(id);
|
|
2114
|
+
const element2 = db.elements.getElementProps(id2);
|
|
2115
|
+
expect(element2).to.not.equal(element1);
|
|
2116
|
+
db.abandonChanges();
|
|
2117
|
+
db.close();
|
|
2118
|
+
});
|
|
2089
2119
|
it("Standalone iModel properties", () => {
|
|
2090
2120
|
const standaloneRootSubjectName = "Standalone";
|
|
2091
2121
|
const standaloneFile1 = IModelTestUtils.prepareOutputFile("IModel", "Standalone1.bim");
|
|
2092
|
-
|
|
2122
|
+
const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });
|
|
2123
|
+
const geographicCoordinateSystem = {
|
|
2124
|
+
horizontalCRS: { id: "10TM115-27" },
|
|
2125
|
+
};
|
|
2126
|
+
let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName }, ecefLocation, geographicCoordinateSystem });
|
|
2093
2127
|
assert.isTrue(standaloneDb1.isStandaloneDb());
|
|
2094
2128
|
assert.isTrue(standaloneDb1.isStandalone);
|
|
2095
2129
|
assert.isFalse(standaloneDb1.isReadonly, "Expect standalone iModels to be read-write during create");
|
|
@@ -2102,6 +2136,8 @@ describe("iModel", () => {
|
|
|
2102
2136
|
assert.equal(standaloneDb1.iTwinId, Guid.empty);
|
|
2103
2137
|
assert.strictEqual("", standaloneDb1.changeset.id);
|
|
2104
2138
|
assert.strictEqual(0, standaloneDb1.changeset.index);
|
|
2139
|
+
assert.deepEqual(standaloneDb1.ecefLocation?.origin, ecefLocation.origin, "standalone ecefLocation should be set");
|
|
2140
|
+
assert.strictEqual(standaloneDb1.geographicCoordinateSystem?.horizontalCRS?.id, "10TM115-27", "standalone coordinate system should be set");
|
|
2105
2141
|
assert.equal(standaloneDb1.openMode, OpenMode.ReadWrite);
|
|
2106
2142
|
standaloneDb1.close();
|
|
2107
2143
|
assert.isFalse(standaloneDb1.isOpen);
|
|
@@ -2119,7 +2155,11 @@ describe("iModel", () => {
|
|
|
2119
2155
|
const snapshotFile2 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot2.bim");
|
|
2120
2156
|
const snapshotFile3 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot3.bim");
|
|
2121
2157
|
const imodel = await generateTestSnapshot("test_for_snapshot.bim", "test.bim");
|
|
2122
|
-
|
|
2158
|
+
const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });
|
|
2159
|
+
const geographicCoordinateSystem = {
|
|
2160
|
+
horizontalCRS: { id: "10TM115-27" },
|
|
2161
|
+
};
|
|
2162
|
+
let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true, ecefLocation, geographicCoordinateSystem });
|
|
2123
2163
|
let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);
|
|
2124
2164
|
let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });
|
|
2125
2165
|
assert.isTrue(snapshotDb1.isSnapshotDb());
|
|
@@ -2156,6 +2196,8 @@ describe("iModel", () => {
|
|
|
2156
2196
|
assert.isTrue(snapshotDb1.isOpen);
|
|
2157
2197
|
assert.isTrue(snapshotDb2.isOpen);
|
|
2158
2198
|
assert.isTrue(snapshotDb3.isOpen);
|
|
2199
|
+
assert.deepEqual(snapshotDb1.ecefLocation?.origin, ecefLocation.origin, "snapshot ecefLocation should be set");
|
|
2200
|
+
assert.strictEqual(snapshotDb1.geographicCoordinateSystem?.horizontalCRS?.id, "10TM115-27", "snapshot coordinate system should be set");
|
|
2159
2201
|
snapshotDb1.close();
|
|
2160
2202
|
snapshotDb2.close();
|
|
2161
2203
|
snapshotDb3.close();
|
|
@@ -2587,6 +2629,32 @@ describe("iModel", () => {
|
|
|
2587
2629
|
expect(categ3.code.value).to.equal(code3.trimmedCodeVal);
|
|
2588
2630
|
imodel.close();
|
|
2589
2631
|
});
|
|
2632
|
+
it("should throw iTwinErrors on element CRUD opertion fails", async () => {
|
|
2633
|
+
const code = Code.createEmpty();
|
|
2634
|
+
code.value = "foo";
|
|
2635
|
+
const props = {
|
|
2636
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2637
|
+
model: IModel.dictionaryId,
|
|
2638
|
+
code,
|
|
2639
|
+
};
|
|
2640
|
+
imodel1.elements.insertElement(props);
|
|
2641
|
+
expect(() => imodel1.elements.insertElement(props)).throws("Error inserting element [duplicate code]").to.have.property("iTwinErrorId");
|
|
2642
|
+
const updateProps = {
|
|
2643
|
+
id: Id64.fromString("0x111111"),
|
|
2644
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2645
|
+
model: IModel.dictionaryId,
|
|
2646
|
+
code,
|
|
2647
|
+
};
|
|
2648
|
+
expect(() => imodel1.elements.updateElement(updateProps)).throws(`Error updating element [missing id], id: ${updateProps.id}`).to.have.property("iTwinErrorId");
|
|
2649
|
+
expect(() => imodel1.elements.deleteElement(updateProps.id)).throws(`Error deleting element [missing id], id: ${updateProps.id}`).to.have.property("iTwinErrorId");
|
|
2650
|
+
expect(() => imodel1.models.insertModel({ classFullName: DefinitionModel.classFullName, modeledElement: { id: "0x10000000bad" } })).throws("Error inserting model [error=10004], class=BisCore:DefinitionModel").to.have.property("iTwinErrorId");
|
|
2651
|
+
expect(() => imodel1.models.updateModel({
|
|
2652
|
+
id: Id64.fromString("0x111111"),
|
|
2653
|
+
modeledElement: { id: Id64.fromString("0x111111") },
|
|
2654
|
+
classFullName: ""
|
|
2655
|
+
})).throws(`Error updating model [missing id], id: ${Id64.fromString("0x111111")}`).to.have.property("iTwinErrorId");
|
|
2656
|
+
expect(() => imodel1.models.deleteModel(Id64.fromString("0x111111"))).throws(`Error deleting model [missing id], id: ${Id64.fromString("0x111111")}`).to.have.property("iTwinErrorId");
|
|
2657
|
+
});
|
|
2590
2658
|
it("throws NotFound when attempting to access element props after closing the iModel", () => {
|
|
2591
2659
|
const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "accessAfterClose.bim");
|
|
2592
2660
|
const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "accessAfterClose" } });
|
|
@@ -2622,5 +2690,160 @@ describe("iModel", () => {
|
|
|
2622
2690
|
expect(() => imodel.relationships.insertInstance(props)).to.throw(`Failed to insert relationship [${imodelPath}]: rc=2067, constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)`);
|
|
2623
2691
|
imodel.close();
|
|
2624
2692
|
});
|
|
2693
|
+
function createElemProps(_imodel, modId, catId, className) {
|
|
2694
|
+
// Create props
|
|
2695
|
+
const elementProps = {
|
|
2696
|
+
classFullName: className,
|
|
2697
|
+
model: modId,
|
|
2698
|
+
category: catId,
|
|
2699
|
+
code: Code.createEmpty(),
|
|
2700
|
+
};
|
|
2701
|
+
return elementProps;
|
|
2702
|
+
}
|
|
2703
|
+
function insertElement(imodel, mId, cId, cName, propName) {
|
|
2704
|
+
const elementProps = createElemProps(imodel, mId, cId, cName);
|
|
2705
|
+
const geomElement = imodel.elements.createElement(elementProps);
|
|
2706
|
+
geomElement.name = propName; // Add a custom property to the element
|
|
2707
|
+
const id = imodel.elements.insertElement(geomElement.toJSON());
|
|
2708
|
+
assert.isTrue(Id64.isValidId64(id), "insert failed");
|
|
2709
|
+
return id;
|
|
2710
|
+
}
|
|
2711
|
+
function validateADrivesBRowCount(imodel, expectedRows) {
|
|
2712
|
+
const reader = IModelTestUtils.executeQuery(imodel, `select * from trs.ADrivesB`);
|
|
2713
|
+
assert.strictEqual(reader.length, expectedRows, `Expected ${expectedRows} rows in trs.ADrivesB table`);
|
|
2714
|
+
}
|
|
2715
|
+
function validateNavProp(imodel, expectedNavPropValue) {
|
|
2716
|
+
const reader = IModelTestUtils.executeQuery(imodel, `select NavPropChildB from trs.ChildA`);
|
|
2717
|
+
assert.strictEqual(reader.length, 1);
|
|
2718
|
+
assert.deepEqual(reader[0].navPropChildB, expectedNavPropValue, `Expected NavPropChildB to be "${expectedNavPropValue}"`);
|
|
2719
|
+
}
|
|
2720
|
+
it("Validate invalid relationship classes being inserted/updated", async () => {
|
|
2721
|
+
const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "invalidRelationshipClass.bim");
|
|
2722
|
+
if (IModelJsFs.existsSync(imodelPath))
|
|
2723
|
+
IModelJsFs.unlinkSync(imodelPath);
|
|
2724
|
+
const testImodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "invalidRelationshipClass" } });
|
|
2725
|
+
await testImodel.importSchemaStrings([
|
|
2726
|
+
`<?xml version="1.0" encoding="UTF-8"?>
|
|
2727
|
+
<ECSchema schemaName="TestRelationSchema" alias="trs" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
2728
|
+
<ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
|
|
2729
|
+
<ECEntityClass typeName="TestElement">
|
|
2730
|
+
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
2731
|
+
<ECProperty propertyName="Name" typeName="string" />
|
|
2732
|
+
</ECEntityClass>
|
|
2733
|
+
|
|
2734
|
+
<ECEntityClass typeName="ChildA" >
|
|
2735
|
+
<BaseClass>TestElement</BaseClass>
|
|
2736
|
+
<ECNavigationProperty propertyName="NavPropChildB" relationshipName="ADrivesB" direction="Forward" readOnly="True">
|
|
2737
|
+
</ECNavigationProperty>
|
|
2738
|
+
</ECEntityClass>
|
|
2739
|
+
|
|
2740
|
+
<ECEntityClass typeName="ChildB" >
|
|
2741
|
+
<BaseClass>TestElement</BaseClass>
|
|
2742
|
+
</ECEntityClass>
|
|
2743
|
+
|
|
2744
|
+
<ECRelationshipClass typeName="ADrivesB" strengthDirection="Backward" strength="referencing" modifier="Sealed">
|
|
2745
|
+
<Source multiplicity="(0..*)" polymorphic="true" roleLabel="drives">
|
|
2746
|
+
<Class class="ChildA"/>
|
|
2747
|
+
</Source>
|
|
2748
|
+
<Target multiplicity="(0..1)" polymorphic="true" roleLabel="is driven by">
|
|
2749
|
+
<Class class="ChildB"/>
|
|
2750
|
+
</Target>
|
|
2751
|
+
</ECRelationshipClass>
|
|
2752
|
+
|
|
2753
|
+
<ECEntityClass typeName="ChildC">
|
|
2754
|
+
<BaseClass>TestElement</BaseClass>
|
|
2755
|
+
</ECEntityClass>
|
|
2756
|
+
|
|
2757
|
+
<ECEntityClass typeName="ChildD">
|
|
2758
|
+
<BaseClass>TestElement</BaseClass>
|
|
2759
|
+
</ECEntityClass>
|
|
2760
|
+
|
|
2761
|
+
<ECRelationshipClass typeName="CIsRelatedToD" strength="referencing" modifier="Sealed">
|
|
2762
|
+
<BaseClass>bis:ElementRefersToElements</BaseClass>
|
|
2763
|
+
<Source multiplicity="(0..*)" roleLabel="IsRelatedTo" polymorphic="true">
|
|
2764
|
+
<Class class="ChildC"/>
|
|
2765
|
+
</Source>
|
|
2766
|
+
<Target multiplicity="(0..*)" roleLabel="IsRelatedTo (Reversed)" polymorphic="true">
|
|
2767
|
+
<Class class="ChildD"/>
|
|
2768
|
+
</Target>
|
|
2769
|
+
</ECRelationshipClass>
|
|
2770
|
+
</ECSchema>`
|
|
2771
|
+
]);
|
|
2772
|
+
// Enable ECSQL write validation and verify it's set
|
|
2773
|
+
const pragmaRows = IModelTestUtils.executeQuery(testImodel, `PRAGMA validate_ecsql_writes=true`);
|
|
2774
|
+
assert.exists(pragmaRows);
|
|
2775
|
+
assert.strictEqual(pragmaRows[0].validate_ecsql_writes, true);
|
|
2776
|
+
// Ensure ADrivesB table is empty before test
|
|
2777
|
+
validateADrivesBRowCount(testImodel, 0);
|
|
2778
|
+
// Create a physical model and spatial category if needed
|
|
2779
|
+
const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(testImodel, Code.createEmpty(), true);
|
|
2780
|
+
let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, "MySpatialCategory");
|
|
2781
|
+
if (!spatialCategoryId) {
|
|
2782
|
+
spatialCategoryId = SpatialCategory.insert(testImodel, IModel.dictionaryId, "MySpatialCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
|
|
2783
|
+
}
|
|
2784
|
+
// Insert a ChildB element to be referenced by ChildA
|
|
2785
|
+
const idB = insertElement(testImodel, newModelId, spatialCategoryId, "TestRelationSchema:ChildB", "ChildBElement");
|
|
2786
|
+
assert.isTrue(Id64.isValidId64(idB), "Insert ChildBElement failed");
|
|
2787
|
+
testImodel.saveChanges();
|
|
2788
|
+
// Prepare base props for ChildA
|
|
2789
|
+
const elementProps = createElemProps(testImodel, newModelId, spatialCategoryId, "TestRelationSchema:ChildA");
|
|
2790
|
+
// Test various relationship class names for navigation property
|
|
2791
|
+
const testCases = [
|
|
2792
|
+
{ name: "trs:ADrivesB", shouldSucceed: true, expectedRows: 1 },
|
|
2793
|
+
{ name: "trs.FakeClass", shouldSucceed: true, expectedRows: 0 },
|
|
2794
|
+
{ name: "trs:ChildA", shouldSucceed: false, expectedRows: 0 },
|
|
2795
|
+
{ name: "trs:ChildB", shouldSucceed: false, expectedRows: 0 },
|
|
2796
|
+
{ name: "trs:CIsRelatedToD", shouldSucceed: false, expectedRows: 0 },
|
|
2797
|
+
];
|
|
2798
|
+
for (const { name, shouldSucceed, expectedRows } of testCases) {
|
|
2799
|
+
const elemRef = new RelatedElement({ id: idB, relClassName: name });
|
|
2800
|
+
elementProps.navPropChildB = elemRef;
|
|
2801
|
+
elementProps.name = "ChildAElement";
|
|
2802
|
+
const geomElement = testImodel.elements.createElement(elementProps);
|
|
2803
|
+
let idA;
|
|
2804
|
+
try {
|
|
2805
|
+
idA = testImodel.elements.insertElement(geomElement.toJSON());
|
|
2806
|
+
if (shouldSucceed)
|
|
2807
|
+
assert.isTrue(Id64.isValidId64(idA), `Insert should have succeeded for ${name}.`);
|
|
2808
|
+
else
|
|
2809
|
+
assert.fail(`Insert should have failed for ${name}.`);
|
|
2810
|
+
}
|
|
2811
|
+
catch (err) {
|
|
2812
|
+
if (shouldSucceed)
|
|
2813
|
+
assert.fail(`Insert should have succeeded for ${name}. Error: ${err.message}`);
|
|
2814
|
+
// If should not succeed, error is expected
|
|
2815
|
+
}
|
|
2816
|
+
// Validate row count in ADrivesB table
|
|
2817
|
+
validateADrivesBRowCount(testImodel, expectedRows);
|
|
2818
|
+
// If insert succeeded, test update and delete scenarios
|
|
2819
|
+
if (expectedRows === 1 && idA !== undefined) {
|
|
2820
|
+
validateNavProp(testImodel, { id: idB, relClassName: "TestRelationSchema.ADrivesB" });
|
|
2821
|
+
const editElem = testImodel.elements.getElement(idA);
|
|
2822
|
+
editElem.navPropChildB = new RelatedElement({ id: idB, relClassName: "trs.FakeClass" });
|
|
2823
|
+
editElem.name = "ChildAElementUpdated";
|
|
2824
|
+
testImodel.elements.updateElement(editElem);
|
|
2825
|
+
validateADrivesBRowCount(testImodel, 1);
|
|
2826
|
+
validateNavProp(testImodel, { id: idB, relClassName: "TestRelationSchema.ADrivesB" });
|
|
2827
|
+
const editedElem = testImodel.elements.getElement(idA);
|
|
2828
|
+
assert.equal(editedElem.name, "ChildAElementUpdated", `Expected name to be "ChildAElementUpdated" after update, but got "${editedElem.name}"`);
|
|
2829
|
+
assert.strictEqual(editedElem.navPropChildB.relClassName, "TestRelationSchema.ADrivesB", `Expected navPropChildB to be "TestRelationSchema.ADrivesB" after update, but got "${editedElem.navPropChildB}"`);
|
|
2830
|
+
// Set the nav prop value to null
|
|
2831
|
+
editElem.name = "ChildAElementNulled";
|
|
2832
|
+
editElem.navPropChildB = null;
|
|
2833
|
+
testImodel.elements.updateElement(editElem);
|
|
2834
|
+
validateADrivesBRowCount(testImodel, 0);
|
|
2835
|
+
const nulledElem = testImodel.elements.getElement(idA);
|
|
2836
|
+
assert.equal(nulledElem.name, "ChildAElementNulled", `Expected name to be "ChildAElementNulled" after nulling, but got "${nulledElem.name}"`);
|
|
2837
|
+
assert.isUndefined(nulledElem.navPropChildB, `Expected navPropChildB to be undefined after nulling, but got "${nulledElem.navPropChildB}"`);
|
|
2838
|
+
if (shouldSucceed) {
|
|
2839
|
+
// Delete the element
|
|
2840
|
+
testImodel.elements.deleteElement(idA);
|
|
2841
|
+
assert.isUndefined(testImodel.elements.tryGetElement(idA), `Expected element with id ${idA} to be deleted, but it still exists.`);
|
|
2842
|
+
}
|
|
2843
|
+
}
|
|
2844
|
+
testImodel.abandonChanges();
|
|
2845
|
+
}
|
|
2846
|
+
testImodel.close();
|
|
2847
|
+
});
|
|
2625
2848
|
});
|
|
2626
2849
|
//# sourceMappingURL=IModel.test.js.map
|