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.
Files changed (69) hide show
  1. package/dist/source/address_space_ts.d.ts +3 -3
  2. package/dist/source/address_space_ts.js +3 -3
  3. package/dist/source/address_space_ts.js.map +1 -1
  4. package/dist/source/helpers/call_helpers.d.ts +1 -1
  5. package/dist/source/helpers/multiform_func.d.ts +8 -8
  6. package/dist/source/index.d.ts +1 -0
  7. package/dist/source/index.js +1 -0
  8. package/dist/source/index.js.map +1 -1
  9. package/dist/source/interfaces/alarms_and_conditions/ua_condition_ex.d.ts +1 -1
  10. package/dist/source/interfaces/extension_object_constructor.d.ts +1 -1
  11. package/dist/source/interfaces/state_machine/ua_state_machine_type.d.ts +2 -2
  12. package/dist/source/loader/generateAddressSpaceRaw.d.ts +2 -2
  13. package/dist/source/loader/make_xml_extension_object_parser.d.ts +1 -1
  14. package/dist/source/loader/namespace_post_step.d.ts +1 -1
  15. package/dist/source/session_context.d.ts +1 -1
  16. package/dist/src/address_space.js +11 -11
  17. package/dist/src/address_space.js.map +1 -1
  18. package/dist/src/apply_condition_refresh.d.ts +1 -1
  19. package/dist/src/base_node_impl.js +44 -44
  20. package/dist/src/base_node_impl.js.map +1 -1
  21. package/dist/src/base_node_private.js +7 -6
  22. package/dist/src/base_node_private.js.map +1 -1
  23. package/dist/src/event_data.d.ts +2 -2
  24. package/dist/src/index_current.d.ts +1 -0
  25. package/dist/src/index_current.js +1 -0
  26. package/dist/src/index_current.js.map +1 -1
  27. package/dist/src/namespace_impl.js +7 -4
  28. package/dist/src/namespace_impl.js.map +1 -1
  29. package/dist/src/nodeid_manager.d.ts +8 -8
  30. package/dist/src/nodeid_manager.js +71 -97
  31. package/dist/src/nodeid_manager.js.map +1 -1
  32. package/dist/src/nodeset_tools/construct_namespace_dependency.d.ts +14 -0
  33. package/dist/src/nodeset_tools/construct_namespace_dependency.js +21 -1
  34. package/dist/src/nodeset_tools/construct_namespace_dependency.js.map +1 -1
  35. package/dist/src/nodeset_tools/nodeset_to_xml.d.ts +2 -4
  36. package/dist/src/nodeset_tools/nodeset_to_xml.js +24 -10
  37. package/dist/src/nodeset_tools/nodeset_to_xml.js.map +1 -1
  38. package/dist/src/private_namespace.d.ts +5 -0
  39. package/dist/src/private_namespace.js +20 -0
  40. package/dist/src/private_namespace.js.map +1 -0
  41. package/dist/src/reference_impl.js +6 -6
  42. package/dist/src/reference_impl.js.map +1 -1
  43. package/dist/src/tool_isSupertypeOf.d.ts +4 -4
  44. package/dist/src/ua_data_type_impl.js +12 -12
  45. package/dist/src/ua_data_type_impl.js.map +1 -1
  46. package/dist/src/ua_method_impl.js +6 -6
  47. package/dist/src/ua_method_impl.js.map +1 -1
  48. package/dist/src/ua_object_impl.js +7 -7
  49. package/dist/src/ua_object_impl.js.map +1 -1
  50. package/dist/src/ua_object_type_impl.js +6 -6
  51. package/dist/src/ua_object_type_impl.js.map +1 -1
  52. package/dist/src/ua_reference_type_impl.d.ts +1 -1
  53. package/dist/src/ua_reference_type_impl.js +6 -6
  54. package/dist/src/ua_reference_type_impl.js.map +1 -1
  55. package/dist/src/ua_variable_impl.js +10 -10
  56. package/dist/src/ua_variable_impl.js.map +1 -1
  57. package/dist/src/ua_variable_type_impl.js +6 -6
  58. package/dist/src/ua_variable_type_impl.js.map +1 -1
  59. package/dist/src/ua_view_impl.js +3 -3
  60. package/dist/src/ua_view_impl.js.map +1 -1
  61. package/package.json +24 -24
  62. package/source/index.ts +1 -0
  63. package/src/base_node_private.ts +52 -48
  64. package/src/index_current.ts +1 -0
  65. package/src/namespace_impl.ts +23 -20
  66. package/src/nodeid_manager.ts +84 -100
  67. package/src/nodeset_tools/construct_namespace_dependency.ts +30 -9
  68. package/src/nodeset_tools/nodeset_to_xml.ts +30 -14
  69. 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) && n.index !==0);
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
- return dependency;
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
- node.dataType +
1040
- " for node " +
1041
- node.browseName.toString() +
1042
- " id =" +
1043
- node.nodeId.toString()
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
- export function constructNamespaceTranslationTable(dependency: INamespace[]): ITranslationTable {
1251
+ function constructNamespaceTranslationTable(dependency: INamespace[], exportedNamespace: INamespace): ITranslationTable {
1252
+
1251
1253
  const translationTable: ITranslationTable = {};
1252
- for (let i = 0; i < dependency.length; i++) {
1253
- translationTable[dependency[i].index] = i;
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
- initXmlWriterEx(xw, namespacesMap, namespaceArray);
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
- // xx const namespaceArray = namespace.addressSpace.getNamespaceArray();
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 dependency) {
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
+ }