node-opcua-address-space 2.86.0 → 2.87.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/source/address_space_ts.d.ts +3 -3
- package/dist/source/address_space_ts.js +3 -3
- package/dist/source/address_space_ts.js.map +1 -1
- package/dist/source/helpers/call_helpers.d.ts +1 -1
- package/dist/source/helpers/multiform_func.d.ts +8 -8
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +1 -0
- package/dist/source/index.js.map +1 -1
- package/dist/source/interfaces/alarms_and_conditions/ua_condition_ex.d.ts +1 -1
- package/dist/source/interfaces/extension_object_constructor.d.ts +1 -1
- package/dist/source/interfaces/state_machine/ua_state_machine_type.d.ts +2 -2
- package/dist/source/loader/generateAddressSpaceRaw.d.ts +2 -2
- package/dist/source/loader/make_xml_extension_object_parser.d.ts +1 -1
- package/dist/source/loader/namespace_post_step.d.ts +1 -1
- package/dist/source/session_context.d.ts +1 -1
- package/dist/src/address_space.js +11 -11
- package/dist/src/address_space.js.map +1 -1
- package/dist/src/apply_condition_refresh.d.ts +1 -1
- package/dist/src/base_node_impl.js +44 -44
- package/dist/src/base_node_impl.js.map +1 -1
- package/dist/src/base_node_private.js +7 -6
- package/dist/src/base_node_private.js.map +1 -1
- package/dist/src/event_data.d.ts +2 -2
- package/dist/src/index_current.d.ts +1 -0
- package/dist/src/index_current.js +1 -0
- package/dist/src/index_current.js.map +1 -1
- package/dist/src/namespace_impl.js +7 -4
- package/dist/src/namespace_impl.js.map +1 -1
- package/dist/src/nodeid_manager.d.ts +8 -8
- package/dist/src/nodeid_manager.js +71 -97
- package/dist/src/nodeid_manager.js.map +1 -1
- package/dist/src/nodeset_tools/construct_namespace_dependency.d.ts +14 -0
- package/dist/src/nodeset_tools/construct_namespace_dependency.js +21 -1
- package/dist/src/nodeset_tools/construct_namespace_dependency.js.map +1 -1
- package/dist/src/nodeset_tools/nodeset_to_xml.d.ts +2 -4
- package/dist/src/nodeset_tools/nodeset_to_xml.js +24 -10
- package/dist/src/nodeset_tools/nodeset_to_xml.js.map +1 -1
- package/dist/src/private_namespace.d.ts +5 -0
- package/dist/src/private_namespace.js +20 -0
- package/dist/src/private_namespace.js.map +1 -0
- package/dist/src/reference_impl.js +6 -6
- package/dist/src/reference_impl.js.map +1 -1
- package/dist/src/tool_isSupertypeOf.d.ts +4 -4
- package/dist/src/ua_data_type_impl.js +12 -12
- package/dist/src/ua_data_type_impl.js.map +1 -1
- package/dist/src/ua_method_impl.js +6 -6
- package/dist/src/ua_method_impl.js.map +1 -1
- package/dist/src/ua_object_impl.js +7 -7
- package/dist/src/ua_object_impl.js.map +1 -1
- package/dist/src/ua_object_type_impl.js +6 -6
- package/dist/src/ua_object_type_impl.js.map +1 -1
- package/dist/src/ua_reference_type_impl.d.ts +1 -1
- package/dist/src/ua_reference_type_impl.js +6 -6
- package/dist/src/ua_reference_type_impl.js.map +1 -1
- package/dist/src/ua_variable_impl.js +10 -10
- package/dist/src/ua_variable_impl.js.map +1 -1
- package/dist/src/ua_variable_type_impl.js +6 -6
- package/dist/src/ua_variable_type_impl.js.map +1 -1
- package/dist/src/ua_view_impl.js +3 -3
- package/dist/src/ua_view_impl.js.map +1 -1
- package/package.json +24 -24
- package/source/index.ts +1 -0
- package/src/base_node_private.ts +52 -48
- package/src/index_current.ts +1 -0
- package/src/namespace_impl.ts +23 -20
- package/src/nodeid_manager.ts +84 -100
- package/src/nodeset_tools/construct_namespace_dependency.ts +30 -9
- package/src/nodeset_tools/nodeset_to_xml.ts +30 -14
- package/src/private_namespace.ts +18 -0
|
@@ -19,7 +19,7 @@ function _constructNamespaceDependency(
|
|
|
19
19
|
// navigate all namespace recursively to
|
|
20
20
|
|
|
21
21
|
function consider(namespaceIndex: number) {
|
|
22
|
-
if (hasHigherPriorityThan(namespaceIndex,namespace.index, priorityTable)) {
|
|
22
|
+
if (hasHigherPriorityThan(namespaceIndex, namespace.index, priorityTable)) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
if (!depMap.has(namespaceIndex)) {
|
|
@@ -48,7 +48,7 @@ function _constructNamespaceDependency(
|
|
|
48
48
|
}
|
|
49
49
|
// istanbul ignore next
|
|
50
50
|
if (dataTypeNode.nodeClass !== NodeClass.DataType) {
|
|
51
|
-
warningLog("exploreDataTypes! ignoring ",dataTypeNode.toString());
|
|
51
|
+
warningLog("exploreDataTypes! ignoring ", dataTypeNode.toString());
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -94,19 +94,33 @@ export function hasHigherPriorityThan(namespaceIndex1: number, namespaceIndex2:
|
|
|
94
94
|
return order1 > order2;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
/**
|
|
98
|
+
*
|
|
99
|
+
* @param namespace
|
|
100
|
+
* @returns the order
|
|
101
|
+
*
|
|
102
|
+
* ---
|
|
103
|
+
* ua, own , di => 0 , 2, 1
|
|
104
|
+
*
|
|
105
|
+
* ---
|
|
106
|
+
* ua, own , di , kitchen , own2, adi => 0 , 2, 3, 1
|
|
107
|
+
*
|
|
108
|
+
* ---
|
|
109
|
+
* ua, own , di , kitchen , own2, adi => 0 , 2, 3, 5, 1
|
|
110
|
+
*/
|
|
97
111
|
export function constructNamespacePriorityTable(namespace: INamespace): number[] {
|
|
98
112
|
|
|
99
113
|
// Namespace 0 will always be 0
|
|
100
114
|
// Namespaces with no requiredModel will be considered as instance namespaces and will added at the end
|
|
101
115
|
// in the same order as they appear,
|
|
102
116
|
// Namespace with requiredModels are considered to be companion specification, so already loaded in the correct order
|
|
103
|
-
|
|
117
|
+
|
|
104
118
|
const addressSpace = namespace.addressSpace;
|
|
105
119
|
const namespaces = addressSpace.getNamespaceArray();
|
|
106
120
|
|
|
107
|
-
const namespaceWithReq = namespaces.filter((n)=> (n.getRequiredModels() !== undefined)
|
|
108
|
-
const namespaceWithoutReq = namespaces.filter((n)=>(n.getRequiredModels() === undefined) && n.index !==0);
|
|
109
|
-
|
|
121
|
+
const namespaceWithReq = namespaces.filter((n) => (n.getRequiredModels() !== undefined) && n.index !== 0);
|
|
122
|
+
const namespaceWithoutReq = namespaces.filter((n) => (n.getRequiredModels() === undefined) && n.index !== 0);
|
|
123
|
+
|
|
110
124
|
const priorityList: number[] = [0];
|
|
111
125
|
let counter = 1;
|
|
112
126
|
for (let i = 0; i < namespaceWithReq.length; i++) {
|
|
@@ -117,10 +131,10 @@ export function constructNamespacePriorityTable(namespace: INamespace): number[]
|
|
|
117
131
|
}
|
|
118
132
|
return priorityList;
|
|
119
133
|
}
|
|
120
|
-
|
|
134
|
+
const doDebug = false;
|
|
121
135
|
export function constructNamespaceDependency(namespace: INamespace, priorityTable?: number[]): INamespace[] {
|
|
122
136
|
const addressSpace = namespace.addressSpace;
|
|
123
|
-
|
|
137
|
+
|
|
124
138
|
priorityTable = priorityTable || constructNamespacePriorityTable(namespace);
|
|
125
139
|
|
|
126
140
|
const dependency: INamespace[] = [];
|
|
@@ -137,5 +151,12 @@ export function constructNamespaceDependency(namespace: INamespace, priorityTabl
|
|
|
137
151
|
|
|
138
152
|
_constructNamespaceDependency(namespace, dependency, depMap, _visitedDataType, priorityTable);
|
|
139
153
|
|
|
140
|
-
|
|
154
|
+
doDebug && console.log("namespace : ", namespace.index, namespace.namespaceUri);
|
|
155
|
+
doDebug && console.log(" ", dependency.map((d)=>d.index + " " + d.namespaceUri).join("\n "));
|
|
156
|
+
|
|
157
|
+
const sorted = dependency.sort((a, b) => priorityTable![a.index] < priorityTable![b.index] ? -1 : 1);
|
|
158
|
+
doDebug && console.log("sorted:")
|
|
159
|
+
doDebug && console.log(" ", sorted.map((d)=>d.index + " " + d.namespaceUri).join("\n "));
|
|
160
|
+
|
|
161
|
+
return sorted;
|
|
141
162
|
}
|
|
@@ -61,6 +61,7 @@ const XMLWriter = require("xml-writer");
|
|
|
61
61
|
const debugLog = make_debugLog(__filename);
|
|
62
62
|
const warningLog = make_warningLog(__filename);
|
|
63
63
|
const errorLog = make_errorLog(__filename);
|
|
64
|
+
const doDebug = false;
|
|
64
65
|
|
|
65
66
|
function _hash(node: BaseNode | UAReference): string {
|
|
66
67
|
return node.nodeId.toString();
|
|
@@ -1036,11 +1037,11 @@ function dumpUAVariableType(xw: XmlWriter, node: UAVariableType) {
|
|
|
1036
1037
|
// throw new Error(" cannot find datatype " + node.dataType);
|
|
1037
1038
|
console.log(
|
|
1038
1039
|
" cannot find datatype " +
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1040
|
+
node.dataType +
|
|
1041
|
+
" for node " +
|
|
1042
|
+
node.browseName.toString() +
|
|
1043
|
+
" id =" +
|
|
1044
|
+
node.nodeId.toString()
|
|
1044
1045
|
);
|
|
1045
1046
|
} else {
|
|
1046
1047
|
const dataTypeName = b(xw, resolveDataTypeName(addressSpace, dataTypeNode.nodeId));
|
|
@@ -1247,10 +1248,21 @@ function writeAliases(xw: XmlWriter, aliases: Record<string, NodeIdString>) {
|
|
|
1247
1248
|
xw.endElement();
|
|
1248
1249
|
}
|
|
1249
1250
|
|
|
1250
|
-
|
|
1251
|
+
function constructNamespaceTranslationTable(dependency: INamespace[], exportedNamespace: INamespace): ITranslationTable {
|
|
1252
|
+
|
|
1251
1253
|
const translationTable: ITranslationTable = {};
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
+
assert(dependency[0].namespaceUri === "http://opcfoundation.org/UA/");
|
|
1255
|
+
|
|
1256
|
+
let counter = 0;
|
|
1257
|
+
translationTable[dependency[0].index] = counter++;
|
|
1258
|
+
//
|
|
1259
|
+
if (exportedNamespace) {
|
|
1260
|
+
translationTable[exportedNamespace.index] = counter++;
|
|
1261
|
+
}
|
|
1262
|
+
for (let i = 1; i < dependency.length; i++) {
|
|
1263
|
+
const dep = dependency[i];
|
|
1264
|
+
if (exportedNamespace && exportedNamespace === dep) { continue; }
|
|
1265
|
+
translationTable[dep.index] = counter++;
|
|
1254
1266
|
}
|
|
1255
1267
|
return translationTable;
|
|
1256
1268
|
}
|
|
@@ -1342,7 +1354,7 @@ NamespaceImpl.prototype.toNodeset2XML = function (this: NamespaceImpl) {
|
|
|
1342
1354
|
|
|
1343
1355
|
xw.priorityTable = constructNamespacePriorityTable(this);
|
|
1344
1356
|
const dependency = constructNamespaceDependency(this, xw.priorityTable);
|
|
1345
|
-
const translationTable = constructNamespaceTranslationTable(dependency);
|
|
1357
|
+
const translationTable = constructNamespaceTranslationTable(dependency, this);
|
|
1346
1358
|
xw.translationTable = translationTable;
|
|
1347
1359
|
|
|
1348
1360
|
xw.startDocument({ encoding: "utf-8", version: "1.0" });
|
|
@@ -1372,12 +1384,17 @@ NamespaceImpl.prototype.toNodeset2XML = function (this: NamespaceImpl) {
|
|
|
1372
1384
|
// xx xw.writeAttribute("LastModified", (new Date()).toISOString());
|
|
1373
1385
|
|
|
1374
1386
|
// ------------- INamespace Uris
|
|
1387
|
+
initXmlWriterEx(xw, namespacesMap, namespaceArray);
|
|
1388
|
+
|
|
1375
1389
|
xw.startElement("NamespaceUris");
|
|
1376
1390
|
|
|
1377
|
-
|
|
1391
|
+
// let's sort the dependencies in the same order as the translation table
|
|
1392
|
+
const sortedDependencies = dependency.sort((a,b)=> translationTable[a.index] > translationTable[b.index] ? 1: -1);
|
|
1393
|
+
|
|
1394
|
+
doDebug && console.log(sortedDependencies.map((a)=>a.index + " + "+ a.namespaceUri).join("\n"));
|
|
1395
|
+
doDebug && console.log("translation table ", translationTable);
|
|
1378
1396
|
|
|
1379
|
-
|
|
1380
|
-
for (const depend of dependency) {
|
|
1397
|
+
for (const depend of sortedDependencies) {
|
|
1381
1398
|
if (depend.index === 0) {
|
|
1382
1399
|
continue; // ignore namespace 0
|
|
1383
1400
|
}
|
|
@@ -1385,7 +1402,6 @@ NamespaceImpl.prototype.toNodeset2XML = function (this: NamespaceImpl) {
|
|
|
1385
1402
|
xw.text(depend.namespaceUri);
|
|
1386
1403
|
xw.endElement();
|
|
1387
1404
|
}
|
|
1388
|
-
|
|
1389
1405
|
xw.endElement();
|
|
1390
1406
|
|
|
1391
1407
|
// ------------- INamespace Uris
|
|
@@ -1395,7 +1411,7 @@ NamespaceImpl.prototype.toNodeset2XML = function (this: NamespaceImpl) {
|
|
|
1395
1411
|
xw.writeAttribute("ModelUri", this.namespaceUri);
|
|
1396
1412
|
xw.writeAttribute("Version", this.version);
|
|
1397
1413
|
xw.writeAttribute("PublicationDate", this.publicationDate.toISOString());
|
|
1398
|
-
for (const depend of
|
|
1414
|
+
for (const depend of sortedDependencies) {
|
|
1399
1415
|
if (depend.index === this.index) {
|
|
1400
1416
|
continue; // ignore our namespace 0
|
|
1401
1417
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { Namespace } from "../source/namespace";
|
|
4
|
+
import { NodeEntry1, NodeIdManager } from "./nodeid_manager";
|
|
5
|
+
|
|
6
|
+
export function getNodeIdManager(ns: Namespace): NodeIdManager {
|
|
7
|
+
const nodeIdManager = (ns as any)._nodeIdManager as NodeIdManager;
|
|
8
|
+
return nodeIdManager;
|
|
9
|
+
}
|
|
10
|
+
export function setSymbols(ns: Namespace, symbols: NodeEntry1[]) {
|
|
11
|
+
const nodeIdManager = getNodeIdManager(ns);
|
|
12
|
+
(ns.addressSpace.getOwnNamespace() as any).registerSymbolicNames = true;
|
|
13
|
+
nodeIdManager.setSymbols(symbols);
|
|
14
|
+
}
|
|
15
|
+
export function getSymbols(ns: Namespace): NodeEntry1[] {
|
|
16
|
+
const nodeIdManager = getNodeIdManager(ns);
|
|
17
|
+
return nodeIdManager?.getSymbols() || [];
|
|
18
|
+
}
|