@itwin/core-backend 5.13.0-dev.9 → 5.14.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -1
- package/lib/cjs/Category.d.ts +4 -4
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts +5 -0
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +13 -3
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +3 -3
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +2 -2
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/EditTxn.d.ts.map +1 -1
- package/lib/cjs/EditTxn.js +1 -0
- package/lib/cjs/EditTxn.js.map +1 -1
- package/lib/cjs/Element.d.ts +48 -12
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +120 -24
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +30 -15
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +51 -15
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/Model.d.ts +5 -5
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/PropertyStore.js +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/SchemaSync.d.ts +37 -9
- package/lib/cjs/SchemaSync.d.ts.map +1 -1
- package/lib/cjs/SchemaSync.js +125 -6
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SynchronousChannel.d.ts +62 -0
- package/lib/cjs/SynchronousChannel.d.ts.map +1 -0
- package/lib/cjs/SynchronousChannel.js +11 -0
- package/lib/cjs/SynchronousChannel.js.map +1 -0
- package/lib/cjs/Texture.d.ts +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +44 -4
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +72 -14
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +6 -6
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts +22 -7
- package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js +104 -36
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +25 -10
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +1 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +1 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.d.ts +22 -0
- package/lib/cjs/internal/IntegrityCheck.d.ts.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.js +13 -0
- package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
- package/lib/cjs/internal/NoReservations.d.ts +6 -0
- package/lib/cjs/internal/NoReservations.d.ts.map +1 -0
- package/lib/cjs/internal/NoReservations.js +21 -0
- package/lib/cjs/internal/NoReservations.js.map +1 -0
- package/lib/cjs/internal/SchemaSyncReservations.d.ts +4 -0
- package/lib/cjs/internal/SchemaSyncReservations.d.ts.map +1 -0
- package/lib/cjs/internal/SchemaSyncReservations.js +118 -0
- package/lib/cjs/internal/SchemaSyncReservations.js.map +1 -0
- package/lib/cjs/internal/Symbols.d.ts +1 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +2 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/esm/Category.d.ts +4 -4
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts +5 -0
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +13 -3
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +3 -3
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +2 -2
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/EditTxn.d.ts.map +1 -1
- package/lib/esm/EditTxn.js +1 -0
- package/lib/esm/EditTxn.js.map +1 -1
- package/lib/esm/Element.d.ts +48 -12
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +121 -25
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +30 -15
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +52 -16
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/Model.d.ts +5 -5
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/PropertyStore.js +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/SchemaSync.d.ts +37 -9
- package/lib/esm/SchemaSync.d.ts.map +1 -1
- package/lib/esm/SchemaSync.js +127 -8
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SynchronousChannel.d.ts +62 -0
- package/lib/esm/SynchronousChannel.d.ts.map +1 -0
- package/lib/esm/SynchronousChannel.js +9 -0
- package/lib/esm/SynchronousChannel.js.map +1 -0
- package/lib/esm/Texture.d.ts +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +44 -4
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +72 -14
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +6 -6
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts +22 -7
- package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js +104 -36
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +25 -10
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/core-backend.d.ts +1 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +1 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.d.ts +22 -0
- package/lib/esm/internal/IntegrityCheck.d.ts.map +1 -1
- package/lib/esm/internal/IntegrityCheck.js +13 -0
- package/lib/esm/internal/IntegrityCheck.js.map +1 -1
- package/lib/esm/internal/NoReservations.d.ts +6 -0
- package/lib/esm/internal/NoReservations.d.ts.map +1 -0
- package/lib/esm/internal/NoReservations.js +18 -0
- package/lib/esm/internal/NoReservations.js.map +1 -0
- package/lib/esm/internal/SchemaSyncReservations.d.ts +4 -0
- package/lib/esm/internal/SchemaSyncReservations.d.ts.map +1 -0
- package/lib/esm/internal/SchemaSyncReservations.js +115 -0
- package/lib/esm/internal/SchemaSyncReservations.js.map +1 -0
- package/lib/esm/internal/Symbols.d.ts +1 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +1 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +8 -3
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +178 -2
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +48 -18
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +177 -0
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +2 -16
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +2 -2
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +80 -2
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelECSql.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelECSql.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelECSql.test.js +367 -0
- package/lib/esm/test/imodel/IModelECSql.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelElements.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelElements.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelElements.test.js +969 -0
- package/lib/esm/test/imodel/IModelElements.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.js +539 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.js +499 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelMetadata.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelMetadata.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelMetadata.test.js +274 -0
- package/lib/esm/test/imodel/IModelMetadata.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelModels.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelModels.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelModels.test.js +357 -0
- package/lib/esm/test/imodel/IModelModels.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelRelationships.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelRelationships.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelRelationships.test.js +407 -0
- package/lib/esm/test/imodel/IModelRelationships.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelTestFixtures.d.ts +53 -0
- package/lib/esm/test/imodel/IModelTestFixtures.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelTestFixtures.js +107 -0
- package/lib/esm/test/imodel/IModelTestFixtures.js.map +1 -0
- package/lib/esm/test/imodel/IModelViews.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelViews.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelViews.test.js +199 -0
- package/lib/esm/test/imodel/IModelViews.test.js.map +1 -0
- package/lib/esm/test/index.d.ts +0 -1
- package/lib/esm/test/index.d.ts.map +1 -1
- package/lib/esm/test/index.js +0 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +8 -26
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DgnDomainMergeConflict.test.d.ts +2 -0
- package/lib/esm/test/standalone/DgnDomainMergeConflict.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/DgnDomainMergeConflict.test.js +263 -0
- package/lib/esm/test/standalone/DgnDomainMergeConflict.test.js.map +1 -0
- package/lib/esm/test/standalone/GeometryStream.test.js +1 -3
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +78 -1
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js +29 -10
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +23 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaSyncDb.test.d.ts +2 -0
- package/lib/esm/test/standalone/SchemaSyncDb.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/SchemaSyncDb.test.js +221 -0
- package/lib/esm/test/standalone/SchemaSyncDb.test.js.map +1 -0
- package/lib/esm/test/standalone/SchemaSyncElementReservation.test.d.ts +2 -0
- package/lib/esm/test/standalone/SchemaSyncElementReservation.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/SchemaSyncElementReservation.test.js +459 -0
- package/lib/esm/test/standalone/SchemaSyncElementReservation.test.js.map +1 -0
- package/lib/esm/test/standalone/SnapshotDb.test.js +1 -0
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +108 -8
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/package.json +14 -17
- package/lib/esm/test/RevisionUtility.d.ts +0 -33
- package/lib/esm/test/RevisionUtility.d.ts.map +0 -1
- package/lib/esm/test/RevisionUtility.js +0 -52
- package/lib/esm/test/RevisionUtility.js.map +0 -1
- package/lib/esm/test/imodel/IModel.test.d.ts +0 -2
- package/lib/esm/test/imodel/IModel.test.d.ts.map +0 -1
- package/lib/esm/test/imodel/IModel.test.js +0 -3277
- package/lib/esm/test/imodel/IModel.test.js.map +0 -1
package/lib/esm/TxnManager.js
CHANGED
|
@@ -73,6 +73,16 @@ export function setMaxEntitiesPerEvent(max) {
|
|
|
73
73
|
ChangedEntitiesProc.maxPerEvent = max;
|
|
74
74
|
return prevMax;
|
|
75
75
|
}
|
|
76
|
+
class TxnEntityMetadataImpl {
|
|
77
|
+
classFullName;
|
|
78
|
+
baseClasses = [];
|
|
79
|
+
constructor(classFullName) {
|
|
80
|
+
this.classFullName = classFullName;
|
|
81
|
+
}
|
|
82
|
+
is(baseClassFullName) {
|
|
83
|
+
return this.classFullName === baseClassFullName || this.baseClasses.some((baseClass) => baseClass.is(baseClassFullName));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
76
86
|
/** Maintains an ordered array of entity Ids and a parallel array containing the index of the corresponding entity's class Id. */
|
|
77
87
|
class ChangedEntitiesArray {
|
|
78
88
|
entityIds = new OrderedId64Array();
|
|
@@ -105,12 +115,17 @@ class ChangedEntitiesArray {
|
|
|
105
115
|
entities[type] = CompressedId64Set.compressIds(this.entityIds);
|
|
106
116
|
entities[`${type}Meta`] = this._classIndices;
|
|
107
117
|
}
|
|
108
|
-
iterable(classIds) {
|
|
118
|
+
iterable(classIds, metadata) {
|
|
109
119
|
function* iterator(entityIds, classIndices) {
|
|
110
|
-
|
|
120
|
+
let entity;
|
|
111
121
|
for (let i = 0; i < entityIds.length; i++) {
|
|
122
|
+
const classIndex = classIndices[i];
|
|
123
|
+
const entityMetadata = metadata[classIndex];
|
|
124
|
+
assert(undefined !== entityMetadata);
|
|
125
|
+
entity ??= { id: "", classId: "", metadata: entityMetadata };
|
|
112
126
|
entity.id = entityIds[i];
|
|
113
|
-
entity.classId = classIds[
|
|
127
|
+
entity.classId = classIds[classIndex];
|
|
128
|
+
entity.metadata = entityMetadata;
|
|
114
129
|
yield entity;
|
|
115
130
|
}
|
|
116
131
|
}
|
|
@@ -156,10 +171,10 @@ class ChangedEntitiesProc {
|
|
|
156
171
|
const meta = db.classMetaDataRegistry.findByClassId(classId);
|
|
157
172
|
nameToIndex.set(meta?.ecclass ?? "", nameToIndex.size);
|
|
158
173
|
}
|
|
159
|
-
const
|
|
174
|
+
const metadata = [];
|
|
160
175
|
function addMetadata(name, index) {
|
|
161
176
|
const bases = [];
|
|
162
|
-
|
|
177
|
+
metadata[index] = { name, bases };
|
|
163
178
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
164
179
|
const meta = db.tryGetMetaData(name);
|
|
165
180
|
if (!meta) {
|
|
@@ -182,25 +197,43 @@ class ChangedEntitiesProc {
|
|
|
182
197
|
}
|
|
183
198
|
addMetadata(name, index);
|
|
184
199
|
}
|
|
185
|
-
return
|
|
200
|
+
return metadata;
|
|
201
|
+
}
|
|
202
|
+
populateBackendMetadata(frontendMetadata) {
|
|
203
|
+
const backendMetadata = frontendMetadata.map(({ name }) => new TxnEntityMetadataImpl(name));
|
|
204
|
+
for (let index = 0; index < frontendMetadata.length; index++) {
|
|
205
|
+
const frontend = frontendMetadata[index];
|
|
206
|
+
const backend = backendMetadata[index];
|
|
207
|
+
assert(undefined !== frontend && undefined !== backend);
|
|
208
|
+
for (const baseClassIndex of frontend.bases) {
|
|
209
|
+
const baseClass = backendMetadata[baseClassIndex];
|
|
210
|
+
assert(undefined !== baseClass);
|
|
211
|
+
backend.baseClasses.push(baseClass);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return backendMetadata;
|
|
186
215
|
}
|
|
187
216
|
sendEvent(iModel, evt, evtName) {
|
|
188
217
|
if (this._currSize === 0)
|
|
189
218
|
return;
|
|
190
219
|
const classIds = this._classIds.toArray();
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
220
|
+
const frontendMetadata = this.populateMetadata(iModel, classIds);
|
|
221
|
+
// Notify backend listeners. Avoid constructing the backend metadata graph when there are no listeners.
|
|
222
|
+
if (evt.numberOfListeners > 0) {
|
|
223
|
+
const backendMetadata = this.populateBackendMetadata(frontendMetadata);
|
|
224
|
+
const txnEntities = {
|
|
225
|
+
inserts: this._inserted.iterable(classIds, backendMetadata),
|
|
226
|
+
deletes: this._deleted.iterable(classIds, backendMetadata),
|
|
227
|
+
updates: this._updated.iterable(classIds, backendMetadata),
|
|
228
|
+
};
|
|
229
|
+
evt.raiseEvent(txnEntities);
|
|
230
|
+
}
|
|
198
231
|
// Notify frontend listeners.
|
|
199
232
|
const entities = {
|
|
200
233
|
insertedMeta: [],
|
|
201
234
|
updatedMeta: [],
|
|
202
235
|
deletedMeta: [],
|
|
203
|
-
meta:
|
|
236
|
+
meta: frontendMetadata,
|
|
204
237
|
};
|
|
205
238
|
this._inserted.addToChangedEntities(entities, "inserted");
|
|
206
239
|
this._deleted.addToChangedEntities(entities, "deleted");
|
|
@@ -968,6 +1001,15 @@ export class TxnManager {
|
|
|
968
1001
|
};
|
|
969
1002
|
};
|
|
970
1003
|
// Default conflict resolution for which custom handler is never called.
|
|
1004
|
+
// A local txn that imported a domain replays an insert to `dgn_Domain` for a domain the
|
|
1005
|
+
// just-merged changesets already registered. Both rows describe the same domain, so the
|
|
1006
|
+
// merged row wins and the local insert is dropped. Only a primary key collision on an insert
|
|
1007
|
+
// is benign - an update or delete whose "before" values do not match (`Data`) describes a real
|
|
1008
|
+
// divergence and is left to the handlers below.
|
|
1009
|
+
if (args.tableName === "dgn_Domain" && args.cause === "Conflict" && args.opcode === "Inserted") {
|
|
1010
|
+
Logger.logInfo(BackendLoggerCategory.IModelDb, "dgn_Domain insert conflict during rebase. Keeping the merged row and skipping the local change.", getChangeMetaData());
|
|
1011
|
+
return DbConflictResolution.Skip;
|
|
1012
|
+
}
|
|
971
1013
|
if (args.cause === "Data" && !args.indirect) {
|
|
972
1014
|
if (args.tableName === "be_Prop") {
|
|
973
1015
|
if (args.getValueText(0, "Old") === "ec_Db" && args.getValueText(1, "Old") === "localDbInfo") {
|
|
@@ -1065,11 +1107,27 @@ export class TxnManager {
|
|
|
1065
1107
|
onEndValidation = new BeEvent();
|
|
1066
1108
|
/** Called after validation completes from [[IModelDb.saveChanges]].
|
|
1067
1109
|
* The argument to the event holds the list of elements that were inserted, updated, and deleted.
|
|
1110
|
+
* Each changed entity includes its `id`, `classId`, and [[TxnChangedEntity.metadata]]. Use `metadata.classFullName` for an exact class match or `metadata.is` to match a class or one of its subclasses.
|
|
1111
|
+
* @example
|
|
1112
|
+
* ```ts
|
|
1113
|
+
* iModel.txns.onElementsChanged.addListener((changes) => {
|
|
1114
|
+
* for (const change of changes.inserts) {
|
|
1115
|
+
* if (change.metadata.classFullName === "MySchema:MyElement")
|
|
1116
|
+
* invalidateCache();
|
|
1117
|
+
* }
|
|
1118
|
+
*
|
|
1119
|
+
* for (const change of changes.updates) {
|
|
1120
|
+
* if (change.metadata.is("BisCore:GeometricElement"))
|
|
1121
|
+
* invalidateGeometryCache(change.id);
|
|
1122
|
+
* }
|
|
1123
|
+
* });
|
|
1124
|
+
* ```
|
|
1068
1125
|
* @note If there are many changed elements in a single Txn, the notifications are sent in batches so this event *may be called multiple times* per Txn.
|
|
1069
1126
|
*/
|
|
1070
1127
|
onElementsChanged = new BeEvent();
|
|
1071
1128
|
/** Called after validation completes from [[IModelDb.saveChanges]].
|
|
1072
1129
|
* The argument to the event holds the list of models that were inserted, updated, and deleted.
|
|
1130
|
+
* Each changed model includes its `id`, `classId`, and [[TxnChangedEntity.metadata]]. Use `metadata.classFullName` for an exact class match or `metadata.is` to match a class or one of its subclasses.
|
|
1073
1131
|
* @note If there are many changed models in a single Txn, the notifications are sent in batches so this event *may be called multiple times* per Txn.
|
|
1074
1132
|
*/
|
|
1075
1133
|
onModelsChanged = new BeEvent();
|