@itwin/core-backend 5.1.0-dev.39 → 5.1.0-dev.40

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.
@@ -1045,5 +1045,162 @@ describe("Changeset Reader API", async () => {
1045
1045
  }
1046
1046
  rwIModel.close();
1047
1047
  });
1048
+ it("Delete class FK constraint violation in cache table", async () => {
1049
+ // Helper to check if TestClass exists in schema and cache table for both briefcases
1050
+ function checkClass(firstBriefcase, isClassInFirst, secondBriefcase, isClassInSecond) {
1051
+ const firstItems = firstBriefcase.getSchemaProps("TestSchema").items;
1052
+ assert.equal(isClassInFirst, !!firstItems?.TestClass);
1053
+ const secondItems = secondBriefcase.getSchemaProps("TestSchema").items;
1054
+ assert.equal(isClassInSecond, !!secondItems?.TestClass);
1055
+ const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = 'TestClass'`;
1056
+ const firstStmt = firstBriefcase.prepareSqliteStatement(sql);
1057
+ assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);
1058
+ firstStmt[Symbol.dispose]();
1059
+ const secondStmt = secondBriefcase.prepareSqliteStatement(sql);
1060
+ assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);
1061
+ secondStmt[Symbol.dispose]();
1062
+ }
1063
+ const adminToken = "super manager token";
1064
+ const iModelName = "test";
1065
+ const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject", accessToken: adminToken });
1066
+ assert.isNotEmpty(rwIModelId);
1067
+ // Open two briefcases for the same iModel
1068
+ const [firstBriefCase, secondBriefCase] = await Promise.all([
1069
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),
1070
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })
1071
+ ]);
1072
+ // Enable shared channel for both
1073
+ [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));
1074
+ await firstBriefCase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1075
+ <ECSchema schemaName="TestSchema" alias="ts" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1076
+ <ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
1077
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1078
+
1079
+ <ECCustomAttributes>
1080
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1081
+ </ECCustomAttributes>
1082
+
1083
+ <ECEntityClass typeName="TestClass">
1084
+ <BaseClass>bis:PhysicalElement</BaseClass>
1085
+ </ECEntityClass>
1086
+ </ECSchema>`]);
1087
+ firstBriefCase.saveChanges("import initial schema");
1088
+ // Push the changes to the hub
1089
+ await firstBriefCase.pushChanges({ description: "push initial schema changeset", accessToken: adminToken });
1090
+ // Sync the second briefcase with the iModel
1091
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1092
+ checkClass(firstBriefCase, true, secondBriefCase, true);
1093
+ // Import the schema
1094
+ await firstBriefCase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1095
+ <ECSchema schemaName="TestSchema" alias="ts" version="2.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1096
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1097
+
1098
+ <ECCustomAttributes>
1099
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1100
+ </ECCustomAttributes>
1101
+ </ECSchema>`]);
1102
+ firstBriefCase.saveChanges("imported schema");
1103
+ // Push the changeset to the hub
1104
+ await firstBriefCase.pushChanges({ description: "Delete class major change", accessToken: adminToken });
1105
+ checkClass(firstBriefCase, false, secondBriefCase, true);
1106
+ // Apply the latest changeset to a new briefcase
1107
+ try {
1108
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1109
+ }
1110
+ catch (error) {
1111
+ assert.fail(`Should not have failed with the error: ${error.message}`);
1112
+ }
1113
+ checkClass(firstBriefCase, false, secondBriefCase, false);
1114
+ // Cleanup
1115
+ await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);
1116
+ });
1117
+ it("Delete class FK constraint violation in cache table through a revert", async () => {
1118
+ // Helper to check if TestClass exists in schema and cache table for both briefcases
1119
+ function checkClass(className, firstBriefcase, isClassInFirst, secondBriefcase, isClassInSecond) {
1120
+ assert.equal(isClassInFirst, !!firstBriefcase.getSchemaProps("TestSchema").items?.[className]);
1121
+ assert.equal(isClassInSecond, !!secondBriefcase.getSchemaProps("TestSchema").items?.[className]);
1122
+ const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = '${className}'`;
1123
+ const firstStmt = firstBriefcase.prepareSqliteStatement(sql);
1124
+ assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);
1125
+ firstStmt[Symbol.dispose]();
1126
+ const secondStmt = secondBriefcase.prepareSqliteStatement(sql);
1127
+ assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);
1128
+ secondStmt[Symbol.dispose]();
1129
+ }
1130
+ const adminToken = "super manager token";
1131
+ const iModelName = "test";
1132
+ const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject", accessToken: adminToken });
1133
+ assert.isNotEmpty(rwIModelId);
1134
+ // Open two briefcases for the same iModel
1135
+ const [firstBriefCase, secondBriefCase] = await Promise.all([
1136
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),
1137
+ HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })
1138
+ ]);
1139
+ // Enable shared channel for both
1140
+ [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));
1141
+ await firstBriefCase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1142
+ <ECSchema schemaName="TestSchema" alias="ts" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1143
+ <ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
1144
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1145
+
1146
+ <ECCustomAttributes>
1147
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1148
+ </ECCustomAttributes>
1149
+
1150
+ <ECEntityClass typeName="TestClass">
1151
+ <BaseClass>bis:PhysicalElement</BaseClass>
1152
+ </ECEntityClass>
1153
+ </ECSchema>`]);
1154
+ firstBriefCase.saveChanges("import initial schema");
1155
+ // Push the changes to the hub
1156
+ await firstBriefCase.pushChanges({ description: "push initial schema changeset", accessToken: adminToken });
1157
+ // Sync the second briefcase
1158
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1159
+ checkClass("TestClass", firstBriefCase, true, secondBriefCase, true);
1160
+ // Import the schema
1161
+ await firstBriefCase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
1162
+ <ECSchema schemaName="TestSchema" alias="ts" version="1.0.1" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
1163
+ <ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
1164
+ <ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
1165
+
1166
+ <ECCustomAttributes>
1167
+ <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
1168
+ </ECCustomAttributes>
1169
+
1170
+ <ECEntityClass typeName="TestClass">
1171
+ <BaseClass>bis:PhysicalElement</BaseClass>
1172
+ </ECEntityClass>
1173
+
1174
+ <ECEntityClass typeName="AnotherTestClass">
1175
+ <BaseClass>bis:PhysicalElement</BaseClass>
1176
+ </ECEntityClass>
1177
+ </ECSchema>`]);
1178
+ firstBriefCase.saveChanges("imported schema");
1179
+ // Push the changeset to the hub
1180
+ await firstBriefCase.pushChanges({ description: "Add another class change", accessToken: adminToken });
1181
+ // Sync the second briefcase
1182
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1183
+ checkClass("TestClass", firstBriefCase, true, secondBriefCase, true);
1184
+ checkClass("AnotherTestClass", firstBriefCase, true, secondBriefCase, true);
1185
+ // Revert the latest changeset from the first briefcase
1186
+ try {
1187
+ await firstBriefCase.revertAndPushChanges({ toIndex: 2, description: "Revert last changeset" });
1188
+ }
1189
+ catch (error) {
1190
+ assert.fail(`Should not have failed with the error: ${error.message}`);
1191
+ }
1192
+ checkClass("TestClass", firstBriefCase, true, secondBriefCase, true);
1193
+ checkClass("AnotherTestClass", firstBriefCase, false, secondBriefCase, true);
1194
+ try {
1195
+ await secondBriefCase.pullChanges({ accessToken: adminToken });
1196
+ }
1197
+ catch (error) {
1198
+ assert.fail(`Should not have failed with the error: ${error.message}`);
1199
+ }
1200
+ checkClass("TestClass", firstBriefCase, true, secondBriefCase, true);
1201
+ checkClass("AnotherTestClass", firstBriefCase, false, secondBriefCase, false);
1202
+ // Cleanup
1203
+ await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);
1204
+ });
1048
1205
  });
1049
1206
  //# sourceMappingURL=ChangesetReader.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChangesetReader.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangesetReader.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Code, ColorDef, GeometryStreamProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point3d } from \"@itwin/core-geometry\";\nimport { assert, expect } from \"chai\";\nimport * as path from \"node:path\";\nimport { DrawingCategory } from \"../../Category\";\nimport { ChangedECInstance, ChangesetECAdaptor as ECChangesetAdaptor, ECChangeUnifierCache, PartialECChangeUnifier } from \"../../ChangesetECAdaptor\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { BriefcaseDb, SnapshotDb } from \"../../IModelDb\";\nimport { SqliteChangeOp, SqliteChangesetReader } from \"../../SqliteChangesetReader\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\n\ndescribe(\"Changeset Reader API\", async () => {\n let iTwinId: GuidString;\n\n before(() => {\n HubMock.startup(\"ChangesetReaderTest\", KnownTestLocations.outputDir);\n iTwinId = HubMock.iTwinId;\n });\n after(() => HubMock.shutdown());\n it(\"Able to recover from when ExclusiveRootClassId is NULL for overflow table\", async () => {\n /**\n * 1. Import schema with class that span overflow table.\n * 2. Insert a element for the class.\n * 3. Push changes to hub.\n * 4. Update the element.\n * 5. Push changes to hub.\n * 6. Delete the element.\n * 7. Set ExclusiveRootClassId to NULL for overflow table. (Simulate the issue)\n * 8. ECChangesetAdaptor should be able to read the changeset 2 in which element is updated against latest imodel where element is deleted.\n */\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const nProps = 36;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n // 1. Import schema with class that span overflow table.\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i}\" typeName=\"string\"/>`).join(\"\\n\")}\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n // Insert element with 100 properties\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n const props = Array(nProps).fill(undefined).map((_, i) => {\n return { [`p${i}`]: `test_${i}` };\n }).reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n\n const geomElement = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...props,\n };\n\n // 2. Insert a element for the class.\n const id = rwIModel.elements.insertElement(geomElement);\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n rwIModel.saveChanges();\n\n // 3. Push changes to hub.\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n // 4. Update the element.\n const updatedElementProps = Object.assign(\n rwIModel.elements.getElementProps(id),\n Array(nProps).fill(undefined).map((_, i) => {\n return { [`p${i}`]: `updated_${i}` };\n }).reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {}));\n\n await rwIModel.locks.acquireLocks({ exclusive: id });\n rwIModel.elements.updateElement(updatedElementProps);\n rwIModel.saveChanges();\n\n // 5. Push changes to hub.\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n await rwIModel.locks.acquireLocks({ exclusive: id });\n\n // 6. Delete the element.\n rwIModel.elements.deleteElement(id);\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, db: rwIModel, disableSchemaCheck: true });\n\n // Set ExclusiveRootClassId to NULL for overflow table to simulate the issue\n expect(rwIModel[_nativeDb].executeSql(\"UPDATE ec_Table SET ExclusiveRootClassId=NULL WHERE Name='bis_GeometricElement2d_Overflow'\")).to.be.eq(DbResult.BE_SQLITE_OK);\n\n const adaptor = new ECChangesetAdaptor(reader);\n let assertOnOverflowTable = false;\n\n const expectedInserted = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECClassId: undefined,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECInstanceId: \"\",\n $meta: {\n tables: [\"bis_GeometricElement2d_Overflow\"],\n op: \"Updated\",\n classFullName: \"BisCore:GeometricElement2d\",\n fallbackClassId: \"0x5e\",\n changeIndexes: [3],\n stage: \"New\",\n },\n };\n const expectedDeleted = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECClassId: undefined,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECInstanceId: \"\",\n $meta: {\n tables: [\"bis_GeometricElement2d_Overflow\"],\n op: \"Updated\",\n classFullName: \"BisCore:GeometricElement2d\",\n fallbackClassId: \"0x5e\",\n changeIndexes: [3],\n stage: \"Old\",\n },\n };\n\n while (adaptor.step()) {\n if (adaptor.op === \"Updated\" && adaptor.inserted?.$meta?.tables[0] === \"bis_GeometricElement2d_Overflow\") {\n assert.deepEqual(adaptor.inserted as any, expectedInserted);\n assert.deepEqual(adaptor.deleted as any, expectedDeleted);\n assertOnOverflowTable = true;\n }\n }\n\n assert.isTrue(assertOnOverflowTable);\n rwIModel.close();\n });\n\n function getClassIdByName(iModel: BriefcaseDb, className: string): Id64String {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModel.withPreparedStatement(`SELECT ECInstanceId from meta.ECClassDef where Name=?`, (stmt) => {\n stmt.bindString(1, className);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n return stmt.getValue(0).getId();\n });\n }\n\n it(\"Changeset reader / EC adaptor\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n rwIModel.saveChanges(\"user 1: schema changeset\");\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n }\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n let totalEl = 0;\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n rwIModel.saveChanges(\"user 1: create drawing partition\");\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"user 1: create drawing partition\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n }\n\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const insertElements = (imodel: BriefcaseDb, className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\n for (let m = 0; m < noOfElements; ++m) {\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n const prop = userProp(++totalEl);\n // Create props\n const geomElement = {\n classFullName: `TestDomain:${className}`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...prop,\n };\n const id = imodel.elements.insertElement(geomElement);\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n }\n };\n const generatedStr = new Array(10).join(\"x\");\n insertElements(rwIModel, \"Test2dElement\", 1, () => {\n return { s: generatedStr };\n });\n\n const updatedElements = async () => {\n await rwIModel.locks.acquireLocks({ exclusive: \"0x20000000004\" });\n const updatedElement = rwIModel.elements.getElementProps(\"0x20000000004\");\n (updatedElement as any).s = \"updated property\";\n rwIModel.elements.updateElement(updatedElement);\n rwIModel.saveChanges(\"user 1: updated data\");\n await rwIModel.pushChanges({ description: \"user 1: update property id=0x20000000004\", accessToken: adminToken });\n };\n\n rwIModel.saveChanges(\"user 1: data\");\n\n if (true || \"test local changes\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 3);\n\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.isNotNull(changes[0].LastMod);\n assert.isNotNull(changes[0].GeometryGuid);\n\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n assert.isNull(changes[1].LastMod);\n assert.isNull(changes[1].GeometryGuid);\n\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Inserted\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\n assert.equal(el.Rotation, 0);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Category, { Id: \"0x20000000002\", RelECClassId: \"0x6d\" });\n assert.equal(el.s, \"xxxxxxxxx\");\n assert.isNull(el.CodeValue);\n assert.isNull(el.UserLabel);\n assert.isNull(el.JsonProperties);\n assert.instanceOf(el.GeometryStream, Uint8Array);\n assert.typeOf(el.FederationGuid, \"string\");\n assert.typeOf(el.LastMod, \"string\");\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Category, { Id: \"0x20000000002\", RelECClassId: \"0x6d\" });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.CodeSpec, { Id: \"0x1\", RelECClassId: \"0x69\" });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.CodeScope, { Id: \"0x1\", RelECClassId: \"0x6b\" });\n\n assert.deepEqual(el.$meta, {\n tables: [\n \"bis_GeometricElement2d\",\n \"bis_Element\",\n ],\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n changeIndexes: [\n 2,\n 1,\n ],\n stage: \"New\",\n });\n }\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\n\n await updatedElements();\n\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n if (true || \"updated element\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 4);\n\n const classId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\n\n // new value\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].ECClassId, classId);\n assert.equal(changes[2].s, \"updated property\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Updated\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n // old value\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[3].ECClassId, classId);\n assert.equal(changes[3].s, \"xxxxxxxxx\");\n assert.equal(changes[3].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[3].$meta?.op, \"Updated\");\n assert.equal(changes[3].$meta?.stage, \"Old\");\n };\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n\n if (true || \"updated element when no classId\") {\n const otherDb = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 4);\n\n // new value\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.isUndefined(changes[2].ECClassId);\n assert.isDefined(changes[2].$meta?.fallbackClassId);\n assert.equal(changes[2].$meta?.fallbackClassId, \"0x3d\");\n assert.isUndefined(changes[2].s);\n assert.equal(changes[2].$meta?.classFullName, \"BisCore:GeometricElement2d\");\n assert.equal(changes[2].$meta?.op, \"Updated\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n // old value\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\n assert.isUndefined(changes[3].ECClassId);\n assert.isDefined(changes[3].$meta?.fallbackClassId);\n assert.equal(changes[3].$meta?.fallbackClassId, \"0x3d\");\n assert.isUndefined(changes[3].s);\n assert.equal(changes[3].$meta?.classFullName, \"BisCore:GeometricElement2d\");\n assert.equal(changes[3].$meta?.op, \"Updated\");\n assert.equal(changes[3].$meta?.stage, \"Old\");\n };\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n\n if (true || \"test changeset file\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 3);\n\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.isNotNull(changes[0].LastMod);\n assert.isNotNull(changes[0].GeometryGuid);\n\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n assert.isNull(changes[1].LastMod);\n assert.isNull(changes[1].GeometryGuid);\n\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Inserted\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\n assert.equal(el.Rotation, 0);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Category, { Id: \"0x20000000002\", RelECClassId: \"0x6d\" });\n assert.equal(el.s, \"xxxxxxxxx\");\n assert.isNull(el.CodeValue);\n assert.isNull(el.UserLabel);\n assert.isNull(el.JsonProperties);\n assert.instanceOf(el.GeometryStream, Uint8Array);\n assert.typeOf(el.FederationGuid, \"string\");\n assert.typeOf(el.LastMod, \"string\");\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Category, { Id: \"0x20000000002\", RelECClassId: \"0x6d\" });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.CodeSpec, { Id: \"0x1\", RelECClassId: \"0x69\" });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.CodeScope, { Id: \"0x1\", RelECClassId: \"0x6b\" });\n\n assert.deepEqual(el.$meta, {\n tables: [\n \"bis_GeometricElement2d\",\n \"bis_Element\",\n ],\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n changeIndexes: [\n 2,\n 1,\n ],\n stage: \"New\",\n });\n }\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n if (true || \"test ChangesetAdaptor.acceptClass()\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 1);\n assert.equal(changes[0].$meta?.classFullName, \"TestDomain:Test2dElement\");\n };\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n if (true || \"test ChangesetAdaptor.adaptor()\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 2);\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n };\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptOp(\"Updated\")\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptOp(\"Updated\")\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n rwIModel.close();\n });\n it(\"revert timeline changes\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n let nProps = 0;\n // 1. Import schema with class that span overflow table.\n const addPropertyAndImportSchema = async () => {\n await rwIModel.acquireSchemaLock();\n ++nProps;\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00.${nProps}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i + 1}\" typeName=\"string\"/>`).join(\"\\n\")}\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n };\n await addPropertyAndImportSchema();\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\n\n const createEl = async (args: { [key: string]: any }) => {\n await rwIModel.locks.acquireLocks({ exclusive: drawingModelId });\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n\n const e1 = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...args,\n };\n return rwIModel.elements.insertElement(e1);;\n };\n const updateEl = async (id: Id64String, args: { [key: string]: any }) => {\n await rwIModel.locks.acquireLocks({ exclusive: id });\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(id), args);\n rwIModel.elements.updateElement(updatedElementProps);\n };\n\n const deleteEl = async (id: Id64String) => {\n await rwIModel.locks.acquireLocks({ exclusive: id });\n rwIModel.elements.deleteElement(id);\n };\n const getChanges = async () => {\n return HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir: path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\") });\n };\n\n const findEl = (id: Id64String) => {\n try {\n return rwIModel.elements.getElementProps(id);\n } catch {\n return undefined;\n }\n };\n // 2. Insert a element for the class\n const el1 = await createEl({ p1: \"test1\" });\n const el2 = await createEl({ p1: \"test2\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"insert 2 elements\" });\n\n // 3. Update the element.\n await updateEl(el1, { p1: \"test3\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"update element 1\" });\n\n // 4. Delete the element.\n await deleteEl(el2);\n const el3 = await createEl({ p1: \"test4\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element 2\" });\n\n // 5. import schema and insert element 4 & update element 3\n await addPropertyAndImportSchema();\n const el4 = await createEl({ p1: \"test5\", p2: \"test6\" });\n await updateEl(el3, { p1: \"test7\", p2: \"test8\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"import schema, insert element 4 & update element 3\" });\n\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\n // 6. Revert to timeline 2\n await rwIModel.revertAndPushChanges({ toIndex: 2, description: \"revert to timeline 2\" });\n assert.equal((await getChanges()).at(-1)!.description, \"revert to timeline 2\");\n\n assert.isUndefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isUndefined(findEl(el3));\n assert.isUndefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\"]);\n\n await rwIModel.revertAndPushChanges({ toIndex: 6, description: \"reinstate last reverted changeset\" });\n assert.equal((await getChanges()).at(-1)!.description, \"reinstate last reverted changeset\");\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\n\n await addPropertyAndImportSchema();\n const el5 = await createEl({ p1: \"test9\", p2: \"test10\", p3: \"test11\" });\n await updateEl(el1, { p1: \"test12\", p2: \"test13\", p3: \"test114\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"import schema, insert element 5 & update element 1\" });\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n\n // skip schema changes & auto generated comment\n await rwIModel.revertAndPushChanges({ toIndex: 1, skipSchemaChanges: true });\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 8 to 1 (schema changes skipped)\");\n assert.isUndefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isUndefined(findEl(el3));\n assert.isUndefined(findEl(el4));\n assert.isUndefined(findEl(el5));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n\n await rwIModel.revertAndPushChanges({ toIndex: 9 });\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 9 to 9\");\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n assert.isDefined(findEl(el5));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n rwIModel.close();\n });\n\n it(\"openGroup() & writeToFile()\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n // 1. Import schema with class that span overflow table.\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n\n const e1 = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...{ p1: \"test1\" },\n };\n\n // 2. Insert a element for the class\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const e1id = rwIModel.elements.insertElement(e1);\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n // 3. Update the element.\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(e1id), { p1: \"test2\" });\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\n rwIModel.elements.updateElement(updatedElementProps);\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n // 4. Delete the element.\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\n rwIModel.elements.deleteElement(e1id);\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n const changesets = (await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir })).slice(1);\n\n const testElementClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\n\n if (true || \"Grouping changeset [2,3,4] should not contain TestDomain:Test2dElement as insert+update+delete=noop\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n\n expect(instances.length).to.eq(1);\n expect(instances[0].id).to.eq(\"0x20000000001\");\n expect(instances[0].classId).to.eq(drawingModelClassId);\n expect(instances[0].op).to.eq(\"Updated\");\n expect(instances[0].classFullName).to.eq(\"BisCore:DrawingModel\");\n }\n\n if (true || \"Grouping changeset [3,4] should contain update+delete=delete TestDomain:Test2dElement\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(1).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Deleted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Deleted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n }\n\n const groupCsFile = path.join(KnownTestLocations.outputDir, \"changeset_grouping.ec\");\n if (true || \"Grouping changeset [2,3] should contain insert+update=insert TestDomain:Test2dElement\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(0, 2).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n\n reader.writeToFile({ fileName: groupCsFile, containsSchemaChanges: false, overwriteFile: true });\n }\n if (true || \"writeToFile() test\") {\n const reader = SqliteChangesetReader.openFile({ fileName: groupCsFile, db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n }\n rwIModel.close();\n });\n});\n"]}
1
+ {"version":3,"file":"ChangesetReader.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangesetReader.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Code, ColorDef, GeometryStreamProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point3d } from \"@itwin/core-geometry\";\nimport { assert, expect } from \"chai\";\nimport * as path from \"node:path\";\nimport { DrawingCategory } from \"../../Category\";\nimport { ChangedECInstance, ChangesetECAdaptor as ECChangesetAdaptor, ECChangeUnifierCache, PartialECChangeUnifier } from \"../../ChangesetECAdaptor\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { BriefcaseDb, SnapshotDb } from \"../../IModelDb\";\nimport { SqliteChangeOp, SqliteChangesetReader } from \"../../SqliteChangesetReader\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\n\ndescribe(\"Changeset Reader API\", async () => {\n let iTwinId: GuidString;\n\n before(() => {\n HubMock.startup(\"ChangesetReaderTest\", KnownTestLocations.outputDir);\n iTwinId = HubMock.iTwinId;\n });\n after(() => HubMock.shutdown());\n it(\"Able to recover from when ExclusiveRootClassId is NULL for overflow table\", async () => {\n /**\n * 1. Import schema with class that span overflow table.\n * 2. Insert a element for the class.\n * 3. Push changes to hub.\n * 4. Update the element.\n * 5. Push changes to hub.\n * 6. Delete the element.\n * 7. Set ExclusiveRootClassId to NULL for overflow table. (Simulate the issue)\n * 8. ECChangesetAdaptor should be able to read the changeset 2 in which element is updated against latest imodel where element is deleted.\n */\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const nProps = 36;\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n // 1. Import schema with class that span overflow table.\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i}\" typeName=\"string\"/>`).join(\"\\n\")}\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n // Insert element with 100 properties\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n const props = Array(nProps).fill(undefined).map((_, i) => {\n return { [`p${i}`]: `test_${i}` };\n }).reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n\n const geomElement = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...props,\n };\n\n // 2. Insert a element for the class.\n const id = rwIModel.elements.insertElement(geomElement);\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n rwIModel.saveChanges();\n\n // 3. Push changes to hub.\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n // 4. Update the element.\n const updatedElementProps = Object.assign(\n rwIModel.elements.getElementProps(id),\n Array(nProps).fill(undefined).map((_, i) => {\n return { [`p${i}`]: `updated_${i}` };\n }).reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {}));\n\n await rwIModel.locks.acquireLocks({ exclusive: id });\n rwIModel.elements.updateElement(updatedElementProps);\n rwIModel.saveChanges();\n\n // 5. Push changes to hub.\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n await rwIModel.locks.acquireLocks({ exclusive: id });\n\n // 6. Delete the element.\n rwIModel.elements.deleteElement(id);\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, db: rwIModel, disableSchemaCheck: true });\n\n // Set ExclusiveRootClassId to NULL for overflow table to simulate the issue\n expect(rwIModel[_nativeDb].executeSql(\"UPDATE ec_Table SET ExclusiveRootClassId=NULL WHERE Name='bis_GeometricElement2d_Overflow'\")).to.be.eq(DbResult.BE_SQLITE_OK);\n\n const adaptor = new ECChangesetAdaptor(reader);\n let assertOnOverflowTable = false;\n\n const expectedInserted = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECClassId: undefined,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECInstanceId: \"\",\n $meta: {\n tables: [\"bis_GeometricElement2d_Overflow\"],\n op: \"Updated\",\n classFullName: \"BisCore:GeometricElement2d\",\n fallbackClassId: \"0x5e\",\n changeIndexes: [3],\n stage: \"New\",\n },\n };\n const expectedDeleted = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECClassId: undefined,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECInstanceId: \"\",\n $meta: {\n tables: [\"bis_GeometricElement2d_Overflow\"],\n op: \"Updated\",\n classFullName: \"BisCore:GeometricElement2d\",\n fallbackClassId: \"0x5e\",\n changeIndexes: [3],\n stage: \"Old\",\n },\n };\n\n while (adaptor.step()) {\n if (adaptor.op === \"Updated\" && adaptor.inserted?.$meta?.tables[0] === \"bis_GeometricElement2d_Overflow\") {\n assert.deepEqual(adaptor.inserted as any, expectedInserted);\n assert.deepEqual(adaptor.deleted as any, expectedDeleted);\n assertOnOverflowTable = true;\n }\n }\n\n assert.isTrue(assertOnOverflowTable);\n rwIModel.close();\n });\n\n function getClassIdByName(iModel: BriefcaseDb, className: string): Id64String {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModel.withPreparedStatement(`SELECT ECInstanceId from meta.ECClassDef where Name=?`, (stmt) => {\n stmt.bindString(1, className);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n return stmt.getValue(0).getId();\n });\n }\n\n it(\"Changeset reader / EC adaptor\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n rwIModel.saveChanges(\"user 1: schema changeset\");\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n }\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n let totalEl = 0;\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n rwIModel.saveChanges(\"user 1: create drawing partition\");\n if (true || \"push changes\") {\n // Push the changes to the hub\n const prePushChangeSetId = rwIModel.changeset.id;\n await rwIModel.pushChanges({ description: \"user 1: create drawing partition\", accessToken: adminToken });\n const postPushChangeSetId = rwIModel.changeset.id;\n assert(!!postPushChangeSetId);\n expect(prePushChangeSetId !== postPushChangeSetId);\n }\n\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const insertElements = (imodel: BriefcaseDb, className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\n for (let m = 0; m < noOfElements; ++m) {\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n const prop = userProp(++totalEl);\n // Create props\n const geomElement = {\n classFullName: `TestDomain:${className}`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...prop,\n };\n const id = imodel.elements.insertElement(geomElement);\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n }\n };\n const generatedStr = new Array(10).join(\"x\");\n insertElements(rwIModel, \"Test2dElement\", 1, () => {\n return { s: generatedStr };\n });\n\n const updatedElements = async () => {\n await rwIModel.locks.acquireLocks({ exclusive: \"0x20000000004\" });\n const updatedElement = rwIModel.elements.getElementProps(\"0x20000000004\");\n (updatedElement as any).s = \"updated property\";\n rwIModel.elements.updateElement(updatedElement);\n rwIModel.saveChanges(\"user 1: updated data\");\n await rwIModel.pushChanges({ description: \"user 1: update property id=0x20000000004\", accessToken: adminToken });\n };\n\n rwIModel.saveChanges(\"user 1: data\");\n\n if (true || \"test local changes\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 3);\n\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.isNotNull(changes[0].LastMod);\n assert.isNotNull(changes[0].GeometryGuid);\n\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n assert.isNull(changes[1].LastMod);\n assert.isNull(changes[1].GeometryGuid);\n\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Inserted\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\n assert.equal(el.Rotation, 0);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Category, { Id: \"0x20000000002\", RelECClassId: \"0x6d\" });\n assert.equal(el.s, \"xxxxxxxxx\");\n assert.isNull(el.CodeValue);\n assert.isNull(el.UserLabel);\n assert.isNull(el.JsonProperties);\n assert.instanceOf(el.GeometryStream, Uint8Array);\n assert.typeOf(el.FederationGuid, \"string\");\n assert.typeOf(el.LastMod, \"string\");\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Category, { Id: \"0x20000000002\", RelECClassId: \"0x6d\" });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.CodeSpec, { Id: \"0x1\", RelECClassId: \"0x69\" });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.CodeScope, { Id: \"0x1\", RelECClassId: \"0x6b\" });\n\n assert.deepEqual(el.$meta, {\n tables: [\n \"bis_GeometricElement2d\",\n \"bis_Element\",\n ],\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n changeIndexes: [\n 2,\n 1,\n ],\n stage: \"New\",\n });\n }\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\n\n await updatedElements();\n\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\n if (true || \"updated element\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 4);\n\n const classId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\n\n // new value\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].ECClassId, classId);\n assert.equal(changes[2].s, \"updated property\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Updated\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n // old value\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[3].ECClassId, classId);\n assert.equal(changes[3].s, \"xxxxxxxxx\");\n assert.equal(changes[3].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[3].$meta?.op, \"Updated\");\n assert.equal(changes[3].$meta?.stage, \"Old\");\n };\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n\n if (true || \"updated element when no classId\") {\n const otherDb = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 4);\n\n // new value\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.isUndefined(changes[2].ECClassId);\n assert.isDefined(changes[2].$meta?.fallbackClassId);\n assert.equal(changes[2].$meta?.fallbackClassId, \"0x3d\");\n assert.isUndefined(changes[2].s);\n assert.equal(changes[2].$meta?.classFullName, \"BisCore:GeometricElement2d\");\n assert.equal(changes[2].$meta?.op, \"Updated\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n // old value\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\n assert.isUndefined(changes[3].ECClassId);\n assert.isDefined(changes[3].$meta?.fallbackClassId);\n assert.equal(changes[3].$meta?.fallbackClassId, \"0x3d\");\n assert.isUndefined(changes[3].s);\n assert.equal(changes[3].$meta?.classFullName, \"BisCore:GeometricElement2d\");\n assert.equal(changes[3].$meta?.op, \"Updated\");\n assert.equal(changes[3].$meta?.stage, \"Old\");\n };\n\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n\n if (true || \"test changeset file\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 3);\n\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.isNotNull(changes[0].LastMod);\n assert.isNotNull(changes[0].GeometryGuid);\n\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n assert.isNull(changes[1].LastMod);\n assert.isNull(changes[1].GeometryGuid);\n\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\n assert.equal(changes[2].$meta?.op, \"Inserted\");\n assert.equal(changes[2].$meta?.stage, \"New\");\n\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\n assert.equal(el.Rotation, 0);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Category, { Id: \"0x20000000002\", RelECClassId: \"0x6d\" });\n assert.equal(el.s, \"xxxxxxxxx\");\n assert.isNull(el.CodeValue);\n assert.isNull(el.UserLabel);\n assert.isNull(el.JsonProperties);\n assert.instanceOf(el.GeometryStream, Uint8Array);\n assert.typeOf(el.FederationGuid, \"string\");\n assert.typeOf(el.LastMod, \"string\");\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.Category, { Id: \"0x20000000002\", RelECClassId: \"0x6d\" });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.CodeSpec, { Id: \"0x1\", RelECClassId: \"0x69\" });\n // eslint-disable-next-line @typescript-eslint/naming-convention\n assert.deepEqual(el.CodeScope, { Id: \"0x1\", RelECClassId: \"0x6b\" });\n\n assert.deepEqual(el.$meta, {\n tables: [\n \"bis_GeometricElement2d\",\n \"bis_Element\",\n ],\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n changeIndexes: [\n 2,\n 1,\n ],\n stage: \"New\",\n });\n }\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n if (true || \"test ChangesetAdaptor.acceptClass()\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 1);\n assert.equal(changes[0].$meta?.classFullName, \"TestDomain:Test2dElement\");\n };\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n if (true || \"test ChangesetAdaptor.adaptor()\") {\n const testChanges = (changes: ChangedECInstance[]) => {\n assert.equal(changes.length, 2);\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[0].$meta?.op, \"Updated\");\n assert.equal(changes[0].$meta?.stage, \"New\");\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\n assert.equal(changes[1].$meta?.op, \"Updated\");\n assert.equal(changes[1].$meta?.stage, \"Old\");\n };\n if (true || \"test with InMemoryInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptOp(\"Updated\")\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n\n if (true || \"test with SqliteBackedInstanceCache\") {\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\n using adaptor = new ECChangesetAdaptor(reader);\n adaptor.acceptOp(\"Updated\")\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\n while (adaptor.step()) {\n pcu.appendFrom(adaptor);\n }\n testChanges(Array.from(pcu.instances));\n }\n }\n rwIModel.close();\n });\n it(\"revert timeline changes\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n let nProps = 0;\n // 1. Import schema with class that span overflow table.\n const addPropertyAndImportSchema = async () => {\n await rwIModel.acquireSchemaLock();\n ++nProps;\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00.${nProps}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i + 1}\" typeName=\"string\"/>`).join(\"\\n\")}\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n };\n await addPropertyAndImportSchema();\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\n\n const createEl = async (args: { [key: string]: any }) => {\n await rwIModel.locks.acquireLocks({ exclusive: drawingModelId });\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n\n const e1 = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...args,\n };\n return rwIModel.elements.insertElement(e1);;\n };\n const updateEl = async (id: Id64String, args: { [key: string]: any }) => {\n await rwIModel.locks.acquireLocks({ exclusive: id });\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(id), args);\n rwIModel.elements.updateElement(updatedElementProps);\n };\n\n const deleteEl = async (id: Id64String) => {\n await rwIModel.locks.acquireLocks({ exclusive: id });\n rwIModel.elements.deleteElement(id);\n };\n const getChanges = async () => {\n return HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir: path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\") });\n };\n\n const findEl = (id: Id64String) => {\n try {\n return rwIModel.elements.getElementProps(id);\n } catch {\n return undefined;\n }\n };\n // 2. Insert a element for the class\n const el1 = await createEl({ p1: \"test1\" });\n const el2 = await createEl({ p1: \"test2\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"insert 2 elements\" });\n\n // 3. Update the element.\n await updateEl(el1, { p1: \"test3\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"update element 1\" });\n\n // 4. Delete the element.\n await deleteEl(el2);\n const el3 = await createEl({ p1: \"test4\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element 2\" });\n\n // 5. import schema and insert element 4 & update element 3\n await addPropertyAndImportSchema();\n const el4 = await createEl({ p1: \"test5\", p2: \"test6\" });\n await updateEl(el3, { p1: \"test7\", p2: \"test8\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"import schema, insert element 4 & update element 3\" });\n\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\n // 6. Revert to timeline 2\n await rwIModel.revertAndPushChanges({ toIndex: 2, description: \"revert to timeline 2\" });\n assert.equal((await getChanges()).at(-1)!.description, \"revert to timeline 2\");\n\n assert.isUndefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isUndefined(findEl(el3));\n assert.isUndefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\"]);\n\n await rwIModel.revertAndPushChanges({ toIndex: 6, description: \"reinstate last reverted changeset\" });\n assert.equal((await getChanges()).at(-1)!.description, \"reinstate last reverted changeset\");\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\n\n await addPropertyAndImportSchema();\n const el5 = await createEl({ p1: \"test9\", p2: \"test10\", p3: \"test11\" });\n await updateEl(el1, { p1: \"test12\", p2: \"test13\", p3: \"test114\" });\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"import schema, insert element 5 & update element 1\" });\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n\n // skip schema changes & auto generated comment\n await rwIModel.revertAndPushChanges({ toIndex: 1, skipSchemaChanges: true });\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 8 to 1 (schema changes skipped)\");\n assert.isUndefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isUndefined(findEl(el3));\n assert.isUndefined(findEl(el4));\n assert.isUndefined(findEl(el5));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n\n await rwIModel.revertAndPushChanges({ toIndex: 9 });\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 9 to 9\");\n assert.isDefined(findEl(el1));\n assert.isUndefined(findEl(el2));\n assert.isDefined(findEl(el3));\n assert.isDefined(findEl(el4));\n assert.isDefined(findEl(el5));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\n rwIModel.close();\n });\n\n it(\"openGroup() & writeToFile()\", async () => {\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\n // 1. Import schema with class that span overflow table.\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"Test2dElement\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n await rwIModel.importSchemaStrings([schema]);\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Create drawing model and category\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n\n const e1 = {\n classFullName: `TestDomain:Test2dElement`,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n geom: geometryStream,\n ...{ p1: \"test1\" },\n };\n\n // 2. Insert a element for the class\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\n const e1id = rwIModel.elements.insertElement(e1);\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\n\n // 3. Update the element.\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(e1id), { p1: \"test2\" });\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\n rwIModel.elements.updateElement(updatedElementProps);\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\n\n // 4. Delete the element.\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\n rwIModel.elements.deleteElement(e1id);\n rwIModel.saveChanges();\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\n\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\n const changesets = (await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir })).slice(1);\n\n const testElementClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\n\n if (true || \"Grouping changeset [2,3,4] should not contain TestDomain:Test2dElement as insert+update+delete=noop\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n\n expect(instances.length).to.eq(1);\n expect(instances[0].id).to.eq(\"0x20000000001\");\n expect(instances[0].classId).to.eq(drawingModelClassId);\n expect(instances[0].op).to.eq(\"Updated\");\n expect(instances[0].classFullName).to.eq(\"BisCore:DrawingModel\");\n }\n\n if (true || \"Grouping changeset [3,4] should contain update+delete=delete TestDomain:Test2dElement\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(1).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Deleted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Deleted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n }\n\n const groupCsFile = path.join(KnownTestLocations.outputDir, \"changeset_grouping.ec\");\n if (true || \"Grouping changeset [2,3] should contain insert+update=insert TestDomain:Test2dElement\") {\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(0, 2).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n\n reader.writeToFile({ fileName: groupCsFile, containsSchemaChanges: false, overwriteFile: true });\n }\n if (true || \"writeToFile() test\") {\n const reader = SqliteChangesetReader.openFile({ fileName: groupCsFile, db: rwIModel, disableSchemaCheck: true });\n const adaptor = new ECChangesetAdaptor(reader);\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\n while (adaptor.step()) {\n if (adaptor.inserted) {\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\n } else if (adaptor.deleted) {\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\n }\n }\n expect(instances.length).to.eq(3);\n expect(instances[0]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[1]).deep.eq({\n id: \"0x20000000004\",\n classId: testElementClassId,\n op: \"Inserted\",\n classFullName: \"TestDomain:Test2dElement\",\n });\n expect(instances[2]).deep.eq({\n id: \"0x20000000001\",\n classId: drawingModelClassId,\n op: \"Updated\",\n classFullName: \"BisCore:DrawingModel\",\n });\n }\n rwIModel.close();\n });\n\n it(\"Delete class FK constraint violation in cache table\", async () => {\n // Helper to check if TestClass exists in schema and cache table for both briefcases\n function checkClass(firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\n const firstItems = firstBriefcase.getSchemaProps(\"TestSchema\").items;\n assert.equal(isClassInFirst, !!firstItems?.TestClass);\n\n const secondItems = secondBriefcase.getSchemaProps(\"TestSchema\").items;\n assert.equal(isClassInSecond, !!secondItems?.TestClass);\n\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = 'TestClass'`;\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\n firstStmt[Symbol.dispose]();\n\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\n secondStmt[Symbol.dispose]();\n }\n\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n\n // Open two briefcases for the same iModel\n const [firstBriefCase, secondBriefCase] = await Promise.all([\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\n ]);\n\n // Enable shared channel for both\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\n\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n </ECSchema>`]);\n firstBriefCase.saveChanges(\"import initial schema\");\n\n // Push the changes to the hub\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\n\n // Sync the second briefcase with the iModel\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n\n checkClass(firstBriefCase, true, secondBriefCase, true);\n\n // Import the schema\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n </ECSchema>`]);\n firstBriefCase.saveChanges(\"imported schema\");\n\n // Push the changeset to the hub\n await firstBriefCase.pushChanges({ description: \"Delete class major change\", accessToken: adminToken });\n\n checkClass(firstBriefCase, false, secondBriefCase, true);\n\n // Apply the latest changeset to a new briefcase\n try {\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n } catch (error: any) {\n assert.fail(`Should not have failed with the error: ${error.message}`);\n }\n\n checkClass(firstBriefCase, false, secondBriefCase, false);\n\n // Cleanup\n await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);\n });\n\n\n it(\"Delete class FK constraint violation in cache table through a revert\", async () => {\n // Helper to check if TestClass exists in schema and cache table for both briefcases\n function checkClass(className: string, firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\n assert.equal(isClassInFirst, !!firstBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\n assert.equal(isClassInSecond, !!secondBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\n\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = '${className}'`;\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\n firstStmt[Symbol.dispose]();\n\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\n secondStmt[Symbol.dispose]();\n }\n\n const adminToken = \"super manager token\";\n const iModelName = \"test\";\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(rwIModelId);\n\n // Open two briefcases for the same iModel\n const [firstBriefCase, secondBriefCase] = await Promise.all([\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\n ]);\n\n // Enable shared channel for both\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\n\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n </ECSchema>`]);\n firstBriefCase.saveChanges(\"import initial schema\");\n\n // Push the changes to the hub\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\n // Sync the second briefcase\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\n\n // Import the schema\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\n\n <ECCustomAttributes>\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\n </ECCustomAttributes>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"AnotherTestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n </ECSchema>`]);\n firstBriefCase.saveChanges(\"imported schema\");\n\n // Push the changeset to the hub\n await firstBriefCase.pushChanges({ description: \"Add another class change\", accessToken: adminToken });\n // Sync the second briefcase\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\n checkClass(\"AnotherTestClass\", firstBriefCase, true, secondBriefCase, true);\n\n // Revert the latest changeset from the first briefcase\n try {\n await firstBriefCase.revertAndPushChanges({ toIndex: 2, description: \"Revert last changeset\" });\n } catch (error: any) {\n assert.fail(`Should not have failed with the error: ${error.message}`);\n }\n\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, true);\n\n try {\n await secondBriefCase.pullChanges({ accessToken: adminToken });\n } catch (error: any) {\n assert.fail(`Should not have failed with the error: ${error.message}`);\n }\n\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, false);\n\n // Cleanup\n await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-backend",
3
- "version": "5.1.0-dev.39",
3
+ "version": "5.1.0-dev.40",
4
4
  "description": "iTwin.js backend components",
5
5
  "main": "lib/cjs/core-backend.js",
6
6
  "module": "lib/esm/core-backend.js",
@@ -27,10 +27,10 @@
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@opentelemetry/api": "^1.0.4",
30
- "@itwin/core-bentley": "5.1.0-dev.39",
31
- "@itwin/core-geometry": "5.1.0-dev.39",
32
- "@itwin/core-common": "5.1.0-dev.39",
33
- "@itwin/ecschema-metadata": "5.1.0-dev.39"
30
+ "@itwin/core-bentley": "5.1.0-dev.40",
31
+ "@itwin/core-geometry": "5.1.0-dev.40",
32
+ "@itwin/core-common": "5.1.0-dev.40",
33
+ "@itwin/ecschema-metadata": "5.1.0-dev.40"
34
34
  },
35
35
  "peerDependenciesMeta": {
36
36
  "@opentelemetry/api": {
@@ -72,12 +72,12 @@
72
72
  "marked": "^14.1.3",
73
73
  "sql-formatter": "^15.4.6",
74
74
  "webpack": "^5.97.1",
75
- "@itwin/build-tools": "5.1.0-dev.39",
76
- "@itwin/core-bentley": "5.1.0-dev.39",
77
- "@itwin/core-common": "5.1.0-dev.39",
78
- "@itwin/ecschema-metadata": "5.1.0-dev.39",
79
- "@itwin/core-geometry": "5.1.0-dev.39",
80
- "@itwin/ecsql-common": "5.1.0-dev.39",
75
+ "@itwin/build-tools": "5.1.0-dev.40",
76
+ "@itwin/core-bentley": "5.1.0-dev.40",
77
+ "@itwin/core-common": "5.1.0-dev.40",
78
+ "@itwin/ecsql-common": "5.1.0-dev.40",
79
+ "@itwin/core-geometry": "5.1.0-dev.40",
80
+ "@itwin/ecschema-metadata": "5.1.0-dev.40",
81
81
  "internal-tools": "3.0.0-dev.69"
82
82
  },
83
83
  "dependencies": {