node-opcua-address-space 2.78.0 → 2.79.1

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 (49) hide show
  1. package/dist/source/namespace_data_access.d.ts +2 -2
  2. package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.d.ts +1 -1
  3. package/dist/src/base_node_impl.d.ts +1 -0
  4. package/dist/src/base_node_impl.js +30 -3
  5. package/dist/src/base_node_impl.js.map +1 -1
  6. package/dist/src/historical_access/address_space_historical_data_node.d.ts +1 -1
  7. package/dist/src/historical_access/address_space_historical_data_node.js +46 -24
  8. package/dist/src/historical_access/address_space_historical_data_node.js.map +1 -1
  9. package/dist/src/nodeset_tools/nodeset_to_xml.js +45 -9
  10. package/dist/src/nodeset_tools/nodeset_to_xml.js.map +1 -1
  11. package/dist/src/ua_method_impl.d.ts +2 -1
  12. package/dist/src/ua_method_impl.js +9 -1
  13. package/dist/src/ua_method_impl.js.map +1 -1
  14. package/dist/src/ua_variable_impl.d.ts +5 -0
  15. package/dist/src/ua_variable_impl.js +32 -2
  16. package/dist/src/ua_variable_impl.js.map +1 -1
  17. package/package.json +26 -26
  18. package/source/namespace_data_access.ts +2 -2
  19. package/src/alarms_and_conditions/ua_limit_alarm_impl.ts +1 -1
  20. package/src/base_node_impl.ts +34 -3
  21. package/src/historical_access/address_space_historical_data_node.ts +19 -4
  22. package/src/nodeset_tools/nodeset_to_xml.ts +57 -13
  23. package/src/ua_method_impl.ts +9 -3
  24. package/src/ua_variable_impl.ts +36 -4
  25. package/test_helpers/test_fixtures/mini.Node.Set2.xml +178 -0
  26. package/dist/source/helpers/check_event_clause.d.ts +0 -17
  27. package/dist/source/helpers/check_event_clause.js +0 -53
  28. package/dist/source/helpers/check_event_clause.js.map +0 -1
  29. package/dist/src/alarms_and_conditions/check_where_clause.d.ts +0 -4
  30. package/dist/src/alarms_and_conditions/check_where_clause.js +0 -110
  31. package/dist/src/alarms_and_conditions/check_where_clause.js.map +0 -1
  32. package/dist/src/alarms_and_conditions/condition_info.d.ts +0 -27
  33. package/dist/src/alarms_and_conditions/condition_info.js +0 -55
  34. package/dist/src/alarms_and_conditions/condition_info.js.map +0 -1
  35. package/dist/src/alarms_and_conditions/condition_snapshot.d.ts +0 -233
  36. package/dist/src/alarms_and_conditions/condition_snapshot.js +0 -667
  37. package/dist/src/alarms_and_conditions/condition_snapshot.js.map +0 -1
  38. package/dist/src/alarms_and_conditions/extract_event_fields.d.ts +0 -10
  39. package/dist/src/alarms_and_conditions/extract_event_fields.js +0 -90
  40. package/dist/src/alarms_and_conditions/extract_event_fields.js.map +0 -1
  41. package/dist/src/data_access/ua_multistate_value_discrete.d.ts +0 -51
  42. package/dist/src/data_access/ua_multistate_value_discrete.js +0 -250
  43. package/dist/src/data_access/ua_multistate_value_discrete.js.map +0 -1
  44. package/dist/src/data_access/ua_two_state_discrete.d.ts +0 -25
  45. package/dist/src/data_access/ua_two_state_discrete.js +0 -154
  46. package/dist/src/data_access/ua_two_state_discrete.js.map +0 -1
  47. package/dist/src/nodeset_tools/typedictionary_to_xml.d.ts +0 -2
  48. package/dist/src/nodeset_tools/typedictionary_to_xml.js +0 -155
  49. package/dist/src/nodeset_tools/typedictionary_to_xml.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import { NamespacePrivate } from "../namespace_private";
2
- export declare function dumpToBSD(namespace: NamespacePrivate): void;
@@ -1,155 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dumpToBSD = void 0;
4
- const node_opcua_assert_1 = require("node-opcua-assert");
5
- const node_opcua_types_1 = require("node-opcua-types");
6
- const node_opcua_nodeid_1 = require("node-opcua-nodeid");
7
- const construct_namespace_dependency_1 = require("./construct_namespace_dependency");
8
- // tslint:disable-next-line: no-var-requires
9
- const XMLWriter = require("xml-writer");
10
- function dumpEnumeratedType(xw, e, name) {
11
- xw.startElement("opc:EnumeratedType");
12
- xw.writeAttribute("Name", name);
13
- xw.writeAttribute("LengthInBits", "32");
14
- for (const f of e.fields || []) {
15
- xw.startElement("opc:EnumeratedValue");
16
- xw.writeAttribute("Name", f.name);
17
- (0, node_opcua_assert_1.assert)(f.value[0] === 0, "unsupported 64 bit value !");
18
- xw.writeAttribute("Value", f.value[1].toString());
19
- xw.endElement();
20
- }
21
- xw.endElement();
22
- }
23
- function buildXmlName(addressSpace, map, nodeId) {
24
- if (node_opcua_nodeid_1.NodeId.sameNodeId(nodeId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
25
- return "ua:ExtensionObject";
26
- }
27
- const node = addressSpace.findNode(nodeId);
28
- // istanbul ignore next
29
- if (!node) {
30
- throw new Error("Cannot find Node for" + (nodeId === null || nodeId === void 0 ? void 0 : nodeId.toString()));
31
- }
32
- const typeName = node.browseName.name;
33
- const prefix = node.nodeId.namespace === 0 ? (node.nodeId.value <= 15 ? "opc" : "ua") : map[node.nodeId.namespace];
34
- return prefix + ":" + (typeName === "Structure" && prefix === "ua" ? "ExtensionObject" : typeName);
35
- }
36
- // eslint-disable-next-line max-statements
37
- function dumpDataTypeStructure(xw, addressSpace, map, structureDefinition, structureDefinitionBase, name, doc) {
38
- var _a, _b;
39
- xw.startElement("opc:StructuredType");
40
- xw.writeAttribute("Name", name);
41
- xw.writeAttribute("BaseType", buildXmlName(addressSpace, map, structureDefinition.baseDataType));
42
- if (doc) {
43
- xw.startElement("opc:Documentation");
44
- xw.text(doc);
45
- xw.endElement();
46
- }
47
- const fields = structureDefinition.fields || [];
48
- // get base class
49
- const nbFieldsInBase = structureDefinitionBase ? ((_a = structureDefinitionBase.fields) === null || _a === void 0 ? void 0 : _a.length) || 0 : 0;
50
- let optionalsCount = 0;
51
- for (let index = nbFieldsInBase; index < fields.length; index++) {
52
- const f = fields[index];
53
- if (f.isOptional) {
54
- xw.startElement("opc:Field");
55
- xw.writeAttribute("Name", f.name + "Specified");
56
- xw.writeAttribute("TypeName", "opc:Bit");
57
- xw.endElement();
58
- optionalsCount++;
59
- }
60
- }
61
- // istanbul ignore next
62
- if (optionalsCount >= 32) {
63
- throw new Error("Too many optionals fields");
64
- }
65
- if (optionalsCount) {
66
- /*
67
- const padding = optionalsCount <= 8
68
- ? (8 - optionalsCount)
69
- : (optionalsCount <= 16)
70
- ? (16 - optionalsCount)
71
- : (32 - optionalsCount)
72
- ;
73
- */
74
- const padding = 32 - optionalsCount;
75
- if (padding !== 0) {
76
- xw.startElement("opc:Field");
77
- xw.writeAttribute("Name", "Reserved1");
78
- xw.writeAttribute("TypeName", "opc:Bit");
79
- xw.writeAttribute("Length", padding.toString());
80
- xw.endElement();
81
- }
82
- }
83
- for (let index = nbFieldsInBase; index < fields.length; index++) {
84
- const f = fields[index];
85
- const isArray = f.valueRank > 0 && ((_b = f.arrayDimensions) === null || _b === void 0 ? void 0 : _b.length);
86
- if (isArray) {
87
- xw.startElement("opc:Field");
88
- xw.writeAttribute("Name", "NoOf" + f.name);
89
- xw.writeAttribute("TypeName", "opc:Int32");
90
- if (f.isOptional) {
91
- xw.writeAttribute("SwitchField", f.name + "Specified");
92
- }
93
- xw.endElement();
94
- }
95
- xw.startElement("opc:Field");
96
- xw.writeAttribute("Name", f.name);
97
- const typeName = buildXmlName(addressSpace, map, f.dataType);
98
- xw.writeAttribute("TypeName", typeName);
99
- if (isArray) {
100
- xw.writeAttribute("LengthField", "NoOf" + f.name);
101
- }
102
- if (f.isOptional) {
103
- xw.writeAttribute("SwitchField", f.name + "Specified");
104
- }
105
- xw.endElement();
106
- }
107
- xw.endElement();
108
- }
109
- function dumpDataTypeToBSD(xw, dataType, map) {
110
- var _a;
111
- const addressSpace = dataType.addressSpace;
112
- const name = dataType.browseName.name;
113
- const definition = dataType.getDefinition();
114
- if (definition instanceof node_opcua_types_1.StructureDefinition) {
115
- const structureDefinitionBase = (_a = dataType.subtypeOfObj) === null || _a === void 0 ? void 0 : _a.getStructureDefinition();
116
- dumpDataTypeStructure(xw, addressSpace, map, definition, structureDefinitionBase, name);
117
- }
118
- if (definition instanceof node_opcua_types_1.EnumDefinition) {
119
- dumpEnumeratedType(xw, definition, name);
120
- }
121
- }
122
- function shortcut(namespace) {
123
- return "n" + namespace.index;
124
- }
125
- function dumpToBSD(namespace) {
126
- const dependency = (0, construct_namespace_dependency_1.constructNamespaceDependency)(namespace);
127
- const addressSpace = namespace.addressSpace;
128
- const xw = new XMLWriter(true);
129
- xw.startDocument({ encoding: "utf-8", version: "1.0" });
130
- xw.startElement("opc:TypeDictionary");
131
- xw.writeAttribute("xmlns:opc", "http://opcfoundation.org/BinarySchema/");
132
- xw.writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
133
- xw.writeAttribute("xmlns:ua", "http://opcfoundation.org/UA/");
134
- const map = {};
135
- for (const dependantNamespace of dependency) {
136
- const namespaceIndex = dependantNamespace.index;
137
- if (namespaceIndex === 0) {
138
- //|| namespaceIndex === namespace.index) {
139
- continue;
140
- }
141
- const ns = shortcut(dependantNamespace);
142
- map[namespaceIndex] = ns;
143
- xw.writeAttribute(`xmlns:${ns}`, dependantNamespace.namespaceUri);
144
- }
145
- xw.writeAttribute("DefaultByteOrder", "LittleEndian");
146
- xw.writeAttribute("TargetNamespace", namespace.namespaceUri);
147
- for (const dataType of namespace._dataTypeIterator()) {
148
- dumpDataTypeToBSD(xw, dataType, map);
149
- }
150
- xw.endElement();
151
- xw.endDocument();
152
- return xw.toString();
153
- }
154
- exports.dumpToBSD = dumpToBSD;
155
- //# sourceMappingURL=typedictionary_to_xml.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typedictionary_to_xml.js","sourceRoot":"","sources":["../../../src/nodeset_tools/typedictionary_to_xml.ts"],"names":[],"mappings":"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"}