@itwin/imodel-transformer 0.2.2-dev.1 → 0.2.2-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/BigMap.d.ts +24 -0
- package/lib/cjs/BigMap.d.ts.map +1 -0
- package/lib/cjs/BigMap.js +71 -0
- package/lib/cjs/BigMap.js.map +1 -0
- package/lib/cjs/BranchProvenanceInitializer.d.ts +33 -0
- package/lib/cjs/BranchProvenanceInitializer.d.ts.map +1 -0
- package/lib/cjs/BranchProvenanceInitializer.js +54 -0
- package/lib/cjs/BranchProvenanceInitializer.js.map +1 -0
- package/lib/cjs/EntityMap.d.ts +3 -3
- package/lib/cjs/EntityMap.d.ts.map +1 -1
- package/lib/cjs/EntityMap.js +2 -1
- package/lib/cjs/EntityMap.js.map +1 -1
- package/lib/cjs/IModelTransformer.d.ts +14 -1
- package/lib/cjs/IModelTransformer.d.ts.map +1 -1
- package/lib/cjs/IModelTransformer.js +29 -15
- package/lib/cjs/IModelTransformer.js.map +1 -1
- package/lib/cjs/PendingReferenceMap.d.ts.map +1 -1
- package/lib/cjs/PendingReferenceMap.js +2 -1
- package/lib/cjs/PendingReferenceMap.js.map +1 -1
- package/lib/cjs/transformer.d.ts +1 -0
- package/lib/cjs/transformer.d.ts.map +1 -1
- package/lib/cjs/transformer.js +1 -0
- package/lib/cjs/transformer.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module Utils
|
|
3
|
+
*/
|
|
4
|
+
import { Id64String } from "@itwin/core-bentley";
|
|
5
|
+
/**
|
|
6
|
+
* This class serves as a temporary solution to address the issue of the V8 JavaScript engine's Map implementation,
|
|
7
|
+
* which is limited to approximately 16.7 million elements. Currently, only Id64 string representations are
|
|
8
|
+
* supported by this Map; any other type will lead to errors. It's worth noting that our future plan is to
|
|
9
|
+
* replace this stopgap with a more robust solution, utilizing a temporary SQLite database (https://github.com/iTwin/imodel-transformer/issues/83).
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare class BigMap<V> extends Map<Id64String, V> {
|
|
13
|
+
private _maps;
|
|
14
|
+
private _size;
|
|
15
|
+
get size(): number;
|
|
16
|
+
constructor();
|
|
17
|
+
clear(): void;
|
|
18
|
+
delete(key: Id64String): boolean;
|
|
19
|
+
forEach(callbackfn: (value: V, key: Id64String, map: Map<Id64String, V>) => void, thisArg?: any): void;
|
|
20
|
+
get(key: Id64String): V | undefined;
|
|
21
|
+
has(key: Id64String): boolean;
|
|
22
|
+
set(key: Id64String, value: V): this;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=BigMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BigMap.d.ts","sourceRoot":"","sources":["../../src/BigMap.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;GAMG;AACH,qBAAa,MAAM,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,KAAK,CAAS;IAEtB,IAAoB,IAAI,IAAI,MAAM,CAEjC;;IAyBe,KAAK,IAAI,IAAI;IAKb,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAShC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAMtG,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,GAAG,SAAS;IAInC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAI7B,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;CAUvD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BigMap = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* This class serves as a temporary solution to address the issue of the V8 JavaScript engine's Map implementation,
|
|
6
|
+
* which is limited to approximately 16.7 million elements. Currently, only Id64 string representations are
|
|
7
|
+
* supported by this Map; any other type will lead to errors. It's worth noting that our future plan is to
|
|
8
|
+
* replace this stopgap with a more robust solution, utilizing a temporary SQLite database (https://github.com/iTwin/imodel-transformer/issues/83).
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
class BigMap extends Map {
|
|
12
|
+
get size() {
|
|
13
|
+
return this._size;
|
|
14
|
+
}
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
this._maps = {
|
|
18
|
+
0: new Map(),
|
|
19
|
+
1: new Map(),
|
|
20
|
+
2: new Map(),
|
|
21
|
+
3: new Map(),
|
|
22
|
+
4: new Map(),
|
|
23
|
+
5: new Map(),
|
|
24
|
+
6: new Map(),
|
|
25
|
+
7: new Map(),
|
|
26
|
+
8: new Map(),
|
|
27
|
+
9: new Map(),
|
|
28
|
+
a: new Map(),
|
|
29
|
+
b: new Map(),
|
|
30
|
+
c: new Map(),
|
|
31
|
+
d: new Map(),
|
|
32
|
+
e: new Map(),
|
|
33
|
+
f: new Map(),
|
|
34
|
+
};
|
|
35
|
+
this._size = 0;
|
|
36
|
+
}
|
|
37
|
+
clear() {
|
|
38
|
+
Object.values(this._maps).forEach((m) => m.clear());
|
|
39
|
+
this._size = 0;
|
|
40
|
+
}
|
|
41
|
+
delete(key) {
|
|
42
|
+
const wasDeleted = this._maps[key[key.length - 1]].delete(key);
|
|
43
|
+
if (wasDeleted) {
|
|
44
|
+
this._size--;
|
|
45
|
+
}
|
|
46
|
+
return wasDeleted;
|
|
47
|
+
}
|
|
48
|
+
forEach(callbackfn, thisArg) {
|
|
49
|
+
Object.values(this._maps).forEach((m) => {
|
|
50
|
+
m.forEach(callbackfn, thisArg);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
get(key) {
|
|
54
|
+
return this._maps[key[key.length - 1]].get(key);
|
|
55
|
+
}
|
|
56
|
+
has(key) {
|
|
57
|
+
return this._maps[key[key.length - 1]].has(key);
|
|
58
|
+
}
|
|
59
|
+
set(key, value) {
|
|
60
|
+
const mapForKey = this._maps[key[key.length - 1]];
|
|
61
|
+
if (mapForKey === undefined)
|
|
62
|
+
throw Error(`Tried to set ${key}, but that key has no submap`);
|
|
63
|
+
const beforeSize = mapForKey.size;
|
|
64
|
+
mapForKey.set(key, value);
|
|
65
|
+
const afterSize = mapForKey.size;
|
|
66
|
+
this._size += (afterSize - beforeSize);
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.BigMap = BigMap;
|
|
71
|
+
//# sourceMappingURL=BigMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BigMap.js","sourceRoot":"","sources":["../../src/BigMap.ts"],"names":[],"mappings":";;;AASA;;;;;;GAMG;AACH,MAAa,MAAU,SAAQ,GAAkB;IAI7C,IAAoB,IAAI;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG;YACX,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;YACZ,CAAC,EAAE,IAAI,GAAG,EAAE;SACb,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAEe,KAAK;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAEe,MAAM,CAAC,GAAe;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEe,OAAO,CAAC,UAAwE,EAAE,OAAa;QAC7G,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACtC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAEe,GAAG,CAAC,GAAe;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAEe,GAAG,CAAC,GAAe;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAEe,GAAG,CAAC,GAAe,EAAE,KAAQ;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,SAAS;YACzB,MAAM,KAAK,CAAC,gBAAgB,GAAG,8BAA8B,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC;QAClC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;CACJ;AArED,wBAqEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\nimport { Id64String } from \"@itwin/core-bentley\";\n\n/**\n * This class serves as a temporary solution to address the issue of the V8 JavaScript engine's Map implementation,\n * which is limited to approximately 16.7 million elements. Currently, only Id64 string representations are\n * supported by this Map; any other type will lead to errors. It's worth noting that our future plan is to\n * replace this stopgap with a more robust solution, utilizing a temporary SQLite database (https://github.com/iTwin/imodel-transformer/issues/83).\n * @internal\n */\nexport class BigMap<V> extends Map<Id64String, V> {\n private _maps: Record<string, Map<string, V>>;\n private _size: number;\n\n public override get size(): number {\n return this._size;\n }\n\n public constructor() {\n super();\n this._maps = {\n 0: new Map(),\n 1: new Map(),\n 2: new Map(),\n 3: new Map(),\n 4: new Map(),\n 5: new Map(),\n 6: new Map(),\n 7: new Map(),\n 8: new Map(),\n 9: new Map(),\n a: new Map(),\n b: new Map(),\n c: new Map(),\n d: new Map(),\n e: new Map(),\n f: new Map(),\n };\n this._size = 0;\n }\n\n public override clear(): void {\n Object.values(this._maps).forEach((m) => m.clear());\n this._size = 0;\n }\n\n public override delete(key: Id64String): boolean {\n const wasDeleted = this._maps[key[key.length - 1]].delete(key);\n if (wasDeleted) {\n this._size--;\n }\n\n return wasDeleted;\n }\n\n public override forEach(callbackfn: (value: V, key: Id64String, map: Map<Id64String, V>) => void, thisArg?: any): void {\n Object.values(this._maps).forEach((m) => {\n m.forEach(callbackfn, thisArg);\n });\n }\n\n public override get(key: Id64String): V | undefined {\n return this._maps[key[key.length - 1]].get(key);\n }\n\n public override has(key: Id64String): boolean {\n return this._maps[key[key.length - 1]].has(key);\n }\n\n public override set(key: Id64String, value: V): this {\n const mapForKey = this._maps[key[key.length - 1]];\n if (mapForKey === undefined)\n throw Error(`Tried to set ${key}, but that key has no submap`);\n const beforeSize = mapForKey.size;\n mapForKey.set(key, value);\n const afterSize = mapForKey.size;\n this._size += (afterSize - beforeSize);\n return this;\n }\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { IModelDb } from "@itwin/core-backend";
|
|
2
|
+
import { Id64String } from "@itwin/core-bentley";
|
|
3
|
+
/**
|
|
4
|
+
* @alpha
|
|
5
|
+
*/
|
|
6
|
+
export interface ProvenanceInitArgs {
|
|
7
|
+
/** the master iModel which is the source of the provenance */
|
|
8
|
+
master: IModelDb;
|
|
9
|
+
/** the canonical url of the master iModel */
|
|
10
|
+
masterUrl?: string;
|
|
11
|
+
/** the description of the master iModel */
|
|
12
|
+
masterDescription?: string;
|
|
13
|
+
/**
|
|
14
|
+
* @param {IModelDb} branchDb - the branch iModel which is the container of the provenance
|
|
15
|
+
* Must be opened Read/Write
|
|
16
|
+
*/
|
|
17
|
+
branch: IModelDb;
|
|
18
|
+
/**
|
|
19
|
+
* insert Federation Guids in all lacking elements in the master database, which will prevent
|
|
20
|
+
* needing to insert External Source Aspects for provenance tracking
|
|
21
|
+
* @note requires a read/write master
|
|
22
|
+
*/
|
|
23
|
+
createFedGuidsForMaster?: boolean;
|
|
24
|
+
}
|
|
25
|
+
interface ProvenanceInitResult {
|
|
26
|
+
targetScopeElementId: Id64String;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @alpha
|
|
30
|
+
*/
|
|
31
|
+
export declare function initializeBranchProvenance(args: ProvenanceInitArgs): Promise<ProvenanceInitResult>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=BranchProvenanceInitializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchProvenanceInitializer.d.ts","sourceRoot":"","sources":["../../src/BranchProvenanceInitializer.ts"],"names":[],"mappings":"AACA,OAAO,EAAgD,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAC7G,OAAO,EAAY,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK3D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,MAAM,EAAE,QAAQ,CAAC;IACjB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,MAAM,EAAE,QAAQ,CAAC;IACjB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,UAAU,oBAAoB;IAC5B,oBAAoB,EAAE,UAAU,CAAC;CAClC;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA4CxG"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initializeBranchProvenance = void 0;
|
|
4
|
+
const core_backend_1 = require("@itwin/core-backend");
|
|
5
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
6
|
+
const core_common_1 = require("@itwin/core-common");
|
|
7
|
+
const assert = require("assert");
|
|
8
|
+
const IModelTransformer_1 = require("./IModelTransformer");
|
|
9
|
+
/**
|
|
10
|
+
* @alpha
|
|
11
|
+
*/
|
|
12
|
+
async function initializeBranchProvenance(args) {
|
|
13
|
+
if (args.createFedGuidsForMaster) {
|
|
14
|
+
// FIXME: elements in the cache could be wrong after this so need to purge cache somehow, maybe close the iModel
|
|
15
|
+
args.master.withSqliteStatement("UPDATE bis_Element SET FederationGuid=randomblob(16) WHERE FederationGuid IS NULL", (s) => {
|
|
16
|
+
assert(s.step() === core_bentley_1.DbResult.BE_SQLITE_DONE);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
// create an external source and owning repository link to use as our *Target Scope Element* for future synchronizations
|
|
20
|
+
const masterLinkRepoId = new core_backend_1.RepositoryLink({
|
|
21
|
+
classFullName: core_backend_1.RepositoryLink.classFullName,
|
|
22
|
+
code: core_backend_1.RepositoryLink.createCode(args.branch, core_backend_1.IModelDb.repositoryModelId, "example-code-value"),
|
|
23
|
+
model: core_backend_1.IModelDb.repositoryModelId,
|
|
24
|
+
url: args.masterUrl,
|
|
25
|
+
format: "iModel",
|
|
26
|
+
repositoryGuid: args.master.iModelId,
|
|
27
|
+
description: args.masterDescription,
|
|
28
|
+
}, args.branch).insert();
|
|
29
|
+
const masterExternalSourceId = new core_backend_1.ExternalSource({
|
|
30
|
+
classFullName: core_backend_1.ExternalSource.classFullName,
|
|
31
|
+
model: core_backend_1.IModelDb.rootSubjectId,
|
|
32
|
+
code: core_common_1.Code.createEmpty(),
|
|
33
|
+
repository: new core_backend_1.ExternalSourceIsInRepository(masterLinkRepoId),
|
|
34
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
35
|
+
connectorName: require("../../package.json").name,
|
|
36
|
+
connectorVersion: require("../../package.json").version,
|
|
37
|
+
/* eslint-enable @typescript-eslint/no-var-requires */
|
|
38
|
+
}, args.branch).insert();
|
|
39
|
+
const fedGuidLessElemsSql = "SELECT ECInstanceId as id FROM Bis.Element WHERE FederationGuid IS NULL";
|
|
40
|
+
const reader = args.branch.createQueryReader(fedGuidLessElemsSql);
|
|
41
|
+
while (await reader.step()) {
|
|
42
|
+
const id = reader.current.toRow().id;
|
|
43
|
+
IModelTransformer_1.IModelTransformer.initElementProvenanceOptions(id, id, {
|
|
44
|
+
isReverseSynchronization: false,
|
|
45
|
+
targetScopeElementId: masterExternalSourceId,
|
|
46
|
+
sourceDb: args.master,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
targetScopeElementId: masterExternalSourceId,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
exports.initializeBranchProvenance = initializeBranchProvenance;
|
|
54
|
+
//# sourceMappingURL=BranchProvenanceInitializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchProvenanceInitializer.js","sourceRoot":"","sources":["../../src/BranchProvenanceInitializer.ts"],"names":[],"mappings":";;;AACA,sDAA6G;AAC7G,sDAA2D;AAC3D,oDAA0C;AAC1C,iCAAkC;AAClC,2DAAwD;AA6BxD;;GAEG;AACI,KAAK,UAAU,0BAA0B,CAAC,IAAwB;IACvE,IAAI,IAAI,CAAC,uBAAuB,EAAE;QAChC,gHAAgH;QAChH,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,mFAAmF,EAAE,CAAC,CAAC,EAAE,EAAE;YACzH,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,uBAAQ,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;KACJ;IAED,wHAAwH;IACxH,MAAM,gBAAgB,GAAG,IAAI,6BAAc,CAAC;QAC1C,aAAa,EAAE,6BAAc,CAAC,aAAa;QAC3C,IAAI,EAAE,6BAAc,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAQ,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;QAC9F,KAAK,EAAE,uBAAQ,CAAC,iBAAiB;QACjC,GAAG,EAAE,IAAI,CAAC,SAAS;QACnB,MAAM,EAAE,QAAQ;QAChB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;QACpC,WAAW,EAAE,IAAI,CAAC,iBAAiB;KACpC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAEzB,MAAM,sBAAsB,GAAG,IAAI,6BAAc,CAAC;QAChD,aAAa,EAAE,6BAAc,CAAC,aAAa;QAC3C,KAAK,EAAE,uBAAQ,CAAC,aAAa;QAC7B,IAAI,EAAE,kBAAI,CAAC,WAAW,EAAE;QACxB,UAAU,EAAE,IAAI,2CAA4B,CAAC,gBAAgB,CAAC;QAC9D,uDAAuD;QACvD,aAAa,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,IAAI;QACjD,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO;QACvD,sDAAsD;KACvD,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAEzB,MAAM,mBAAmB,GAAG,yEAAyE,CAAC;IACtG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IAClE,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,EAAE,GAAW,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;QAC7C,qCAAiB,CAAC,4BAA4B,CAAC,EAAE,EAAE,EAAE,EAAE;YACrD,wBAAwB,EAAE,KAAK;YAC/B,oBAAoB,EAAE,sBAAsB;YAC5C,QAAQ,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;KACJ;IAED,OAAO;QACL,oBAAoB,EAAE,sBAAsB;KAC7C,CAAC;AACJ,CAAC;AA5CD,gEA4CC","sourcesContent":["\nimport { ExternalSource, ExternalSourceIsInRepository, IModelDb, RepositoryLink } from \"@itwin/core-backend\";\nimport { DbResult, Id64String } from \"@itwin/core-bentley\";\nimport { Code } from \"@itwin/core-common\";\nimport assert = require(\"assert\");\nimport { IModelTransformer } from \"./IModelTransformer\";\n\n/**\n * @alpha\n */\nexport interface ProvenanceInitArgs {\n /** the master iModel which is the source of the provenance */\n master: IModelDb;\n /** the canonical url of the master iModel */\n masterUrl?: string;\n /** the description of the master iModel */\n masterDescription?: string;\n /**\n * @param {IModelDb} branchDb - the branch iModel which is the container of the provenance\n * Must be opened Read/Write\n */\n branch: IModelDb;\n /**\n * insert Federation Guids in all lacking elements in the master database, which will prevent\n * needing to insert External Source Aspects for provenance tracking\n * @note requires a read/write master\n */\n createFedGuidsForMaster?: boolean;\n}\n\ninterface ProvenanceInitResult {\n targetScopeElementId: Id64String;\n}\n\n/**\n * @alpha\n */\nexport async function initializeBranchProvenance(args: ProvenanceInitArgs): Promise<ProvenanceInitResult> {\n if (args.createFedGuidsForMaster) {\n // FIXME: elements in the cache could be wrong after this so need to purge cache somehow, maybe close the iModel\n args.master.withSqliteStatement(\"UPDATE bis_Element SET FederationGuid=randomblob(16) WHERE FederationGuid IS NULL\", (s) => {\n assert(s.step() === DbResult.BE_SQLITE_DONE);\n });\n }\n\n // create an external source and owning repository link to use as our *Target Scope Element* for future synchronizations\n const masterLinkRepoId = new RepositoryLink({\n classFullName: RepositoryLink.classFullName,\n code: RepositoryLink.createCode(args.branch, IModelDb.repositoryModelId, \"example-code-value\"),\n model: IModelDb.repositoryModelId,\n url: args.masterUrl,\n format: \"iModel\",\n repositoryGuid: args.master.iModelId,\n description: args.masterDescription,\n }, args.branch).insert();\n\n const masterExternalSourceId = new ExternalSource({\n classFullName: ExternalSource.classFullName,\n model: IModelDb.rootSubjectId,\n code: Code.createEmpty(),\n repository: new ExternalSourceIsInRepository(masterLinkRepoId),\n /* eslint-disable @typescript-eslint/no-var-requires */\n connectorName: require(\"../../package.json\").name,\n connectorVersion: require(\"../../package.json\").version,\n /* eslint-enable @typescript-eslint/no-var-requires */\n }, args.branch).insert();\n\n const fedGuidLessElemsSql = \"SELECT ECInstanceId as id FROM Bis.Element WHERE FederationGuid IS NULL\";\n const reader = args.branch.createQueryReader(fedGuidLessElemsSql);\n while (await reader.step()) {\n const id: string = reader.current.toRow().id;\n IModelTransformer.initElementProvenanceOptions(id, id, {\n isReverseSynchronization: false,\n targetScopeElementId: masterExternalSourceId,\n sourceDb: args.master,\n });\n }\n\n return {\n targetScopeElementId: masterExternalSourceId,\n };\n}\n\n"]}
|
package/lib/cjs/EntityMap.d.ts
CHANGED
|
@@ -17,10 +17,10 @@ export declare class EntityMap<V> {
|
|
|
17
17
|
getByKey(k: EntityKey): V | undefined;
|
|
18
18
|
delete(entity: ConcreteEntity): boolean;
|
|
19
19
|
deleteByKey(k: EntityKey): boolean;
|
|
20
|
-
keys(): IterableIterator
|
|
20
|
+
keys(): IterableIterator<string>;
|
|
21
21
|
values(): IterableIterator<V>;
|
|
22
|
-
entries(): IterableIterator<[
|
|
23
|
-
[Symbol.iterator](): IterableIterator<[
|
|
22
|
+
entries(): IterableIterator<[string, V]>;
|
|
23
|
+
[Symbol.iterator](): IterableIterator<[string, V]>;
|
|
24
24
|
get size(): number;
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=EntityMap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityMap.d.ts","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"EntityMap.d.ts","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AAGvE,gBAAgB;AAChB,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC;AAExC,gBAAgB;AAChB,qBAAa,SAAS,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,CAAmB;WAEjB,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS;IAIjD,KAAK,IAAI,IAAI;IAIb,GAAG,CAAC,MAAM,EAAE,cAAc;IAK1B,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAIjD,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAK5C,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,CAAC,GAAG,SAAS;IAI1C,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,GAAG,SAAS;IAIrC,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;IAIvC,WAAW,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO;IAIlC,IAAI;IAIJ,MAAM;IAIN,OAAO;IAIP,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIxB,IAAW,IAAI,WAEd;CACF"}
|
package/lib/cjs/EntityMap.js
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EntityMap = void 0;
|
|
4
4
|
const core_backend_1 = require("@itwin/core-backend");
|
|
5
|
+
const BigMap_1 = require("./BigMap");
|
|
5
6
|
/** @internal */
|
|
6
7
|
class EntityMap {
|
|
7
8
|
constructor() {
|
|
8
|
-
this._map = new
|
|
9
|
+
this._map = new BigMap_1.BigMap();
|
|
9
10
|
}
|
|
10
11
|
static makeKey(entity) {
|
|
11
12
|
return core_backend_1.EntityReferences.from(entity);
|
package/lib/cjs/EntityMap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":";;;AAQA,sDAAuE;
|
|
1
|
+
{"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":";;;AAQA,sDAAuE;AACvE,qCAAkC;AAKlC,gBAAgB;AAChB,MAAa,SAAS;IAAtB;QACU,SAAI,GAAG,IAAI,eAAM,EAAK,CAAC;IA2DjC,CAAC;IAzDQ,MAAM,CAAC,OAAO,CAAC,MAAsB;QAC1C,OAAO,+BAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEM,GAAG,CAAC,MAAsB;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAC7C,CAAC;IACJ,CAAC;IAEM,GAAG,CAAC,MAAsB,EAAE,GAAM;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAEM,QAAQ,CAAC,CAAY,EAAE,GAAM;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,GAAG,CAAC,MAAsB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAEM,QAAQ,CAAC,CAAY;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,MAAsB;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAEM,WAAW,CAAC,CAAY;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AA5DD,8BA4DC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\nimport { EntityReference } from \"@itwin/core-common\";\nimport { ConcreteEntity, EntityReferences } from \"@itwin/core-backend\";\nimport { BigMap } from \"./BigMap\";\n\n/** @internal */\nexport type EntityKey = EntityReference;\n\n/** @internal */\nexport class EntityMap<V> {\n private _map = new BigMap<V>();\n\n public static makeKey(entity: ConcreteEntity): EntityKey {\n return EntityReferences.from(entity);\n }\n\n public clear(): void {\n return this._map.clear();\n }\n\n public has(entity: ConcreteEntity) {\n return this._map.has(EntityMap.makeKey(entity)\n );\n }\n\n public set(entity: ConcreteEntity, val: V): EntityMap<V> {\n return this.setByKey(EntityMap.makeKey(entity), val);\n }\n\n public setByKey(k: EntityKey, val: V): EntityMap<V> {\n this._map.set(k, val);\n return this;\n }\n\n public get(entity: ConcreteEntity): V | undefined {\n return this.getByKey(EntityMap.makeKey(entity));\n }\n\n public getByKey(k: EntityKey): V | undefined {\n return this._map.get(k);\n }\n\n public delete(entity: ConcreteEntity): boolean {\n return this.deleteByKey(EntityMap.makeKey(entity));\n }\n\n public deleteByKey(k: EntityKey): boolean {\n return this._map.delete(k);\n }\n\n public keys() {\n return this._map.keys();\n }\n\n public values() {\n return this._map.values();\n }\n\n public entries() {\n return this._map.entries();\n }\n\n public [Symbol.iterator]() {\n return this._map[Symbol.iterator]();\n }\n\n public get size() {\n return this._map.size;\n }\n}\n\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AccessToken, Id64String } from "@itwin/core-bentley";
|
|
2
2
|
import * as ECSchemaMetaData from "@itwin/ecschema-metadata";
|
|
3
3
|
import { Element, ElementAspect, ElementMultiAspect, ElementUniqueAspect, Entity, IModelDb, Model, Relationship, RelationshipProps, SQLiteDb } from "@itwin/core-backend";
|
|
4
|
-
import { CodeSpec, ElementAspectProps, ElementProps, EntityReference, EntityReferenceSet, FontProps, ModelProps, Placement2d, Placement3d } from "@itwin/core-common";
|
|
4
|
+
import { CodeSpec, ElementAspectProps, ElementProps, EntityReference, EntityReferenceSet, ExternalSourceAspectProps, FontProps, ModelProps, Placement2d, Placement3d } from "@itwin/core-common";
|
|
5
5
|
import { ExportChangesOptions, ExportSchemaResult, IModelExporter, IModelExportHandler } from "./IModelExporter";
|
|
6
6
|
import { IModelImporter, OptimizeGeometryOptions } from "./IModelImporter";
|
|
7
7
|
import { PendingReferenceMap } from "./PendingReferenceMap";
|
|
@@ -199,6 +199,12 @@ export declare class IModelTransformer extends IModelExportHandler {
|
|
|
199
199
|
*/
|
|
200
200
|
get provenanceSourceDb(): IModelDb;
|
|
201
201
|
/** Create an ExternalSourceAspectProps in a standard way for an Element in an iModel --> iModel transformation. */
|
|
202
|
+
static initElementProvenanceOptions(sourceElementId: Id64String, targetElementId: Id64String, args: {
|
|
203
|
+
sourceDb: IModelDb;
|
|
204
|
+
isReverseSynchronization: boolean;
|
|
205
|
+
targetScopeElementId: Id64String;
|
|
206
|
+
}): ExternalSourceAspectProps;
|
|
207
|
+
/** Create an ExternalSourceAspectProps in a standard way for an Element in an iModel --> iModel transformation. */
|
|
202
208
|
private initElementProvenance;
|
|
203
209
|
/** Create an ExternalSourceAspectProps in a standard way for a Relationship in an iModel --> iModel transformations.
|
|
204
210
|
* The ExternalSourceAspect is meant to be owned by the Element in the target iModel that is the `sourceId` of transformed relationship.
|
|
@@ -209,6 +215,13 @@ export declare class IModelTransformer extends IModelExportHandler {
|
|
|
209
215
|
private validateScopeProvenance;
|
|
210
216
|
private queryExternalSourceAspectId;
|
|
211
217
|
/** Iterate all matching ExternalSourceAspects in the provenance iModel (target unless reverse sync) and call a function for each one. */
|
|
218
|
+
static forEachTrackedElement(args: {
|
|
219
|
+
provenanceSourceDb: IModelDb;
|
|
220
|
+
provenanceDb: IModelDb;
|
|
221
|
+
targetScopeElementId: Id64String;
|
|
222
|
+
isReverseSynchronization: boolean;
|
|
223
|
+
fn: (sourceElementId: Id64String, targetElementId: Id64String) => void;
|
|
224
|
+
}): void;
|
|
212
225
|
private forEachTrackedElement;
|
|
213
226
|
/** Initialize the source to target Element mapping from ExternalSourceAspects in the target iModel.
|
|
214
227
|
* @note This method is called from all `process*` functions and should never need to be called directly.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelTransformer.d.ts","sourceRoot":"","sources":["../../src/IModelTransformer.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,WAAW,EAAgC,UAAU,EAEtD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,gBAAgB,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAE2H,OAAO,EAAE,aAAa,EAAE,kBAAkB,EACjJ,mBAAmB,EAAE,MAAM,EACA,QAAQ,EAAuE,KAAK,EAC/G,YAAY,EAAE,iBAAiB,EAAU,QAAQ,EAC3E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAC0B,QAAQ,EAAuB,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"IModelTransformer.d.ts","sourceRoot":"","sources":["../../src/IModelTransformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -206,22 +206,27 @@ class IModelTransformer extends IModelExporter_1.IModelExportHandler {
|
|
|
206
206
|
return this._options.isReverseSynchronization ? this.targetDb : this.sourceDb;
|
|
207
207
|
}
|
|
208
208
|
/** Create an ExternalSourceAspectProps in a standard way for an Element in an iModel --> iModel transformation. */
|
|
209
|
-
|
|
210
|
-
const elementId =
|
|
211
|
-
const aspectIdentifier =
|
|
212
|
-
const version = this._options.isReverseSynchronization
|
|
213
|
-
? this.targetDb.elements.queryLastModifiedTime(targetElementId)
|
|
214
|
-
: this.sourceDb.elements.queryLastModifiedTime(sourceElementId);
|
|
209
|
+
static initElementProvenanceOptions(sourceElementId, targetElementId, args) {
|
|
210
|
+
const elementId = args.isReverseSynchronization ? sourceElementId : targetElementId;
|
|
211
|
+
const aspectIdentifier = args.isReverseSynchronization ? targetElementId : sourceElementId;
|
|
215
212
|
const aspectProps = {
|
|
216
213
|
classFullName: core_backend_1.ExternalSourceAspect.classFullName,
|
|
217
214
|
element: { id: elementId, relClassName: core_backend_1.ElementOwnsExternalSourceAspects.classFullName },
|
|
218
|
-
scope: { id:
|
|
215
|
+
scope: { id: args.targetScopeElementId },
|
|
219
216
|
identifier: aspectIdentifier,
|
|
220
217
|
kind: core_backend_1.ExternalSourceAspect.Kind.Element,
|
|
221
|
-
version,
|
|
218
|
+
version: args.sourceDb.elements.queryLastModifiedTime(sourceElementId),
|
|
222
219
|
};
|
|
223
220
|
return aspectProps;
|
|
224
221
|
}
|
|
222
|
+
/** Create an ExternalSourceAspectProps in a standard way for an Element in an iModel --> iModel transformation. */
|
|
223
|
+
initElementProvenance(sourceElementId, targetElementId) {
|
|
224
|
+
return IModelTransformer.initElementProvenanceOptions(sourceElementId, targetElementId, {
|
|
225
|
+
isReverseSynchronization: !!this._options.isReverseSynchronization,
|
|
226
|
+
targetScopeElementId: this.targetScopeElementId,
|
|
227
|
+
sourceDb: this.sourceDb,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
225
230
|
/** Create an ExternalSourceAspectProps in a standard way for a Relationship in an iModel --> iModel transformations.
|
|
226
231
|
* The ExternalSourceAspect is meant to be owned by the Element in the target iModel that is the `sourceId` of transformed relationship.
|
|
227
232
|
* The `identifier` property of the ExternalSourceAspect will be the ECInstanceId of the relationship in the source iModel.
|
|
@@ -281,26 +286,35 @@ class IModelTransformer extends IModelExporter_1.IModelExportHandler {
|
|
|
281
286
|
});
|
|
282
287
|
}
|
|
283
288
|
/** Iterate all matching ExternalSourceAspects in the provenance iModel (target unless reverse sync) and call a function for each one. */
|
|
284
|
-
forEachTrackedElement(
|
|
285
|
-
if (!
|
|
289
|
+
static forEachTrackedElement(args) {
|
|
290
|
+
if (!args.provenanceDb.containsClass(core_backend_1.ExternalSourceAspect.classFullName)) {
|
|
286
291
|
throw new core_common_1.IModelError(core_bentley_1.IModelStatus.BadSchema, "The BisCore schema version of the target database is too old");
|
|
287
292
|
}
|
|
288
293
|
const sql = `SELECT Identifier,Element.Id FROM ${core_backend_1.ExternalSourceAspect.classFullName} WHERE Scope.Id=:scopeId AND Kind=:kind`;
|
|
289
|
-
|
|
290
|
-
statement.bindId("scopeId",
|
|
294
|
+
args.provenanceDb.withPreparedStatement(sql, (statement) => {
|
|
295
|
+
statement.bindId("scopeId", args.targetScopeElementId);
|
|
291
296
|
statement.bindString("kind", core_backend_1.ExternalSourceAspect.Kind.Element);
|
|
292
297
|
while (core_bentley_1.DbResult.BE_SQLITE_ROW === statement.step()) {
|
|
293
298
|
const aspectIdentifier = statement.getValue(0).getString(); // ExternalSourceAspect.Identifier is of type string
|
|
294
299
|
const elementId = statement.getValue(1).getId();
|
|
295
|
-
if (
|
|
296
|
-
fn(elementId, aspectIdentifier); // provenance coming from the sourceDb
|
|
300
|
+
if (args.isReverseSynchronization) {
|
|
301
|
+
args.fn(elementId, aspectIdentifier); // provenance coming from the sourceDb
|
|
297
302
|
}
|
|
298
303
|
else {
|
|
299
|
-
fn(aspectIdentifier, elementId); // provenance coming from the targetDb
|
|
304
|
+
args.fn(aspectIdentifier, elementId); // provenance coming from the targetDb
|
|
300
305
|
}
|
|
301
306
|
}
|
|
302
307
|
});
|
|
303
308
|
}
|
|
309
|
+
forEachTrackedElement(fn) {
|
|
310
|
+
return IModelTransformer.forEachTrackedElement({
|
|
311
|
+
provenanceSourceDb: this._options.isReverseSynchronization ? this.sourceDb : this.targetDb,
|
|
312
|
+
provenanceDb: this.provenanceDb,
|
|
313
|
+
targetScopeElementId: this.targetScopeElementId,
|
|
314
|
+
isReverseSynchronization: !!this._options.isReverseSynchronization,
|
|
315
|
+
fn,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
304
318
|
/** Initialize the source to target Element mapping from ExternalSourceAspects in the target iModel.
|
|
305
319
|
* @note This method is called from all `process*` functions and should never need to be called directly.
|
|
306
320
|
* @deprecated in 3.x. call [[initialize]] instead, it does the same thing among other initialization
|