node-opcua-address-space-base 2.106.0 → 2.107.0
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/dist/clone_helper.d.ts +30 -3
- package/dist/clone_helper.js +169 -59
- package/dist/clone_helper.js.map +1 -1
- package/dist/clone_options.d.ts +15 -3
- package/dist/clone_options.js +11 -2
- package/dist/clone_options.js.map +1 -1
- package/dist/session_context.d.ts +1 -1
- package/package.json +4 -4
- package/source/clone_helper.ts +230 -83
- package/source/clone_options.ts +21 -4
- package/source/session_context.ts +1 -1
package/dist/clone_helper.d.ts
CHANGED
|
@@ -3,12 +3,38 @@ import { UAVariable } from "./ua_variable";
|
|
|
3
3
|
import { UAMethod } from "./ua_method";
|
|
4
4
|
import { UAObjectType } from "./ua_object_type";
|
|
5
5
|
import { UAVariableType } from "./ua_variable_type";
|
|
6
|
+
import { BaseNode } from "./base_node";
|
|
7
|
+
/** @private */
|
|
8
|
+
export declare function fullPath(node: BaseNode): string;
|
|
9
|
+
/** @private */
|
|
10
|
+
export declare function fullPath2(node: BaseNode): string;
|
|
11
|
+
/** @private */
|
|
12
|
+
export declare function exploreNode(node: BaseNode): void;
|
|
13
|
+
interface CloneInfo {
|
|
14
|
+
cloned: UAObject | UAVariable | UAMethod;
|
|
15
|
+
original: UAObject | UAVariable | UAMethod | UAVariableType | UAObjectType;
|
|
16
|
+
}
|
|
6
17
|
export declare class CloneHelper {
|
|
7
18
|
level: number;
|
|
8
|
-
private
|
|
19
|
+
private _context;
|
|
20
|
+
private _contextStack;
|
|
21
|
+
private readonly mapTypeInstanceChildren;
|
|
9
22
|
pad(): string;
|
|
10
|
-
|
|
11
|
-
|
|
23
|
+
getClonedArray(): CloneInfo[];
|
|
24
|
+
pushContext<TO extends UAObject | UAVariable | UAMethod | UAObjectType | UAVariableType, TC extends UAObject | UAVariable | UAMethod>({ clonedParent, originalParent }: {
|
|
25
|
+
clonedParent: TC;
|
|
26
|
+
originalParent: TO;
|
|
27
|
+
}): void;
|
|
28
|
+
popContext(): void;
|
|
29
|
+
registerClonedObject<TO extends UAObject | UAVariable | UAMethod | UAObjectType | UAVariableType, TC extends UAObject | UAVariable | UAMethod>({ clonedNode, originalNode }: {
|
|
30
|
+
clonedNode: TC;
|
|
31
|
+
originalNode: TO;
|
|
32
|
+
}): void;
|
|
33
|
+
getCloned({ originalParent, clonedParent, originalNode }: {
|
|
34
|
+
originalParent: BaseNode;
|
|
35
|
+
clonedParent: BaseNode;
|
|
36
|
+
originalNode: UAVariable | UAObject;
|
|
37
|
+
}): UAObject | UAVariable | UAMethod | null;
|
|
12
38
|
}
|
|
13
39
|
export declare function reconstructNonHierarchicalReferences(extraInfo: CloneHelper): void;
|
|
14
40
|
/**
|
|
@@ -18,3 +44,4 @@ export declare function reconstructNonHierarchicalReferences(extraInfo: CloneHel
|
|
|
18
44
|
* @param baseType
|
|
19
45
|
*/
|
|
20
46
|
export declare function reconstructFunctionalGroupType(extraInfo: CloneHelper): void;
|
|
47
|
+
export {};
|
package/dist/clone_helper.js
CHANGED
|
@@ -1,14 +1,70 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.reconstructFunctionalGroupType = exports.reconstructNonHierarchicalReferences = exports.CloneHelper = void 0;
|
|
6
|
+
exports.reconstructFunctionalGroupType = exports.reconstructNonHierarchicalReferences = exports.CloneHelper = exports.exploreNode = exports.fullPath2 = exports.fullPath = void 0;
|
|
4
7
|
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
5
8
|
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
6
9
|
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
7
10
|
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
8
11
|
const node_opcua_constants_1 = require("node-opcua-constants");
|
|
9
|
-
const
|
|
10
|
-
const doDebug = (0, node_opcua_debug_1.checkDebugFlag)("CLONE");
|
|
12
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
13
|
const warningLog = (0, node_opcua_debug_1.make_warningLog)("CLONE");
|
|
14
|
+
const errorLog = (0, node_opcua_debug_1.make_errorLog)(__filename);
|
|
15
|
+
const doTrace = (0, node_opcua_debug_1.checkDebugFlag)("INSTANTIATE");
|
|
16
|
+
const traceLog = errorLog;
|
|
17
|
+
// istanbul ignore next
|
|
18
|
+
/** @private */
|
|
19
|
+
function fullPath(node) {
|
|
20
|
+
const browseName = node.browseName.toString();
|
|
21
|
+
const parent = node.findReferencesExAsObject("Aggregates", node_opcua_data_model_1.BrowseDirection.Inverse)[0];
|
|
22
|
+
if (parent) {
|
|
23
|
+
return fullPath(parent) + "/" + browseName;
|
|
24
|
+
}
|
|
25
|
+
const containingFolder = node.findReferencesExAsObject("Organizes", node_opcua_data_model_1.BrowseDirection.Inverse)[0];
|
|
26
|
+
if (containingFolder) {
|
|
27
|
+
return fullPath(containingFolder) + "@" + browseName;
|
|
28
|
+
}
|
|
29
|
+
return browseName;
|
|
30
|
+
}
|
|
31
|
+
exports.fullPath = fullPath;
|
|
32
|
+
// istanbul ignore next
|
|
33
|
+
/** @private */
|
|
34
|
+
function fullPath2(node) {
|
|
35
|
+
return fullPath(node) + " (" + node.nodeId.toString() + ")";
|
|
36
|
+
}
|
|
37
|
+
exports.fullPath2 = fullPath2;
|
|
38
|
+
// istanbul ignore next
|
|
39
|
+
/** @private */
|
|
40
|
+
function exploreNode(node) {
|
|
41
|
+
const f = (n) => {
|
|
42
|
+
return `${n.browseName.toString()} (${n.nodeId.toString()})${n.modellingRule ? " - " + n.modellingRule : ""}`;
|
|
43
|
+
};
|
|
44
|
+
const r = (r) => {
|
|
45
|
+
const ref = node.addressSpace.findNode(r);
|
|
46
|
+
if (!ref)
|
|
47
|
+
return `${r.nodeId.toString()} (unknown)`;
|
|
48
|
+
return (ref === null || ref === void 0 ? void 0 : ref.browseName.toString()) + " " + ref.nodeId.toString();
|
|
49
|
+
};
|
|
50
|
+
const map = new Set();
|
|
51
|
+
const _explore = (node, pad) => {
|
|
52
|
+
const a = node.findReferencesEx("Aggregates", node_opcua_data_model_1.BrowseDirection.Forward);
|
|
53
|
+
const b = node.findReferencesEx("Organizes", node_opcua_data_model_1.BrowseDirection.Forward);
|
|
54
|
+
for (const ref of [...a, ...b]) {
|
|
55
|
+
const alreadyVisited = map.has(ref.nodeId.toString());
|
|
56
|
+
traceLog(pad, " +-- ", r(ref.referenceType).padEnd(20), "-->", f(ref.node).padEnd(10), alreadyVisited ? " (already visited)" : "");
|
|
57
|
+
if (alreadyVisited) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
map.add(ref.nodeId.toString());
|
|
61
|
+
_explore(ref.node, pad + " ");
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
traceLog("exploring ", f(node));
|
|
65
|
+
_explore(node, " ");
|
|
66
|
+
}
|
|
67
|
+
exports.exploreNode = exploreNode;
|
|
12
68
|
//
|
|
13
69
|
// case 1:
|
|
14
70
|
// /-----------------------------\
|
|
@@ -32,7 +88,7 @@ const warningLog = (0, node_opcua_debug_1.make_warningLog)("CLONE");
|
|
|
32
88
|
// \-----------------------------/
|
|
33
89
|
// ^ |
|
|
34
90
|
// | | +----------+
|
|
35
|
-
// | +-------| Folder1
|
|
91
|
+
// | +-------| Folder1 |
|
|
36
92
|
// | +----------+
|
|
37
93
|
// | |
|
|
38
94
|
// | +--------------|- (EnabledState) (shadow element)
|
|
@@ -42,7 +98,7 @@ const warningLog = (0, node_opcua_debug_1.make_warningLog)("CLONE");
|
|
|
42
98
|
// \-----------------------------/
|
|
43
99
|
// |
|
|
44
100
|
// | | +----------+
|
|
45
|
-
// | +-------| Folder1
|
|
101
|
+
// | +-------| Folder1 |
|
|
46
102
|
// | +----------+
|
|
47
103
|
// | |
|
|
48
104
|
// | +--------------|- (EnabledState)
|
|
@@ -92,37 +148,94 @@ function followPath(node, path) {
|
|
|
92
148
|
class CloneHelper {
|
|
93
149
|
constructor() {
|
|
94
150
|
this.level = 0;
|
|
95
|
-
this.
|
|
151
|
+
this._context = null;
|
|
152
|
+
this._contextStack = [];
|
|
153
|
+
this.mapTypeInstanceChildren = new Map();
|
|
96
154
|
}
|
|
97
155
|
pad() {
|
|
98
156
|
return " ".padEnd(this.level * 2, " ");
|
|
99
157
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
const { parentType, path } = _get_parent_type_and_path(originalNode);
|
|
107
|
-
if (parentType) {
|
|
108
|
-
let base = parentType.subtypeOfObj;
|
|
109
|
-
while (base) {
|
|
110
|
-
const shadowChild = followPath(base, path);
|
|
111
|
-
if (shadowChild) {
|
|
112
|
-
this.mapOrgToClone.set(shadowChild.nodeId.toString(), {
|
|
113
|
-
cloned: clonedNode,
|
|
114
|
-
original: shadowChild
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
base = base.subtypeOfObj;
|
|
158
|
+
getClonedArray() {
|
|
159
|
+
const result = [];
|
|
160
|
+
for (const map of this.mapTypeInstanceChildren.values()) {
|
|
161
|
+
for (const cloneInfo of map.values()) {
|
|
162
|
+
result.push(cloneInfo);
|
|
118
163
|
}
|
|
119
164
|
}
|
|
120
|
-
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
pushContext({ clonedParent, originalParent }) {
|
|
168
|
+
// istanbul ignore next
|
|
169
|
+
doTrace &&
|
|
170
|
+
traceLog(chalk_1.default.yellow("push context: "), "original parent = ", fullPath2(originalParent), "cloned parent =", fullPath2(clonedParent));
|
|
171
|
+
const typeInstance = originalParent.nodeId.toString() + clonedParent.nodeId.toString();
|
|
172
|
+
// istanbul ignore next
|
|
173
|
+
doTrace && traceLog("typeInstance (1) = ", typeInstance, fullPath2(originalParent), fullPath2(clonedParent));
|
|
174
|
+
let a = this.mapTypeInstanceChildren.get(typeInstance);
|
|
175
|
+
if (a) {
|
|
176
|
+
throw new Error("Internal Error");
|
|
177
|
+
}
|
|
178
|
+
a = new Map();
|
|
179
|
+
this.mapTypeInstanceChildren.set(typeInstance, a);
|
|
180
|
+
if (this._context) {
|
|
181
|
+
this._contextStack.push(this._context);
|
|
182
|
+
}
|
|
183
|
+
this._context = a;
|
|
184
|
+
}
|
|
185
|
+
popContext() {
|
|
186
|
+
(0, node_opcua_assert_1.assert)(this._contextStack.length > 0);
|
|
187
|
+
this._context = this._contextStack.pop();
|
|
188
|
+
}
|
|
189
|
+
registerClonedObject({ clonedNode, originalNode }) {
|
|
190
|
+
if (!this._context) {
|
|
191
|
+
this.pushContext({ clonedParent: clonedNode, originalParent: originalNode });
|
|
121
192
|
}
|
|
193
|
+
// istanbul ignore next
|
|
194
|
+
doTrace &&
|
|
195
|
+
traceLog(chalk_1.default.yellow("registerClonedObject"), "originalNode = ", fullPath2(originalNode), "clonedNode =", fullPath2(clonedNode));
|
|
196
|
+
const insertShadow = (map) => {
|
|
197
|
+
const { parentType, path } = _get_parent_type_and_path(originalNode);
|
|
198
|
+
if (parentType) {
|
|
199
|
+
let base = parentType.subtypeOfObj;
|
|
200
|
+
while (base) {
|
|
201
|
+
const shadowChild = followPath(base, path);
|
|
202
|
+
if (shadowChild) {
|
|
203
|
+
// istanbul ignore next
|
|
204
|
+
doTrace && traceLog("shadowChild = ", fullPath2(shadowChild));
|
|
205
|
+
map.set(shadowChild.nodeId.toString(), {
|
|
206
|
+
cloned: clonedNode,
|
|
207
|
+
original: shadowChild
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
base = base.subtypeOfObj;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
122
214
|
// find subTypeOf
|
|
215
|
+
if (!this._context) {
|
|
216
|
+
throw new Error("internal error: Cannot find context");
|
|
217
|
+
}
|
|
218
|
+
// also create [Type+Instance] map
|
|
219
|
+
// to do so we need to find the TypeDefinition of the originalNode
|
|
220
|
+
this._context.set(originalNode.nodeId.toString(), {
|
|
221
|
+
cloned: clonedNode,
|
|
222
|
+
original: originalNode
|
|
223
|
+
});
|
|
224
|
+
insertShadow(this._context);
|
|
123
225
|
}
|
|
124
|
-
getCloned(originalNode) {
|
|
125
|
-
|
|
226
|
+
getCloned({ originalParent, clonedParent, originalNode }) {
|
|
227
|
+
//
|
|
228
|
+
// Type Instance
|
|
229
|
+
// +-> Folder (A) +-> Folder (A')
|
|
230
|
+
// | | | |
|
|
231
|
+
// | +- Component (B) | +- Component (B')
|
|
232
|
+
// °-> Folder (C) [parentNode] +-> Folder (C') <= [clonedParent]
|
|
233
|
+
// | |
|
|
234
|
+
// +- Component (B again !) [originalNode] +- Component (B again !)
|
|
235
|
+
// istanbul ignore next
|
|
236
|
+
doTrace &&
|
|
237
|
+
traceLog("typeInstance (3) = originalParent", fullPath2(originalParent), "originalNode=", fullPath2(originalNode), "clonedParent", fullPath2(clonedParent));
|
|
238
|
+
const info = this._context.get(originalNode.nodeId.toString());
|
|
126
239
|
if (info) {
|
|
127
240
|
return info.cloned;
|
|
128
241
|
}
|
|
@@ -166,13 +279,21 @@ function findNonHierarchicalReferences(originalObject) {
|
|
|
166
279
|
references = _remove_unwanted_ref(references);
|
|
167
280
|
return references;
|
|
168
281
|
}
|
|
282
|
+
const findImplementedObject = (cloneInfoArray, ref) => {
|
|
283
|
+
const a = cloneInfoArray.filter((x) => x.original.nodeId.toString() === ref.nodeId.toString());
|
|
284
|
+
if (a.length === 0)
|
|
285
|
+
return null;
|
|
286
|
+
const info = a[0];
|
|
287
|
+
return info;
|
|
288
|
+
};
|
|
169
289
|
function reconstructNonHierarchicalReferences(extraInfo) {
|
|
170
|
-
const
|
|
171
|
-
const findImplementedObject = (ref) => extraInfo_.mapOrgToClone.get(ref.nodeId.toString()) || null;
|
|
290
|
+
const cloneInfoArray = extraInfo.getClonedArray();
|
|
172
291
|
// navigate through original objects to find those that are being references by node that
|
|
173
292
|
// have been cloned .
|
|
174
293
|
// this could be node organized by some FunctionalGroup
|
|
175
|
-
|
|
294
|
+
// istanbul ignore next
|
|
295
|
+
doTrace && traceLog(chalk_1.default.yellow("reconstructNonHierarchicalReferences"));
|
|
296
|
+
for (const { original, cloned } of cloneInfoArray) {
|
|
176
297
|
apply(original, cloned);
|
|
177
298
|
}
|
|
178
299
|
function apply(original, cloned) {
|
|
@@ -183,34 +304,23 @@ function reconstructNonHierarchicalReferences(extraInfo) {
|
|
|
183
304
|
return;
|
|
184
305
|
}
|
|
185
306
|
// istanbul ignore next
|
|
186
|
-
|
|
187
|
-
debugLog(" investigation ", original.browseName.toString(), cloned.nodeClass.toString(), original.nodeClass.toString(), original.nodeId.toString(), cloned.nodeId.toString());
|
|
188
|
-
}
|
|
307
|
+
doTrace && traceLog(" investigation ", "original", fullPath2(original), node_opcua_data_model_1.NodeClass[cloned.nodeClass], fullPath2(cloned));
|
|
189
308
|
for (const ref of originalNonHierarchical) {
|
|
190
|
-
const info = findImplementedObject(ref);
|
|
309
|
+
const info = findImplementedObject(cloneInfoArray, ref);
|
|
310
|
+
if (!info)
|
|
311
|
+
continue;
|
|
191
312
|
// if the object pointed by this reference is also cloned ...
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
referenceType: ref.referenceType
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
// // restore reference
|
|
208
|
-
// cloned.addReference({
|
|
209
|
-
// isForward: false,
|
|
210
|
-
// nodeId: ref.nodeId,
|
|
211
|
-
// referenceType: ref.referenceType
|
|
212
|
-
// });
|
|
213
|
-
}
|
|
313
|
+
const originalDest = info.original;
|
|
314
|
+
const cloneDest = info.cloned;
|
|
315
|
+
// istanbul ignore next
|
|
316
|
+
doTrace &&
|
|
317
|
+
traceLog(" adding reference ", fullPath2(addressSpace.findNode(ref.referenceType)), " from cloned ", fullPath2(cloned), " to cloned ", fullPath2(cloneDest));
|
|
318
|
+
// restore reference
|
|
319
|
+
cloned.addReference({
|
|
320
|
+
isForward: false,
|
|
321
|
+
nodeId: cloneDest.nodeId,
|
|
322
|
+
referenceType: ref.referenceType
|
|
323
|
+
});
|
|
214
324
|
}
|
|
215
325
|
}
|
|
216
326
|
}
|
|
@@ -234,12 +344,12 @@ exports.reconstructNonHierarchicalReferences = reconstructNonHierarchicalReferen
|
|
|
234
344
|
* +-------- Organizes---+
|
|
235
345
|
*/
|
|
236
346
|
function reconstructFunctionalGroupType(extraInfo) {
|
|
237
|
-
const
|
|
347
|
+
const cloneInfoArray = extraInfo.getClonedArray();
|
|
238
348
|
// navigate through original objects to find those that are being organized by some FunctionalGroup
|
|
239
|
-
for (const { original, cloned } of
|
|
349
|
+
for (const { original, cloned } of cloneInfoArray) {
|
|
240
350
|
const organizedByArray = original.findReferencesEx("Organizes", node_opcua_data_model_1.BrowseDirection.Inverse);
|
|
241
351
|
for (const ref of organizedByArray) {
|
|
242
|
-
const info =
|
|
352
|
+
const info = findImplementedObject(cloneInfoArray, ref);
|
|
243
353
|
if (!info)
|
|
244
354
|
continue;
|
|
245
355
|
const folder = info.original;
|
package/dist/clone_helper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone_helper.js","sourceRoot":"","sources":["../source/clone_helper.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clone_helper.js","sourceRoot":"","sources":["../source/clone_helper.ts"],"names":[],"mappings":"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"}
|
package/dist/clone_options.d.ts
CHANGED
|
@@ -16,10 +16,22 @@ export declare const defaultCloneFilter: CloneFilter;
|
|
|
16
16
|
export interface CloneExtraInfo {
|
|
17
17
|
level: number;
|
|
18
18
|
pad(): string;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
pushContext(params: {
|
|
20
|
+
clonedParent: BaseNode;
|
|
21
|
+
originalParent: BaseNode;
|
|
22
|
+
}): void;
|
|
23
|
+
popContext(): void;
|
|
24
|
+
registerClonedObject(params: {
|
|
25
|
+
clonedNode: BaseNode;
|
|
26
|
+
originalNode: BaseNode;
|
|
27
|
+
}): void;
|
|
28
|
+
getCloned(params: {
|
|
29
|
+
originalParent: BaseNode;
|
|
30
|
+
clonedParent: BaseNode;
|
|
31
|
+
originalNode: UAVariable | UAObject | UAMethod;
|
|
32
|
+
}): BaseNode | null;
|
|
21
33
|
}
|
|
22
|
-
export declare const makeDefaultCloneExtraInfo: () => CloneExtraInfo;
|
|
34
|
+
export declare const makeDefaultCloneExtraInfo: (node: UAVariable | UAMethod | UAObject) => CloneExtraInfo;
|
|
23
35
|
export interface CloneOptions {
|
|
24
36
|
namespace: INamespace;
|
|
25
37
|
references?: UAReference[];
|
package/dist/clone_options.js
CHANGED
|
@@ -3,11 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.makeDefaultCloneExtraInfo = exports.defaultCloneFilter = void 0;
|
|
4
4
|
const clone_helper_1 = require("./clone_helper");
|
|
5
5
|
exports.defaultCloneFilter = {
|
|
6
|
-
shouldKeep: () =>
|
|
6
|
+
shouldKeep: (node) => {
|
|
7
|
+
if (node.modellingRule === "OptionalPlaceholder" || node.modellingRule === "MandatoryPlaceholder") {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
return true;
|
|
11
|
+
},
|
|
7
12
|
filterFor(node) {
|
|
8
13
|
return this;
|
|
9
14
|
}
|
|
10
15
|
};
|
|
11
|
-
const makeDefaultCloneExtraInfo = () =>
|
|
16
|
+
const makeDefaultCloneExtraInfo = (node) => {
|
|
17
|
+
const extraInfo = new clone_helper_1.CloneHelper();
|
|
18
|
+
extraInfo.pushContext({ originalParent: node, clonedParent: node });
|
|
19
|
+
return extraInfo;
|
|
20
|
+
};
|
|
12
21
|
exports.makeDefaultCloneExtraInfo = makeDefaultCloneExtraInfo;
|
|
13
22
|
//# sourceMappingURL=clone_options.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone_options.js","sourceRoot":"","sources":["../source/clone_options.ts"],"names":[],"mappings":";;;AAWA,iDAA6C;AAMhC,QAAA,kBAAkB,GAAgB;IAC3C,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"clone_options.js","sourceRoot":"","sources":["../source/clone_options.ts"],"names":[],"mappings":";;;AAWA,iDAA6C;AAMhC,QAAA,kBAAkB,GAAgB;IAC3C,UAAU,EAAE,CAAC,IAAc,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,IAAI,IAAI,CAAC,aAAa,KAAK,sBAAsB,EAAE;YAC/F,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,SAAS,CAAC,IAAc;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAC;AAkBK,MAAM,yBAAyB,GAAG,CAAC,IAAsC,EAAkB,EAAE;IAChG,MAAM,SAAS,GAAG,IAAI,0BAAW,EAAE,CAAC;IACpC,SAAS,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAJW,QAAA,yBAAyB,6BAIpC"}
|
|
@@ -24,7 +24,7 @@ export interface IContinuationPointInfo<T> {
|
|
|
24
24
|
statusCode: StatusCode;
|
|
25
25
|
}
|
|
26
26
|
export interface ContinuationData {
|
|
27
|
-
continuationPoint
|
|
27
|
+
continuationPoint?: ContinuationPoint | null;
|
|
28
28
|
releaseContinuationPoints?: boolean;
|
|
29
29
|
index?: number;
|
|
30
30
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-opcua-address-space-base",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.107.0",
|
|
4
4
|
"description": "pure nodejs OPCUA SDK - module address-space-base",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"node-opcua-extension-object": "2.105.0",
|
|
28
28
|
"node-opcua-nodeid": "2.105.0",
|
|
29
29
|
"node-opcua-numeric-range": "2.105.0",
|
|
30
|
-
"node-opcua-schemas": "2.
|
|
30
|
+
"node-opcua-schemas": "2.107.0",
|
|
31
31
|
"node-opcua-status-code": "2.105.0",
|
|
32
|
-
"node-opcua-types": "2.
|
|
32
|
+
"node-opcua-types": "2.107.0",
|
|
33
33
|
"node-opcua-variant": "2.105.0"
|
|
34
34
|
},
|
|
35
35
|
"author": "Etienne Rossignon",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"internet of things"
|
|
48
48
|
],
|
|
49
49
|
"homepage": "http://node-opcua.github.io/",
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "df5c9168eea0d1a521603d181fa66ace7649e79e",
|
|
51
51
|
"files": [
|
|
52
52
|
"dist",
|
|
53
53
|
"source"
|
package/source/clone_helper.ts
CHANGED
|
@@ -1,23 +1,85 @@
|
|
|
1
1
|
import { assert } from "node-opcua-assert";
|
|
2
|
-
import { checkDebugFlag, make_debugLog, make_warningLog } from "node-opcua-debug";
|
|
2
|
+
import { checkDebugFlag, make_debugLog, make_errorLog, make_warningLog } from "node-opcua-debug";
|
|
3
3
|
import { BrowseDirection, NodeClass, QualifiedName } from "node-opcua-data-model";
|
|
4
|
+
import { makeNodeId, sameNodeId } from "node-opcua-nodeid";
|
|
5
|
+
import { ReferenceTypeIds } from "node-opcua-constants";
|
|
6
|
+
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
|
|
4
9
|
import { UAObject } from "./ua_object";
|
|
5
10
|
import { UAVariable } from "./ua_variable";
|
|
6
11
|
import { UAMethod } from "./ua_method";
|
|
7
12
|
import { UAObjectType } from "./ua_object_type";
|
|
8
13
|
import { UAVariableType } from "./ua_variable_type";
|
|
9
14
|
import { BaseNode } from "./base_node";
|
|
10
|
-
import { makeNodeId, sameNodeId } from "node-opcua-nodeid";
|
|
11
|
-
import { ReferenceTypeIds } from "node-opcua-constants";
|
|
12
15
|
import { UAReference } from "./ua_reference";
|
|
13
16
|
import { IAddressSpace } from "./address_space";
|
|
14
17
|
|
|
15
|
-
const debugLog = make_debugLog("CLONE");
|
|
16
|
-
const doDebug = checkDebugFlag("CLONE");
|
|
17
18
|
const warningLog = make_warningLog("CLONE");
|
|
18
19
|
|
|
20
|
+
const errorLog = make_errorLog(__filename);
|
|
21
|
+
const doTrace = checkDebugFlag("INSTANTIATE");
|
|
22
|
+
const traceLog = errorLog;
|
|
23
|
+
|
|
19
24
|
type UAConcrete = UAVariable | UAObject | UAMethod;
|
|
20
25
|
|
|
26
|
+
// istanbul ignore next
|
|
27
|
+
/** @private */
|
|
28
|
+
export function fullPath(node: BaseNode): string {
|
|
29
|
+
const browseName = node.browseName.toString();
|
|
30
|
+
|
|
31
|
+
const parent = node.findReferencesExAsObject("Aggregates", BrowseDirection.Inverse)[0];
|
|
32
|
+
if (parent) {
|
|
33
|
+
return fullPath(parent) + "/" + browseName;
|
|
34
|
+
}
|
|
35
|
+
const containingFolder = node.findReferencesExAsObject("Organizes", BrowseDirection.Inverse)[0];
|
|
36
|
+
if (containingFolder) {
|
|
37
|
+
return fullPath(containingFolder) + "@" + browseName;
|
|
38
|
+
}
|
|
39
|
+
return browseName;
|
|
40
|
+
}
|
|
41
|
+
// istanbul ignore next
|
|
42
|
+
/** @private */
|
|
43
|
+
export function fullPath2(node: BaseNode): string {
|
|
44
|
+
return fullPath(node) + " (" + node.nodeId.toString() + ")";
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// istanbul ignore next
|
|
48
|
+
/** @private */
|
|
49
|
+
export function exploreNode(node: BaseNode) {
|
|
50
|
+
const f = (n: BaseNode) => {
|
|
51
|
+
return `${n.browseName.toString()} (${n.nodeId.toString()})${n.modellingRule ? " - " + n.modellingRule : ""}`;
|
|
52
|
+
};
|
|
53
|
+
const r = (r: any) => {
|
|
54
|
+
const ref = node.addressSpace.findNode(r);
|
|
55
|
+
if (!ref) return `${r.nodeId.toString()} (unknown)`;
|
|
56
|
+
return ref?.browseName.toString() + " " + ref!.nodeId.toString();
|
|
57
|
+
};
|
|
58
|
+
const map = new Set();
|
|
59
|
+
const _explore = (node: BaseNode, pad: string) => {
|
|
60
|
+
const a = node.findReferencesEx("Aggregates", BrowseDirection.Forward);
|
|
61
|
+
const b = node.findReferencesEx("Organizes", BrowseDirection.Forward);
|
|
62
|
+
|
|
63
|
+
for (const ref of [...a, ...b]) {
|
|
64
|
+
const alreadyVisited = map.has(ref.nodeId.toString());
|
|
65
|
+
traceLog(
|
|
66
|
+
pad,
|
|
67
|
+
" +-- ",
|
|
68
|
+
r(ref.referenceType).padEnd(20),
|
|
69
|
+
"-->",
|
|
70
|
+
f(ref.node!).padEnd(10),
|
|
71
|
+
alreadyVisited ? " (already visited)" : ""
|
|
72
|
+
);
|
|
73
|
+
if (alreadyVisited) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
map.add(ref.nodeId.toString());
|
|
77
|
+
_explore(ref.node!, pad + " ");
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
traceLog("exploring ", f(node));
|
|
81
|
+
_explore(node, " ");
|
|
82
|
+
}
|
|
21
83
|
//
|
|
22
84
|
// case 1:
|
|
23
85
|
// /-----------------------------\
|
|
@@ -42,7 +104,7 @@ type UAConcrete = UAVariable | UAObject | UAMethod;
|
|
|
42
104
|
// \-----------------------------/
|
|
43
105
|
// ^ |
|
|
44
106
|
// | | +----------+
|
|
45
|
-
// | +-------| Folder1
|
|
107
|
+
// | +-------| Folder1 |
|
|
46
108
|
// | +----------+
|
|
47
109
|
// | |
|
|
48
110
|
// | +--------------|- (EnabledState) (shadow element)
|
|
@@ -52,7 +114,7 @@ type UAConcrete = UAVariable | UAObject | UAMethod;
|
|
|
52
114
|
// \-----------------------------/
|
|
53
115
|
// |
|
|
54
116
|
// | | +----------+
|
|
55
|
-
// | +-------| Folder1
|
|
117
|
+
// | +-------| Folder1 |
|
|
56
118
|
// | +----------+
|
|
57
119
|
// | |
|
|
58
120
|
// | +--------------|- (EnabledState)
|
|
@@ -113,43 +175,141 @@ function followPath(node: BaseNode, path: QualifiedName[]): UAConcrete | null {
|
|
|
113
175
|
return current as UAConcrete;
|
|
114
176
|
}
|
|
115
177
|
|
|
178
|
+
type Context = Map<string, CloneInfo>;
|
|
179
|
+
|
|
116
180
|
export class CloneHelper {
|
|
117
181
|
public level = 0;
|
|
118
|
-
private
|
|
119
|
-
|
|
182
|
+
private _context: Context | null = null;
|
|
183
|
+
private _contextStack: Context[] = [];
|
|
184
|
+
private readonly mapTypeInstanceChildren: Map<string, Map<string, CloneInfo>> = new Map();
|
|
120
185
|
public pad(): string {
|
|
121
186
|
return " ".padEnd(this.level * 2, " ");
|
|
122
187
|
}
|
|
188
|
+
|
|
189
|
+
public getClonedArray() {
|
|
190
|
+
const result: CloneInfo[] = [];
|
|
191
|
+
for (const map of this.mapTypeInstanceChildren.values()) {
|
|
192
|
+
for (const cloneInfo of map.values()) {
|
|
193
|
+
result.push(cloneInfo);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
public pushContext<
|
|
200
|
+
TO extends UAObject | UAVariable | UAMethod | UAObjectType | UAVariableType,
|
|
201
|
+
TC extends UAObject | UAVariable | UAMethod
|
|
202
|
+
>({ clonedParent, originalParent }: { clonedParent: TC; originalParent: TO }): void {
|
|
203
|
+
// istanbul ignore next
|
|
204
|
+
doTrace &&
|
|
205
|
+
traceLog(
|
|
206
|
+
chalk.yellow("push context: "),
|
|
207
|
+
"original parent = ",
|
|
208
|
+
fullPath2(originalParent),
|
|
209
|
+
"cloned parent =",
|
|
210
|
+
fullPath2(clonedParent)
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
const typeInstance = originalParent.nodeId.toString() + clonedParent.nodeId.toString();
|
|
214
|
+
|
|
215
|
+
// istanbul ignore next
|
|
216
|
+
doTrace && traceLog("typeInstance (1) = ", typeInstance, fullPath2(originalParent), fullPath2(clonedParent));
|
|
217
|
+
|
|
218
|
+
let a = this.mapTypeInstanceChildren.get(typeInstance);
|
|
219
|
+
if (a) {
|
|
220
|
+
throw new Error("Internal Error");
|
|
221
|
+
}
|
|
222
|
+
a = new Map<string, CloneInfo>();
|
|
223
|
+
this.mapTypeInstanceChildren.set(typeInstance, a);
|
|
224
|
+
|
|
225
|
+
if (this._context) {
|
|
226
|
+
this._contextStack.push(this._context);
|
|
227
|
+
}
|
|
228
|
+
this._context = a;
|
|
229
|
+
}
|
|
230
|
+
public popContext() {
|
|
231
|
+
assert(this._contextStack.length > 0);
|
|
232
|
+
this._context = this._contextStack.pop()!;
|
|
233
|
+
}
|
|
123
234
|
public registerClonedObject<
|
|
124
235
|
TO extends UAObject | UAVariable | UAMethod | UAObjectType | UAVariableType,
|
|
125
236
|
TC extends UAObject | UAVariable | UAMethod
|
|
126
|
-
>(clonedNode: TC
|
|
127
|
-
this.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
237
|
+
>({ clonedNode, originalNode }: { clonedNode: TC; originalNode: TO }): void {
|
|
238
|
+
if (!this._context) {
|
|
239
|
+
this.pushContext({ clonedParent: clonedNode, originalParent: originalNode });
|
|
240
|
+
}
|
|
241
|
+
// istanbul ignore next
|
|
242
|
+
doTrace &&
|
|
243
|
+
traceLog(
|
|
244
|
+
chalk.yellow("registerClonedObject"),
|
|
245
|
+
"originalNode = ",
|
|
246
|
+
fullPath2(originalNode),
|
|
247
|
+
"clonedNode =",
|
|
248
|
+
fullPath2(clonedNode)
|
|
249
|
+
);
|
|
131
250
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
251
|
+
const insertShadow = (map: Map<string, CloneInfo>) => {
|
|
252
|
+
const { parentType, path } = _get_parent_type_and_path(originalNode);
|
|
253
|
+
|
|
254
|
+
if (parentType) {
|
|
255
|
+
let base = parentType.subtypeOfObj;
|
|
256
|
+
while (base) {
|
|
257
|
+
const shadowChild = followPath(base, path);
|
|
258
|
+
if (shadowChild) {
|
|
259
|
+
// istanbul ignore next
|
|
260
|
+
doTrace && traceLog("shadowChild = ", fullPath2(shadowChild));
|
|
261
|
+
map.set(shadowChild.nodeId.toString(), {
|
|
262
|
+
cloned: clonedNode,
|
|
263
|
+
original: shadowChild
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
base = base.subtypeOfObj;
|
|
144
267
|
}
|
|
145
|
-
base = base.subtypeOfObj;
|
|
146
268
|
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
269
|
+
};
|
|
149
270
|
// find subTypeOf
|
|
271
|
+
|
|
272
|
+
if (!this._context) {
|
|
273
|
+
throw new Error("internal error: Cannot find context");
|
|
274
|
+
}
|
|
275
|
+
// also create [Type+Instance] map
|
|
276
|
+
// to do so we need to find the TypeDefinition of the originalNode
|
|
277
|
+
this._context.set(originalNode.nodeId.toString(), {
|
|
278
|
+
cloned: clonedNode,
|
|
279
|
+
original: originalNode
|
|
280
|
+
});
|
|
281
|
+
insertShadow(this._context);
|
|
150
282
|
}
|
|
151
|
-
public getCloned(
|
|
152
|
-
|
|
283
|
+
public getCloned({
|
|
284
|
+
originalParent,
|
|
285
|
+
clonedParent,
|
|
286
|
+
originalNode
|
|
287
|
+
}: {
|
|
288
|
+
originalParent: BaseNode;
|
|
289
|
+
clonedParent: BaseNode;
|
|
290
|
+
originalNode: UAVariable | UAObject;
|
|
291
|
+
}): UAObject | UAVariable | UAMethod | null {
|
|
292
|
+
//
|
|
293
|
+
// Type Instance
|
|
294
|
+
// +-> Folder (A) +-> Folder (A')
|
|
295
|
+
// | | | |
|
|
296
|
+
// | +- Component (B) | +- Component (B')
|
|
297
|
+
// °-> Folder (C) [parentNode] +-> Folder (C') <= [clonedParent]
|
|
298
|
+
// | |
|
|
299
|
+
// +- Component (B again !) [originalNode] +- Component (B again !)
|
|
300
|
+
|
|
301
|
+
// istanbul ignore next
|
|
302
|
+
doTrace &&
|
|
303
|
+
traceLog(
|
|
304
|
+
"typeInstance (3) = originalParent",
|
|
305
|
+
fullPath2(originalParent),
|
|
306
|
+
"originalNode=",
|
|
307
|
+
fullPath2(originalNode),
|
|
308
|
+
"clonedParent",
|
|
309
|
+
fullPath2(clonedParent)
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
const info = this._context!.get(originalNode.nodeId.toString());
|
|
153
313
|
if (info) {
|
|
154
314
|
return info.cloned;
|
|
155
315
|
}
|
|
@@ -208,19 +368,27 @@ function findNonHierarchicalReferences(originalObject: BaseNode): UAReference[]
|
|
|
208
368
|
return references;
|
|
209
369
|
}
|
|
210
370
|
|
|
211
|
-
|
|
212
|
-
const
|
|
371
|
+
const findImplementedObject = (cloneInfoArray: CloneInfo[], ref: UAReference): CloneInfo | null => {
|
|
372
|
+
const a = cloneInfoArray.filter((x) => x.original.nodeId.toString() === ref.nodeId.toString());
|
|
373
|
+
if (a.length === 0) return null;
|
|
374
|
+
const info = a[0];
|
|
375
|
+
return info;
|
|
376
|
+
};
|
|
213
377
|
|
|
214
|
-
|
|
215
|
-
|
|
378
|
+
export function reconstructNonHierarchicalReferences(extraInfo: CloneHelper): void {
|
|
379
|
+
const cloneInfoArray: CloneInfo[] = extraInfo.getClonedArray();
|
|
216
380
|
|
|
217
381
|
// navigate through original objects to find those that are being references by node that
|
|
218
382
|
// have been cloned .
|
|
219
383
|
// this could be node organized by some FunctionalGroup
|
|
220
384
|
|
|
221
|
-
|
|
385
|
+
// istanbul ignore next
|
|
386
|
+
doTrace && traceLog(chalk.yellow("reconstructNonHierarchicalReferences"));
|
|
387
|
+
|
|
388
|
+
for (const { original, cloned } of cloneInfoArray) {
|
|
222
389
|
apply(original, cloned);
|
|
223
390
|
}
|
|
391
|
+
|
|
224
392
|
function apply(original: BaseNode, cloned: BaseNode) {
|
|
225
393
|
const addressSpace = original.addressSpace;
|
|
226
394
|
// find NonHierarchical References on original object
|
|
@@ -231,54 +399,34 @@ export function reconstructNonHierarchicalReferences(extraInfo: CloneHelper): vo
|
|
|
231
399
|
}
|
|
232
400
|
|
|
233
401
|
// istanbul ignore next
|
|
234
|
-
|
|
235
|
-
debugLog(
|
|
236
|
-
" investigation ",
|
|
237
|
-
original.browseName.toString(),
|
|
238
|
-
cloned.nodeClass.toString(),
|
|
239
|
-
original.nodeClass.toString(),
|
|
240
|
-
original.nodeId.toString(),
|
|
241
|
-
cloned.nodeId.toString()
|
|
242
|
-
);
|
|
243
|
-
}
|
|
402
|
+
doTrace && traceLog(" investigation ", "original", fullPath2(original), NodeClass[cloned.nodeClass], fullPath2(cloned));
|
|
244
403
|
|
|
245
404
|
for (const ref of originalNonHierarchical) {
|
|
246
|
-
const info = findImplementedObject(ref);
|
|
405
|
+
const info = findImplementedObject(cloneInfoArray, ref);
|
|
406
|
+
if (!info) continue;
|
|
247
407
|
|
|
248
408
|
// if the object pointed by this reference is also cloned ...
|
|
249
|
-
if (info) {
|
|
250
|
-
const originalDest = info.original;
|
|
251
|
-
const cloneDest = info.cloned;
|
|
252
|
-
|
|
253
|
-
// istanbul ignore next
|
|
254
|
-
if (doDebug) {
|
|
255
|
-
debugLog(
|
|
256
|
-
" adding reference ",
|
|
257
|
-
ref.referenceType,
|
|
258
|
-
addressSpace.findNode(ref.referenceType)!.browseName.toString(),
|
|
259
|
-
" from cloned ",
|
|
260
|
-
cloned.nodeId.toString(),
|
|
261
|
-
cloned.browseName.toString(),
|
|
262
|
-
" to cloned ",
|
|
263
|
-
cloneDest.nodeId.toString(),
|
|
264
|
-
cloneDest.browseName.toString()
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
409
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
410
|
+
const originalDest = info.original;
|
|
411
|
+
const cloneDest = info.cloned;
|
|
412
|
+
|
|
413
|
+
// istanbul ignore next
|
|
414
|
+
doTrace &&
|
|
415
|
+
traceLog(
|
|
416
|
+
" adding reference ",
|
|
417
|
+
fullPath2(addressSpace.findNode(ref.referenceType)!),
|
|
418
|
+
" from cloned ",
|
|
419
|
+
fullPath2(cloned),
|
|
420
|
+
" to cloned ",
|
|
421
|
+
fullPath2(cloneDest)
|
|
422
|
+
);
|
|
423
|
+
|
|
424
|
+
// restore reference
|
|
425
|
+
cloned.addReference({
|
|
426
|
+
isForward: false,
|
|
427
|
+
nodeId: cloneDest.nodeId,
|
|
428
|
+
referenceType: ref.referenceType
|
|
429
|
+
});
|
|
282
430
|
}
|
|
283
431
|
}
|
|
284
432
|
}
|
|
@@ -303,14 +451,13 @@ export function reconstructNonHierarchicalReferences(extraInfo: CloneHelper): vo
|
|
|
303
451
|
* +-------- Organizes---+
|
|
304
452
|
*/
|
|
305
453
|
export function reconstructFunctionalGroupType(extraInfo: CloneHelper) {
|
|
306
|
-
const
|
|
454
|
+
const cloneInfoArray: CloneInfo[] = extraInfo.getClonedArray();
|
|
307
455
|
|
|
308
456
|
// navigate through original objects to find those that are being organized by some FunctionalGroup
|
|
309
|
-
for (const { original, cloned } of
|
|
457
|
+
for (const { original, cloned } of cloneInfoArray) {
|
|
310
458
|
const organizedByArray = original.findReferencesEx("Organizes", BrowseDirection.Inverse);
|
|
311
|
-
|
|
312
459
|
for (const ref of organizedByArray) {
|
|
313
|
-
const info =
|
|
460
|
+
const info = findImplementedObject(cloneInfoArray, ref);
|
|
314
461
|
if (!info) continue;
|
|
315
462
|
|
|
316
463
|
const folder = info.original;
|
package/source/clone_options.ts
CHANGED
|
@@ -16,7 +16,12 @@ export interface CloneFilter {
|
|
|
16
16
|
filterFor(childInstance: UAVariable | UAObject | UAMethod): CloneFilter;
|
|
17
17
|
}
|
|
18
18
|
export const defaultCloneFilter: CloneFilter = {
|
|
19
|
-
shouldKeep: () =>
|
|
19
|
+
shouldKeep: (node: BaseNode) => {
|
|
20
|
+
if (node.modellingRule === "OptionalPlaceholder" || node.modellingRule === "MandatoryPlaceholder") {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
},
|
|
20
25
|
filterFor(node: BaseNode) {
|
|
21
26
|
return this;
|
|
22
27
|
}
|
|
@@ -26,11 +31,23 @@ export interface CloneExtraInfo {
|
|
|
26
31
|
/* */
|
|
27
32
|
level: number;
|
|
28
33
|
pad(): string;
|
|
29
|
-
|
|
30
|
-
|
|
34
|
+
|
|
35
|
+
pushContext(params: { clonedParent: BaseNode; originalParent: BaseNode }): void;
|
|
36
|
+
popContext(): void;
|
|
37
|
+
|
|
38
|
+
registerClonedObject(params: { clonedNode: BaseNode; originalNode: BaseNode }): void;
|
|
39
|
+
getCloned(params: {
|
|
40
|
+
originalParent: BaseNode;
|
|
41
|
+
clonedParent: BaseNode;
|
|
42
|
+
originalNode: UAVariable | UAObject | UAMethod;
|
|
43
|
+
}): BaseNode | null;
|
|
31
44
|
}
|
|
32
45
|
|
|
33
|
-
export const makeDefaultCloneExtraInfo = (): CloneExtraInfo =>
|
|
46
|
+
export const makeDefaultCloneExtraInfo = (node: UAVariable | UAMethod | UAObject): CloneExtraInfo => {
|
|
47
|
+
const extraInfo = new CloneHelper();
|
|
48
|
+
extraInfo.pushContext({ originalParent: node, clonedParent: node });
|
|
49
|
+
return extraInfo;
|
|
50
|
+
};
|
|
34
51
|
|
|
35
52
|
export interface CloneOptions /* extends ConstructNodeIdOptions */ {
|
|
36
53
|
namespace: INamespace;
|
|
@@ -33,7 +33,7 @@ export interface IContinuationPointInfo<T> {
|
|
|
33
33
|
statusCode: StatusCode;
|
|
34
34
|
}
|
|
35
35
|
export interface ContinuationData {
|
|
36
|
-
continuationPoint
|
|
36
|
+
continuationPoint?: ContinuationPoint | null;
|
|
37
37
|
releaseContinuationPoints?: boolean;
|
|
38
38
|
index?: number;
|
|
39
39
|
}
|