node-opcua-address-space 2.181.1 → 2.182.2

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 (121) hide show
  1. package/api/helpers/ensure_secure_access.ts +53 -2
  2. package/api/index.ts +30 -1
  3. package/api/loader/generateAddressSpaceRaw.ts +44 -139
  4. package/api/loader/load_nodeset2.ts +5 -0
  5. package/api/loader/narrow_instance_datatypes.ts +264 -0
  6. package/api/loader/nodeset_builtin_formats.ts +143 -0
  7. package/api/loader/nodeset_format.ts +153 -0
  8. package/api/loader/nodeset_image.ts +37 -4
  9. package/api/loader/nodeset_image_codec.ts +153 -34
  10. package/api/loader/nodeset_record.ts +26 -2
  11. package/api/loader/nodeset_record_applier.ts +54 -3
  12. package/api/loader/nodeset_records_to_xml.ts +620 -0
  13. package/api/loader/nodeset_source.ts +185 -26
  14. package/api/loader/nodeset_to_image.ts +16 -5
  15. package/api/loader/nodeset_xml_header.ts +119 -0
  16. package/api/loader/nodeset_xml_primitives.ts +209 -0
  17. package/api/loader/nodeset_xml_producer.ts +61 -2
  18. package/api/loader/parsers/variant_parser.ts +9 -0
  19. package/bin/nodeset_equivalence.js +750 -0
  20. package/bin/nodeset_tool_common.js +72 -0
  21. package/bin/opcua-nodeset-image.js +93 -103
  22. package/bin/opcua-nodeset-live.js +139 -0
  23. package/dist/api/helpers/ensure_secure_access.d.ts +20 -0
  24. package/dist/api/helpers/ensure_secure_access.js +39 -0
  25. package/dist/api/helpers/ensure_secure_access.js.map +1 -1
  26. package/dist/api/index.d.ts +7 -2
  27. package/dist/api/index.js +21 -1
  28. package/dist/api/index.js.map +1 -1
  29. package/dist/api/loader/generateAddressSpaceRaw.d.ts +1 -7
  30. package/dist/api/loader/generateAddressSpaceRaw.js +32 -125
  31. package/dist/api/loader/generateAddressSpaceRaw.js.map +1 -1
  32. package/dist/api/loader/load_nodeset2.js +4 -0
  33. package/dist/api/loader/load_nodeset2.js.map +1 -1
  34. package/dist/api/loader/narrow_instance_datatypes.d.ts +30 -0
  35. package/dist/api/loader/narrow_instance_datatypes.js +217 -0
  36. package/dist/api/loader/narrow_instance_datatypes.js.map +1 -0
  37. package/dist/api/loader/nodeset_builtin_formats.d.ts +27 -0
  38. package/dist/api/loader/nodeset_builtin_formats.js +133 -0
  39. package/dist/api/loader/nodeset_builtin_formats.js.map +1 -0
  40. package/dist/api/loader/nodeset_format.d.ts +123 -0
  41. package/dist/api/loader/nodeset_format.js +63 -0
  42. package/dist/api/loader/nodeset_format.js.map +1 -0
  43. package/dist/api/loader/nodeset_image.d.ts +17 -1
  44. package/dist/api/loader/nodeset_image.js +32 -4
  45. package/dist/api/loader/nodeset_image.js.map +1 -1
  46. package/dist/api/loader/nodeset_image_codec.d.ts +4 -0
  47. package/dist/api/loader/nodeset_image_codec.js +142 -53
  48. package/dist/api/loader/nodeset_image_codec.js.map +1 -1
  49. package/dist/api/loader/nodeset_record.d.ts +26 -2
  50. package/dist/api/loader/nodeset_record.js +11 -2
  51. package/dist/api/loader/nodeset_record.js.map +1 -1
  52. package/dist/api/loader/nodeset_record_applier.js +52 -3
  53. package/dist/api/loader/nodeset_record_applier.js.map +1 -1
  54. package/dist/api/loader/nodeset_records_to_xml.d.ts +16 -0
  55. package/dist/api/loader/nodeset_records_to_xml.js +536 -0
  56. package/dist/api/loader/nodeset_records_to_xml.js.map +1 -0
  57. package/dist/api/loader/nodeset_source.d.ts +68 -7
  58. package/dist/api/loader/nodeset_source.js +157 -20
  59. package/dist/api/loader/nodeset_source.js.map +1 -1
  60. package/dist/api/loader/nodeset_to_image.d.ts +4 -4
  61. package/dist/api/loader/nodeset_to_image.js +14 -4
  62. package/dist/api/loader/nodeset_to_image.js.map +1 -1
  63. package/dist/api/loader/nodeset_xml_header.d.ts +22 -0
  64. package/dist/api/loader/nodeset_xml_header.js +113 -0
  65. package/dist/api/loader/nodeset_xml_header.js.map +1 -0
  66. package/dist/api/loader/nodeset_xml_primitives.d.ts +37 -0
  67. package/dist/api/loader/nodeset_xml_primitives.js +196 -0
  68. package/dist/api/loader/nodeset_xml_primitives.js.map +1 -0
  69. package/dist/api/loader/nodeset_xml_producer.js +56 -1
  70. package/dist/api/loader/nodeset_xml_producer.js.map +1 -1
  71. package/dist/api/loader/parsers/variant_parser.js +7 -0
  72. package/dist/api/loader/parsers/variant_parser.js.map +1 -1
  73. package/dist/impl/_instantiate_helpers.js +1 -0
  74. package/dist/impl/_instantiate_helpers.js.map +1 -1
  75. package/dist/impl/alarms_and_conditions/ua_alarm_condition_impl.js +4 -0
  76. package/dist/impl/alarms_and_conditions/ua_alarm_condition_impl.js.map +1 -1
  77. package/dist/impl/alarms_and_conditions/ua_certificate_expiration_alarm_impl.js +14 -0
  78. package/dist/impl/alarms_and_conditions/ua_certificate_expiration_alarm_impl.js.map +1 -1
  79. package/dist/impl/base_node_impl.d.ts +9 -0
  80. package/dist/impl/base_node_impl.js +11 -0
  81. package/dist/impl/base_node_impl.js.map +1 -1
  82. package/dist/impl/base_node_private.js +67 -97
  83. package/dist/impl/base_node_private.js.map +1 -1
  84. package/dist/impl/nodeset_tools/construct_namespace_dependency.js +5 -1
  85. package/dist/impl/nodeset_tools/construct_namespace_dependency.js.map +1 -1
  86. package/dist/impl/nodeset_tools/nodeset_to_records.js +61 -15
  87. package/dist/impl/nodeset_tools/nodeset_to_records.js.map +1 -1
  88. package/dist/impl/nodeset_tools/nodeset_to_xml.d.ts +1 -8
  89. package/dist/impl/nodeset_tools/nodeset_to_xml.js +174 -190
  90. package/dist/impl/nodeset_tools/nodeset_to_xml.js.map +1 -1
  91. package/dist/impl/ua_data_type_impl.d.ts +21 -0
  92. package/dist/impl/ua_data_type_impl.js +27 -2
  93. package/dist/impl/ua_data_type_impl.js.map +1 -1
  94. package/dist/impl/ua_object_type_impl.d.ts +9 -0
  95. package/dist/impl/ua_object_type_impl.js +12 -1
  96. package/dist/impl/ua_object_type_impl.js.map +1 -1
  97. package/dist/impl/ua_variable_impl.js +27 -10
  98. package/dist/impl/ua_variable_impl.js.map +1 -1
  99. package/dist/impl/ua_variable_impl_ext_obj.js +19 -2
  100. package/dist/impl/ua_variable_impl_ext_obj.js.map +1 -1
  101. package/dist/impl/ua_variable_type_impl.d.ts +8 -1
  102. package/dist/impl/ua_variable_type_impl.js +39 -2
  103. package/dist/impl/ua_variable_type_impl.js.map +1 -1
  104. package/dist/tsconfig_base.tsbuildinfo +1 -1
  105. package/distNodeJS/generate_address_space.js +4 -0
  106. package/distNodeJS/generate_address_space.js.map +1 -1
  107. package/impl/_instantiate_helpers.ts +3 -0
  108. package/impl/alarms_and_conditions/ua_alarm_condition_impl.ts +10 -0
  109. package/impl/alarms_and_conditions/ua_certificate_expiration_alarm_impl.ts +17 -0
  110. package/impl/base_node_impl.ts +15 -0
  111. package/impl/base_node_private.ts +97 -146
  112. package/impl/nodeset_tools/construct_namespace_dependency.ts +5 -1
  113. package/impl/nodeset_tools/nodeset_to_records.ts +66 -16
  114. package/impl/nodeset_tools/nodeset_to_xml.ts +127 -160
  115. package/impl/ua_data_type_impl.ts +40 -2
  116. package/impl/ua_object_type_impl.ts +16 -3
  117. package/impl/ua_variable_impl.ts +27 -10
  118. package/impl/ua_variable_impl_ext_obj.ts +20 -2
  119. package/impl/ua_variable_type_impl.ts +48 -2
  120. package/package.json +29 -27
  121. package/source_nodejs/generate_address_space.ts +7 -1
@@ -0,0 +1,536 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.recordsToNodeset2XML = recordsToNodeset2XML;
7
+ const node_opcua_data_model_1 = require("node-opcua-data-model");
8
+ const node_opcua_debug_1 = require("node-opcua-debug");
9
+ const node_opcua_types_1 = require("node-opcua-types");
10
+ const node_opcua_variant_1 = require("node-opcua-variant");
11
+ const xml_writer_1 = __importDefault(require("xml-writer"));
12
+ const nodeset_record_js_1 = require("./nodeset_record.js");
13
+ const nodeset_xml_primitives_js_1 = require("./nodeset_xml_primitives.js");
14
+ const errorLog = (0, node_opcua_debug_1.make_errorLog)("nodeset_records_to_xml");
15
+ const UA_NAMESPACE_URI = "http://opcfoundation.org/UA/";
16
+ /**
17
+ * the alias each id is written under, per writer. `<Aliases>` exists so that a document can say
18
+ * ReferenceType="HasProperty" instead of i=46, and every document that declares an alias uses it,
19
+ * so writing the bare id back would be a different document saying the same thing. The header
20
+ * carries the aliases; this is that map inverted.
21
+ */
22
+ const aliasTables = new WeakMap();
23
+ /** an id as the document spells it: its alias when it has one, the id itself otherwise */
24
+ function a(xw, nodeId) {
25
+ const spelling = (0, nodeset_xml_primitives_js_1.n)(xw, nodeId);
26
+ return aliasTables.get(xw)?.get(spelling) ?? spelling;
27
+ }
28
+ /** the element name of each node class, as the UANodeSet schema names it */
29
+ const ELEMENT_OF_NODE_CLASS = {
30
+ [node_opcua_data_model_1.NodeClass.Object]: "UAObject",
31
+ [node_opcua_data_model_1.NodeClass.Variable]: "UAVariable",
32
+ [node_opcua_data_model_1.NodeClass.Method]: "UAMethod",
33
+ [node_opcua_data_model_1.NodeClass.ObjectType]: "UAObjectType",
34
+ [node_opcua_data_model_1.NodeClass.VariableType]: "UAVariableType",
35
+ [node_opcua_data_model_1.NodeClass.ReferenceType]: "UAReferenceType",
36
+ [node_opcua_data_model_1.NodeClass.DataType]: "UADataType",
37
+ [node_opcua_data_model_1.NodeClass.View]: "UAView"
38
+ };
39
+ /**
40
+ * a NodeSet2 document from the records it was read into.
41
+ *
42
+ * The records must be one document's worth, the header first, the nodes after it in the order the
43
+ * document is to list them. Ids are written with the indices the records carry.
44
+ */
45
+ function recordsToNodeset2XML(records, options = {}) {
46
+ const header = records[0];
47
+ if (header?.kind !== "header") {
48
+ throw new Error("recordsToNodeset2XML: the records must start with the header record");
49
+ }
50
+ // index 0 is always the UA namespace and is never listed in <NamespaceUris>; the declared uris
51
+ // follow it in order. This is the table the records index into and the table we write back.
52
+ const namespaceArray = [UA_NAMESPACE_URI, ...header.namespaceUris];
53
+ const xw = new xml_writer_1.default(true);
54
+ xw.translationTable = (0, nodeset_xml_primitives_js_1.identityTranslationTable)(namespaceArray.length);
55
+ xw.priorityTable = namespaceArray.map((_, index) => index);
56
+ xw.visitedNode = new Set();
57
+ xw.startDocument({ encoding: "utf-8", version: "1.0" });
58
+ xw.startElement("UANodeSet");
59
+ xw.writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
60
+ xw.writeAttribute("xmlns:uax", nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
61
+ xw.writeAttribute("xmlns", "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd");
62
+ const namespacesMap = {
63
+ "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd": "",
64
+ [nodeset_xml_primitives_js_1.UAX_TYPES_XSD]: "uax",
65
+ "http://www.w3.org/2001/XMLSchema-instance": "xsi"
66
+ };
67
+ for (let index = 1; index < namespaceArray.length; index++) {
68
+ const smallName = `ns${index}`;
69
+ xw.writeAttribute(`xmlns:${smallName}`, (0, nodeset_xml_primitives_js_1.makeTypeXsd)(namespaceArray[index]));
70
+ namespacesMap[namespaceArray[index]] = smallName;
71
+ }
72
+ (0, nodeset_xml_primitives_js_1.initXmlWriterEx)(xw, namespacesMap, namespaceArray);
73
+ const aliasOf = new Map();
74
+ for (const [name, nodeId] of Object.entries(header.aliases)) {
75
+ aliasOf.set(nodeId.toString().replace("ns=0;", ""), name);
76
+ }
77
+ aliasTables.set(xw, aliasOf);
78
+ writeHeader(xw, header);
79
+ for (const record of records.slice(1)) {
80
+ if (record.kind !== "node") {
81
+ continue;
82
+ }
83
+ writeNode(xw, record, options);
84
+ }
85
+ xw.endElement();
86
+ xw.endDocument();
87
+ return xw.toString();
88
+ }
89
+ /**
90
+ * a date that can be written back. The reader keeps an unparseable PublicationDate as an invalid
91
+ * Date rather than dropping it, so a document that said something bad still says it was there;
92
+ * `toISOString` throws on one, and there is nothing to write.
93
+ */
94
+ function isUsableDate(date) {
95
+ return date instanceof Date && !Number.isNaN(date.getTime());
96
+ }
97
+ function writeHeader(xw, header) {
98
+ xw.startElement("NamespaceUris");
99
+ for (const namespaceUri of header.namespaceUris) {
100
+ xw.startElement("Uri");
101
+ xw.text(namespaceUri);
102
+ xw.endElement();
103
+ }
104
+ xw.endElement();
105
+ xw.startElement("Models");
106
+ for (const model of header.models) {
107
+ xw.startElement("Model");
108
+ xw.writeAttribute("ModelUri", model.modelUri);
109
+ xw.writeAttribute("Version", model.version);
110
+ if (isUsableDate(model.publicationDate)) {
111
+ xw.writeAttribute("PublicationDate", model.publicationDate.toISOString());
112
+ }
113
+ for (const required of model.requiredModels) {
114
+ xw.startElement("RequiredModel");
115
+ xw.writeAttribute("ModelUri", required.modelUri);
116
+ // both are optional in the XSD, and a document that leaves them out means it: ISA95
117
+ // requires the UA namespace with no version and no date at all
118
+ if (required.version) {
119
+ xw.writeAttribute("Version", required.version);
120
+ }
121
+ if (isUsableDate(required.publicationDate)) {
122
+ xw.writeAttribute("PublicationDate", required.publicationDate.toISOString());
123
+ }
124
+ xw.endElement();
125
+ }
126
+ xw.endElement();
127
+ }
128
+ xw.endElement();
129
+ xw.startElement("Aliases");
130
+ // in the order the document declared them, which the record kept. The address-space exporter
131
+ // sorts because it synthesizes the list and has no order to preserve; here there is one, and
132
+ // sorting it would make the document a rearrangement of itself rather than a copy
133
+ for (const name of Object.keys(header.aliases)) {
134
+ xw.startElement("Alias");
135
+ xw.writeAttribute("Alias", name);
136
+ xw.text(header.aliases[name].toString().replace("ns=0;", ""));
137
+ xw.endElement();
138
+ }
139
+ xw.endElement();
140
+ // whatever a tool stamped on the document, back as the XML it was, prefix included: the
141
+ // reader keeps the qualified name for the fragment cloner precisely so that this survives
142
+ if (header.extensions?.length) {
143
+ xw.startElement("Extensions");
144
+ for (const extension of header.extensions) {
145
+ xw.startElement("Extension");
146
+ writeRaw(xw, extension);
147
+ xw.endElement();
148
+ }
149
+ xw.endElement();
150
+ }
151
+ }
152
+ // #region nodes
153
+ function writeNode(xw, record, options) {
154
+ const element = ELEMENT_OF_NODE_CLASS[record.nodeClass];
155
+ if (!element) {
156
+ errorLog(`recordsToNodeset2XML: no element for node class ${record.nodeClass} on ${record.nodeId.toString()}`);
157
+ return;
158
+ }
159
+ if (options.sectionComments) {
160
+ xw.writeComment(element.replace(/^UA/, ""));
161
+ }
162
+ xw.startElement(element);
163
+ writeCommonAttributes(xw, record);
164
+ writeClassAttributes(xw, record);
165
+ writeCommonElements(xw, record);
166
+ writeDefinition(xw, record);
167
+ writeValue(xw, record.value);
168
+ xw.endElement();
169
+ }
170
+ function writeCommonAttributes(xw, record) {
171
+ xw.writeAttribute("NodeId", (0, nodeset_xml_primitives_js_1.n)(xw, record.nodeId));
172
+ xw.writeAttribute("BrowseName", (0, nodeset_xml_primitives_js_1.b)(xw, record.browseName));
173
+ if (record.parentNodeId) {
174
+ xw.writeAttribute("ParentNodeId", (0, nodeset_xml_primitives_js_1.n)(xw, record.parentNodeId));
175
+ }
176
+ if (record.symbolicName !== undefined) {
177
+ xw.writeAttribute("SymbolicName", record.symbolicName);
178
+ }
179
+ if (record.releaseStatus) {
180
+ xw.writeAttribute("ReleaseStatus", record.releaseStatus);
181
+ }
182
+ if (record.isAbstract) {
183
+ xw.writeAttribute("IsAbstract", "true");
184
+ }
185
+ if (record.accessLevel !== undefined) {
186
+ xw.writeAttribute("AccessLevel", record.accessLevel);
187
+ }
188
+ if (record.userAccessLevel !== undefined) {
189
+ xw.writeAttribute("UserAccessLevel", record.userAccessLevel);
190
+ }
191
+ if (record.accessRestrictions !== undefined) {
192
+ xw.writeAttribute("AccessRestrictions", record.accessRestrictions);
193
+ }
194
+ if (record.hasNoPermissions) {
195
+ xw.writeAttribute("HasNoPermissions", "true");
196
+ }
197
+ if (record.minimumSamplingInterval !== undefined && record.minimumSamplingInterval > 0) {
198
+ xw.writeAttribute("MinimumSamplingInterval", record.minimumSamplingInterval);
199
+ }
200
+ if (record.historizing) {
201
+ xw.writeAttribute("Historizing", "true");
202
+ }
203
+ }
204
+ function writeClassAttributes(xw, record) {
205
+ switch (record.nodeClass) {
206
+ case node_opcua_data_model_1.NodeClass.Object:
207
+ case node_opcua_data_model_1.NodeClass.ObjectType:
208
+ case node_opcua_data_model_1.NodeClass.View:
209
+ if (record.eventNotifier) {
210
+ xw.writeAttribute("EventNotifier", record.eventNotifier.toString());
211
+ }
212
+ if (record.nodeClass === node_opcua_data_model_1.NodeClass.View && record.containsNoLoops) {
213
+ xw.writeAttribute("ContainsNoLoops", "true");
214
+ }
215
+ break;
216
+ case node_opcua_data_model_1.NodeClass.Variable:
217
+ case node_opcua_data_model_1.NodeClass.VariableType:
218
+ if (record.dataType) {
219
+ xw.writeAttribute("DataType", a(xw, record.dataType));
220
+ }
221
+ if (record.valueRank !== undefined) {
222
+ xw.writeAttribute("ValueRank", record.valueRank.toString());
223
+ }
224
+ if (record.arrayDimensions) {
225
+ xw.writeAttribute("ArrayDimensions", record.arrayDimensions.join(","));
226
+ }
227
+ break;
228
+ case node_opcua_data_model_1.NodeClass.Method:
229
+ if (record.methodDeclarationId) {
230
+ xw.writeAttribute("MethodDeclarationId", (0, nodeset_xml_primitives_js_1.n)(xw, record.methodDeclarationId));
231
+ }
232
+ break;
233
+ case node_opcua_data_model_1.NodeClass.ReferenceType:
234
+ if (record.symmetric) {
235
+ xw.writeAttribute("Symmetric", "true");
236
+ }
237
+ break;
238
+ default:
239
+ break;
240
+ }
241
+ }
242
+ // the UANode sequence is DisplayName, Description, Category, Documentation, References,
243
+ // RolePermissions: InverseName sits with DisplayName and Description, RolePermissions after
244
+ // References.
245
+ function writeCommonElements(xw, record) {
246
+ if (record.displayName !== undefined) {
247
+ xw.startElement("DisplayName").text(record.displayName).endElement();
248
+ }
249
+ if (record.description !== undefined) {
250
+ xw.startElement("Description").text(record.description).endElement();
251
+ }
252
+ if (record.nodeClass === node_opcua_data_model_1.NodeClass.ReferenceType && record.inverseName !== undefined) {
253
+ xw.startElement("InverseName").text(record.inverseName).endElement();
254
+ }
255
+ for (const category of record.category ?? []) {
256
+ xw.startElement("Category").text(category).endElement();
257
+ }
258
+ if (record.documentation !== undefined) {
259
+ xw.startElement("Documentation").text(record.documentation).endElement();
260
+ }
261
+ writeReferences(xw, record.references);
262
+ if (record.rolePermissions && record.rolePermissions.length > 0) {
263
+ xw.startElement("RolePermissions");
264
+ for (const rolePermission of record.rolePermissions) {
265
+ xw.startElement("RolePermission");
266
+ xw.writeAttribute("Permissions", rolePermission.permissions.toString());
267
+ xw.text((0, nodeset_xml_primitives_js_1.n)(xw, rolePermission.roleId));
268
+ xw.endElement();
269
+ }
270
+ xw.endElement();
271
+ }
272
+ }
273
+ function writeReferences(xw, references) {
274
+ if (!references || references.length === 0) {
275
+ return;
276
+ }
277
+ xw.startElement("References");
278
+ for (const reference of references) {
279
+ xw.startElement("Reference");
280
+ xw.writeAttribute("ReferenceType", a(xw, reference.referenceType));
281
+ if (!reference.isForward) {
282
+ xw.writeAttribute("IsForward", "false");
283
+ }
284
+ xw.text((0, nodeset_xml_primitives_js_1.n)(xw, reference.nodeId));
285
+ xw.endElement();
286
+ }
287
+ xw.endElement();
288
+ }
289
+ function writeDefinition(xw, record) {
290
+ const definition = record.definition;
291
+ if (!definition) {
292
+ return;
293
+ }
294
+ xw.startElement("Definition");
295
+ if (definition.name !== undefined) {
296
+ xw.writeAttribute("Name", definition.name);
297
+ }
298
+ if (definition.isUnion) {
299
+ xw.writeAttribute("IsUnion", "true");
300
+ }
301
+ if (definition.isOptionSet) {
302
+ xw.writeAttribute("IsOptionSet", "true");
303
+ }
304
+ for (const field of definition.fields || []) {
305
+ xw.startElement("Field");
306
+ xw.writeAttribute("Name", field.name || "");
307
+ // a field whose Name is not an identifier carries the identifier separately: "N/S
308
+ // Hemisphere" is declared with SymbolicName="N_S_Hemisphere", and a generator needs it
309
+ if (field.symbolicName) {
310
+ xw.writeAttribute("SymbolicName", field.symbolicName);
311
+ }
312
+ if (field.arrayDimensions && field.arrayDimensions.length > 0) {
313
+ xw.writeAttribute("ArrayDimensions", field.arrayDimensions.join(","));
314
+ }
315
+ if (field.valueRank !== undefined && field.valueRank !== -1) {
316
+ xw.writeAttribute("ValueRank", field.valueRank);
317
+ }
318
+ if (field.value !== undefined && field.value !== null) {
319
+ xw.writeAttribute("Value", field.value);
320
+ }
321
+ if (field.isOptional) {
322
+ xw.writeAttribute("IsOptional", "true");
323
+ }
324
+ if (field.allowSubTypes) {
325
+ xw.writeAttribute("AllowSubTypes", "true");
326
+ }
327
+ if (field.maxStringLength !== undefined && field.maxStringLength !== 0) {
328
+ xw.writeAttribute("MaxStringLength", field.maxStringLength);
329
+ }
330
+ if (field.dataType) {
331
+ xw.writeAttribute("DataType", a(xw, field.dataType));
332
+ }
333
+ if (field.description) {
334
+ const text = typeof field.description === "string" ? field.description : field.description.text;
335
+ if (text) {
336
+ xw.startElement("Description").text(text).endElement();
337
+ }
338
+ }
339
+ xw.endElement();
340
+ }
341
+ xw.endElement();
342
+ }
343
+ // #endregion
344
+ // #region values
345
+ function writeValue(xw, variant) {
346
+ if (!variant || variant.value === null || variant.value === undefined) {
347
+ return;
348
+ }
349
+ const dataType = variant.dataType;
350
+ if (dataType === undefined || dataType === node_opcua_variant_1.DataType.Null) {
351
+ return;
352
+ }
353
+ const builtInName = node_opcua_variant_1.DataType[dataType];
354
+ xw.startElement("Value");
355
+ const uax = (0, nodeset_xml_primitives_js_1.getPrefix)(xw, nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
356
+ const isArray = variant.arrayType === node_opcua_variant_1.VariantArrayType.Array || variant.arrayType === node_opcua_variant_1.VariantArrayType.Matrix;
357
+ if (isArray) {
358
+ // the built-in type, never a nodeset's own DataType name: uax defines ListOfInt32, and a
359
+ // reader that meets a ListOfSomethingElse walks past it into the first child
360
+ (0, nodeset_xml_primitives_js_1.startElementEx)(xw, uax, `ListOf${builtInName}`, nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
361
+ for (const element of variant.value) {
362
+ writeOneValue(xw, dataType, element, builtInName);
363
+ }
364
+ (0, nodeset_xml_primitives_js_1.restoreDefaultNamespace)(xw);
365
+ xw.endElement();
366
+ }
367
+ else {
368
+ writeOneValue(xw, dataType, variant.value, builtInName);
369
+ }
370
+ xw.endElement();
371
+ }
372
+ /** one value of the built-in type, wrapped in its own `uax:` element unless it is an extension object */
373
+ function writeOneValue(xw, dataType, value, builtInName) {
374
+ if (dataType === node_opcua_variant_1.DataType.ExtensionObject) {
375
+ writeExtensionObject(xw, value);
376
+ return;
377
+ }
378
+ const uax = (0, nodeset_xml_primitives_js_1.getPrefix)(xw, nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
379
+ xw.startElement(`${uax}${builtInName}`);
380
+ writeScalar(xw, dataType, value);
381
+ xw.endElement();
382
+ }
383
+ function writeScalar(xw, dataType, value) {
384
+ if (value === null || value === undefined) {
385
+ return;
386
+ }
387
+ const uax = (0, nodeset_xml_primitives_js_1.getPrefix)(xw, nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
388
+ switch (dataType) {
389
+ case node_opcua_variant_1.DataType.LocalizedText:
390
+ (0, nodeset_xml_primitives_js_1._dumpLocalizedText)(xw, value);
391
+ break;
392
+ case node_opcua_variant_1.DataType.QualifiedName:
393
+ (0, nodeset_xml_primitives_js_1._dumpQualifiedName)(xw, value);
394
+ break;
395
+ case node_opcua_variant_1.DataType.NodeId:
396
+ case node_opcua_variant_1.DataType.ExpandedNodeId:
397
+ (0, nodeset_xml_primitives_js_1._dumpNodeId)(xw, value);
398
+ break;
399
+ case node_opcua_variant_1.DataType.DateTime:
400
+ xw.text(value.toISOString());
401
+ break;
402
+ case node_opcua_variant_1.DataType.Int64:
403
+ case node_opcua_variant_1.DataType.UInt64:
404
+ xw.text((0, nodeset_xml_primitives_js_1.int64ToDecimalString)(value, dataType === node_opcua_variant_1.DataType.Int64));
405
+ break;
406
+ case node_opcua_variant_1.DataType.ByteString: {
407
+ const base64 = Buffer.from(value).toString("base64");
408
+ const chunks = base64.match(/.{0,80}/g);
409
+ xw.text(base64.length > 80 && chunks ? chunks.join("\n") : base64);
410
+ break;
411
+ }
412
+ case node_opcua_variant_1.DataType.Guid:
413
+ xw.startElement(`${uax}String`).text(String(value)).endElement();
414
+ break;
415
+ case node_opcua_variant_1.DataType.StatusCode:
416
+ xw.text(String(value.value));
417
+ break;
418
+ case node_opcua_variant_1.DataType.XmlElement:
419
+ writeRaw(xw, String(value));
420
+ break;
421
+ default:
422
+ // every remaining built-in is a scalar the XSD writes as text
423
+ xw.text(String(value));
424
+ break;
425
+ }
426
+ }
427
+ /**
428
+ * an extension object: the XML the reader kept, or one of the four types it decodes. There is no
429
+ * fifth case -- the image codec will not carry a decoded anything else -- so no DataType definition
430
+ * is ever needed to write one back.
431
+ */
432
+ function writeExtensionObject(xw, value) {
433
+ const uax = (0, nodeset_xml_primitives_js_1.getPrefix)(xw, nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
434
+ if (value instanceof nodeset_record_js_1.XmlExtensionObjectFragment) {
435
+ (0, nodeset_xml_primitives_js_1.startElementEx)(xw, uax, "ExtensionObject", nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
436
+ writeTypeId(xw, value.typeId);
437
+ (0, nodeset_xml_primitives_js_1.startElementEx)(xw, uax, "Body", nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
438
+ writeRaw(xw, value.bodyXML);
439
+ (0, nodeset_xml_primitives_js_1.restoreDefaultNamespace)(xw);
440
+ xw.endElement();
441
+ (0, nodeset_xml_primitives_js_1.restoreDefaultNamespace)(xw);
442
+ xw.endElement();
443
+ return;
444
+ }
445
+ const encodingId = value.schema?.encodingDefaultXml;
446
+ if (!encodingId || encodingId.isEmpty()) {
447
+ errorLog(`recordsToNodeset2XML: ${value.schema?.name ?? "extension object"} has no XML encoding`);
448
+ return;
449
+ }
450
+ (0, nodeset_xml_primitives_js_1.startElementEx)(xw, uax, "ExtensionObject", nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
451
+ writeTypeId(xw, encodingId);
452
+ (0, nodeset_xml_primitives_js_1.startElementEx)(xw, uax, "Body", nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
453
+ writeDecodedExtensionObject(xw, value);
454
+ (0, nodeset_xml_primitives_js_1.restoreDefaultNamespace)(xw);
455
+ xw.endElement();
456
+ (0, nodeset_xml_primitives_js_1.restoreDefaultNamespace)(xw);
457
+ xw.endElement();
458
+ }
459
+ function writeTypeId(xw, typeId) {
460
+ const uax = (0, nodeset_xml_primitives_js_1.getPrefix)(xw, nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
461
+ xw.startElement(`${uax}TypeId`);
462
+ xw.startElement(`${uax}Identifier`);
463
+ xw.text((0, nodeset_xml_primitives_js_1.n)(xw, typeId));
464
+ xw.endElement();
465
+ xw.endElement();
466
+ }
467
+ function writeDecodedExtensionObject(xw, value) {
468
+ const uax = (0, nodeset_xml_primitives_js_1.getPrefix)(xw, nodeset_xml_primitives_js_1.UAX_TYPES_XSD);
469
+ const element = (name, write) => {
470
+ xw.startElement(`${uax}${name}`);
471
+ write();
472
+ xw.endElement();
473
+ };
474
+ const text = (name, content) => element(name, () => xw.text(content));
475
+ const localizedText = (name, v) => {
476
+ // null, not undefined: a LocalizedText that carried nothing comes back from the codec with
477
+ // null fields rather than absent ones, and testing for undefined wrote an empty
478
+ // <Description> onto every Argument that never had one
479
+ if (!v || (!v.text && !v.locale))
480
+ return;
481
+ element(name, () => (0, nodeset_xml_primitives_js_1._dumpLocalizedText)(xw, v));
482
+ };
483
+ if (value instanceof node_opcua_types_1.Argument) {
484
+ xw.startElement(`${uax}Argument`);
485
+ text("Name", value.name ?? "");
486
+ element("DataType", () => (0, nodeset_xml_primitives_js_1._dumpNodeId)(xw, value.dataType));
487
+ text("ValueRank", String(value.valueRank));
488
+ // an empty ArrayDimensions is an empty element, which is what a scalar argument declares
489
+ element("ArrayDimensions", () => {
490
+ for (const dimension of value.arrayDimensions ?? []) {
491
+ text("UInt32", String(dimension));
492
+ }
493
+ });
494
+ localizedText("Description", value.description);
495
+ xw.endElement();
496
+ return;
497
+ }
498
+ if (value instanceof node_opcua_types_1.EUInformation) {
499
+ xw.startElement(`${uax}EUInformation`);
500
+ text("NamespaceUri", value.namespaceUri ?? "");
501
+ text("UnitId", String(value.unitId));
502
+ localizedText("DisplayName", value.displayName);
503
+ localizedText("Description", value.description);
504
+ xw.endElement();
505
+ return;
506
+ }
507
+ if (value instanceof node_opcua_types_1.Range) {
508
+ xw.startElement(`${uax}Range`);
509
+ text("Low", String(value.low));
510
+ text("High", String(value.high));
511
+ xw.endElement();
512
+ return;
513
+ }
514
+ if (value instanceof node_opcua_types_1.EnumValueType) {
515
+ xw.startElement(`${uax}EnumValueType`);
516
+ text("Value", Array.isArray(value.value) ? String(value.value[1]) : String(value.value));
517
+ localizedText("DisplayName", value.displayName);
518
+ localizedText("Description", value.description);
519
+ xw.endElement();
520
+ return;
521
+ }
522
+ errorLog(`recordsToNodeset2XML: a record cannot hold a decoded ${value.constructor?.name ?? "extension object"}; ` +
523
+ "the reader keeps anything but the four known types as its XML");
524
+ }
525
+ /** raw XML, unescaped: a fragment the reader kept is already a document, not text to be quoted */
526
+ function writeRaw(xw, content) {
527
+ const raw = xw.writeRaw;
528
+ if (typeof raw === "function") {
529
+ raw.call(xw, content);
530
+ }
531
+ else {
532
+ xw.text(content);
533
+ }
534
+ }
535
+ // #endregion
536
+ //# sourceMappingURL=nodeset_records_to_xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeset_records_to_xml.js","sourceRoot":"","sources":["../../../api/loader/nodeset_records_to_xml.ts"],"names":[],"mappings":"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"}