node-opcua-modeler 2.96.0 → 2.98.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.
- package/dist/addExtensionObjectDataType.d.ts +21 -21
- package/dist/addExtensionObjectDataType.js +132 -132
- package/dist/build_model_inner.d.ts +17 -17
- package/dist/build_model_inner.js +42 -42
- package/dist/displayNodeElement.d.ts +6 -6
- package/dist/displayNodeElement.js +220 -220
- package/dist/generate_markdown_doc.d.ts +41 -41
- package/dist/generate_markdown_doc.js +314 -314
- package/dist/index.d.ts +24 -24
- package/dist/index.js +52 -52
- package/dist/promoteToMandatory.d.ts +8 -8
- package/dist/promoteToMandatory.js +89 -89
- package/dist/setNamespaceMetaData.d.ts +1 -1
- package/dist/setNamespaceMetaData.js +5 -5
- package/dist/symbol.d.ts +1 -1
- package/dist/symbol.js +2 -2
- package/dist/tableHelper.d.ts +9 -9
- package/dist/tableHelper.js +60 -60
- package/dist/to_cvs.d.ts +2 -2
- package/dist/to_cvs.js +11 -11
- package/dist/types.d.ts +1 -1
- package/dist/types.js +2 -2
- package/distNodeJS/build_documentation_to_file.d.ts +3 -3
- package/distNodeJS/build_documentation_to_file.js +26 -26
- package/distNodeJS/build_model.d.ts +7 -7
- package/distNodeJS/build_model.js +21 -21
- package/distNodeJS/index.d.ts +5 -5
- package/distNodeJS/index.js +23 -23
- package/distNodeJS/symbol_cvs.d.ts +3 -3
- package/distNodeJS/symbol_cvs.js +63 -63
- package/package.json +28 -21
- package/MyModelIds.csv +0 -151
- package/examples/make_model.ts +0 -153
- package/source_nodejs/build_documentation_to_file.ts +0 -13
- package/source_nodejs/build_model.ts +0 -12
- package/source_nodejs/index.ts +0 -5
- package/source_nodejs/symbol_cvs.ts +0 -50
- package/tsconfig_common.json +0 -66
- package/tsconfig_nodejs.json +0 -25
|
@@ -1,315 +1,315 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.buildDocumentation = exports.extractTypes = exports.buildDocumentationToString = exports.Writer = void 0;
|
|
13
|
-
const node_opcua_basic_types_1 = require("node-opcua-basic-types");
|
|
14
|
-
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
15
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
16
|
-
const displayNodeElement_1 = require("./displayNodeElement");
|
|
17
|
-
const tableHelper_1 = require("./tableHelper");
|
|
18
|
-
class Writer {
|
|
19
|
-
constructor() {
|
|
20
|
-
this.stream = [];
|
|
21
|
-
/* empty */
|
|
22
|
-
}
|
|
23
|
-
writeLine(str) {
|
|
24
|
-
this.stream.push(str);
|
|
25
|
-
}
|
|
26
|
-
toString() {
|
|
27
|
-
return this.stream.join("\n");
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.Writer = Writer;
|
|
31
|
-
function buildDocumentationToString(namespace, options) {
|
|
32
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
const writer = new Writer();
|
|
34
|
-
yield buildDocumentation(namespace, writer, options);
|
|
35
|
-
return writer.toString();
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
exports.buildDocumentationToString = buildDocumentationToString;
|
|
39
|
-
const toDataTypeStr = (p) => {
|
|
40
|
-
if (p.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
|
|
41
|
-
const v = p;
|
|
42
|
-
const arr = v.valueRank == 1 ? "[]" : "";
|
|
43
|
-
const brn = toDataTypeStr(p.dataTypeObj);
|
|
44
|
-
return brn + arr;
|
|
45
|
-
}
|
|
46
|
-
if (p.nodeClass === node_opcua_data_model_1.NodeClass.DataType) {
|
|
47
|
-
const dataType = p;
|
|
48
|
-
const brn = dataType.browseName.toString();
|
|
49
|
-
return brn;
|
|
50
|
-
}
|
|
51
|
-
return "";
|
|
52
|
-
};
|
|
53
|
-
function dataTypeEnumerationToMarkdown(dataType) {
|
|
54
|
-
const writer = new Writer();
|
|
55
|
-
writer.writeLine("");
|
|
56
|
-
if (dataType.description) {
|
|
57
|
-
writer.writeLine(dataType.description.text || "");
|
|
58
|
-
}
|
|
59
|
-
writer.writeLine(`\nThe fields of the ${dataType.browseName.name} DataType are defined in the following table:`);
|
|
60
|
-
writer.writeLine("");
|
|
61
|
-
const definition = dataType.getEnumDefinition();
|
|
62
|
-
writer.writeLine("\nBasic Type: " + node_opcua_variant_1.DataType[node_opcua_variant_1.DataType.Int32]);
|
|
63
|
-
writer.writeLine("");
|
|
64
|
-
const table = new tableHelper_1.TableHelper(["Name", "Value", "Description"]);
|
|
65
|
-
for (const f of definition.fields || []) {
|
|
66
|
-
table.push([f.name, (0, node_opcua_basic_types_1.coerceUInt32)(f.value[1]), f.description.text || ""]);
|
|
67
|
-
}
|
|
68
|
-
writer.writeLine(table.toMarkdownTable());
|
|
69
|
-
const str = dumpTypeRepresentation(dataType);
|
|
70
|
-
writer.writeLine(str);
|
|
71
|
-
return writer.toString();
|
|
72
|
-
}
|
|
73
|
-
function dumpTypeRepresentation(uaType) {
|
|
74
|
-
var _a;
|
|
75
|
-
const className = node_opcua_data_model_1.NodeClass[uaType.nodeClass];
|
|
76
|
-
const writer = new Writer();
|
|
77
|
-
writer.writeLine("\n");
|
|
78
|
-
writer.writeLine(`\nThe representation of the ${uaType.browseName.name} ${className} in the address space is shown in the following table:`);
|
|
79
|
-
const table = new tableHelper_1.TableHelper(["Name", "Attribute"]);
|
|
80
|
-
table.push(["NodeId", uaType.nodeId.toString()]);
|
|
81
|
-
table.push(["NamespaceUri", uaType.addressSpace.getNamespaceUri(uaType.nodeId.namespace)]);
|
|
82
|
-
table.push(["BrowseName", uaType.browseName.name.toString()]);
|
|
83
|
-
table.push(["NodeClass", node_opcua_data_model_1.NodeClass[uaType.nodeClass]]);
|
|
84
|
-
if (uaType.nodeClass === node_opcua_data_model_1.NodeClass.ReferenceType) {
|
|
85
|
-
table.push(["InverseName", uaType.inverseName.text]);
|
|
86
|
-
// table.push(["IsSymmetric", (uaType as UAReferenceType).isSymetric ? "Yes" : "No"]);
|
|
87
|
-
}
|
|
88
|
-
table.push(["IsAbstract", uaType.isAbstract ? "Yes" : "No"]);
|
|
89
|
-
table.push(["SubtypeOf", uaType.subtypeOfObj ? uaType.subtypeOfObj.browseName.toString() : ""]);
|
|
90
|
-
writer.writeLine("");
|
|
91
|
-
writer.writeLine(table.toMarkdownTable());
|
|
92
|
-
writer.writeLine("");
|
|
93
|
-
// forward refereces
|
|
94
|
-
{
|
|
95
|
-
const properties = uaType.findReferencesExAsObject("HasProperty");
|
|
96
|
-
const table = new tableHelper_1.TableHelper(["Reference", "NodeClass", "BrowseName", "DataType", "TypeDefinition", "ModellingRule"]);
|
|
97
|
-
if (uaType.subtypeOfObj) {
|
|
98
|
-
const referenceName = "HasSubType";
|
|
99
|
-
const p = uaType.subtypeOfObj;
|
|
100
|
-
const nodeClass = node_opcua_data_model_1.NodeClass[p.nodeClass];
|
|
101
|
-
const browseName = p.browseName.toString();
|
|
102
|
-
const dataTypeStr = toDataTypeStr(p);
|
|
103
|
-
const modellingRule = p.modellingRule || "";
|
|
104
|
-
const typeDefinitionName = "";
|
|
105
|
-
table.push([referenceName, nodeClass, browseName, dataTypeStr, typeDefinitionName, modellingRule]);
|
|
106
|
-
}
|
|
107
|
-
if (properties.length > 0) {
|
|
108
|
-
writer.writeLine(`\nThe reference of the ${uaType.browseName.name} ${className} is shown in the following table:`);
|
|
109
|
-
writer.writeLine("");
|
|
110
|
-
for (const p of properties) {
|
|
111
|
-
const referenceName = "HasProperty";
|
|
112
|
-
const nodeClass = node_opcua_data_model_1.NodeClass[p.nodeClass];
|
|
113
|
-
const browseName = p.browseName.toString();
|
|
114
|
-
const dataTypeStr = toDataTypeStr(p);
|
|
115
|
-
const typeDefinitionName = (_a = p.typeDefinitionObj) === null || _a === void 0 ? void 0 : _a.browseName.toString();
|
|
116
|
-
const modellingRule = p.modellingRule || "";
|
|
117
|
-
table.push([referenceName, nodeClass, browseName, dataTypeStr, typeDefinitionName, modellingRule]);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
writer.writeLine("");
|
|
121
|
-
writer.writeLine(table.toMarkdownTable());
|
|
122
|
-
writer.writeLine("");
|
|
123
|
-
}
|
|
124
|
-
return writer.toString();
|
|
125
|
-
}
|
|
126
|
-
function dataTypeStructureToMarkdown(dataType) {
|
|
127
|
-
const addressSpace = dataType.addressSpace;
|
|
128
|
-
const writer = new Writer();
|
|
129
|
-
writer.writeLine("");
|
|
130
|
-
if (dataType.description) {
|
|
131
|
-
writer.writeLine(dataType.description.text || "");
|
|
132
|
-
}
|
|
133
|
-
const definition = dataType.getStructureDefinition();
|
|
134
|
-
writer.writeLine("\nBasic Type: " + node_opcua_variant_1.DataType[dataType.basicDataType]);
|
|
135
|
-
writer.writeLine("");
|
|
136
|
-
writer.writeLine(`The fields of the ${dataType.browseName.name} DataType are defined in the following table:`);
|
|
137
|
-
const c = (f) => {
|
|
138
|
-
var _a;
|
|
139
|
-
let dataTypeString = addressSpace.findDataType(f.dataType).browseName.toString();
|
|
140
|
-
if (f.valueRank === 1) {
|
|
141
|
-
dataTypeString += "[]";
|
|
142
|
-
}
|
|
143
|
-
else if (f.valueRank >= 2) {
|
|
144
|
-
dataTypeString += "[" + ((_a = f.arrayDimensions) === null || _a === void 0 ? void 0 : _a.map((d) => "" + d).join(" ")) + "]";
|
|
145
|
-
}
|
|
146
|
-
// f.maxStringLength ? f.maxStringLength : "",
|
|
147
|
-
// f.arrayDimensions ? f.arrayDimensions : "",
|
|
148
|
-
return dataTypeString;
|
|
149
|
-
};
|
|
150
|
-
const table = new tableHelper_1.TableHelper(["Name", "Type", "Description"]);
|
|
151
|
-
table.push([dataType.browseName.name, "Structure"]);
|
|
152
|
-
for (const f of definition.fields || []) {
|
|
153
|
-
table.push([" " + f.name, c(f), (f.description.text || "").replace(/\n/g, "<br>")]);
|
|
154
|
-
}
|
|
155
|
-
writer.writeLine(table.toMarkdownTable());
|
|
156
|
-
const str = dumpTypeRepresentation(dataType);
|
|
157
|
-
writer.writeLine(str);
|
|
158
|
-
return writer.toString();
|
|
159
|
-
}
|
|
160
|
-
function dataTypeToMarkdown(dataType) {
|
|
161
|
-
if (dataType.isEnumeration()) {
|
|
162
|
-
return dataTypeEnumerationToMarkdown(dataType);
|
|
163
|
-
}
|
|
164
|
-
else if (dataType.isStructure()) {
|
|
165
|
-
return dataTypeStructureToMarkdown(dataType);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
const writer = new Writer();
|
|
169
|
-
writer.writeLine("");
|
|
170
|
-
if (dataType.description) {
|
|
171
|
-
writer.writeLine(dataType.description.text || "");
|
|
172
|
-
}
|
|
173
|
-
writer.writeLine("\nBasic Type: " + node_opcua_variant_1.DataType[dataType.basicDataType]);
|
|
174
|
-
writer.writeLine("");
|
|
175
|
-
return writer.toString();
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
function dumpReferenceType(referenceType) {
|
|
179
|
-
const writer = new Writer();
|
|
180
|
-
const str = dumpTypeRepresentation(referenceType);
|
|
181
|
-
writer.writeLine(str);
|
|
182
|
-
return writer.toString();
|
|
183
|
-
}
|
|
184
|
-
function extractTypes(namespace, options) {
|
|
185
|
-
const namespacePriv = namespace;
|
|
186
|
-
if (!options || !options.node) {
|
|
187
|
-
const dataTypes = [...namespacePriv._dataTypeIterator()];
|
|
188
|
-
const objectTypes = [...namespacePriv._objectTypeIterator()];
|
|
189
|
-
const variableTypes = [...namespacePriv._variableTypeIterator()];
|
|
190
|
-
const referenceTypes = [...namespacePriv._referenceTypeIterator()];
|
|
191
|
-
return { dataTypes, variableTypes, objectTypes, referenceTypes };
|
|
192
|
-
}
|
|
193
|
-
const node = options.node;
|
|
194
|
-
if (node.nodeClass === node_opcua_data_model_1.NodeClass.DataType) {
|
|
195
|
-
const dataTypes = [];
|
|
196
|
-
let dataType = node;
|
|
197
|
-
dataTypes.push(dataType);
|
|
198
|
-
while (dataType.subtypeOfObj && dataType.subtypeOfObj.nodeId.namespace === namespace.index) {
|
|
199
|
-
dataType = dataType.subtypeOfObj;
|
|
200
|
-
dataTypes.push(dataType);
|
|
201
|
-
}
|
|
202
|
-
return { dataTypes, variableTypes: [], objectTypes: [], dataTypeNode: [], referenceTypes: [] };
|
|
203
|
-
}
|
|
204
|
-
else if (node.nodeClass === node_opcua_data_model_1.NodeClass.ObjectType) {
|
|
205
|
-
const objectTypes = [];
|
|
206
|
-
let objectType = node;
|
|
207
|
-
objectTypes.push(objectType);
|
|
208
|
-
while (objectType.subtypeOfObj && objectType.subtypeOfObj.nodeId.namespace === namespace.index) {
|
|
209
|
-
objectType = objectType.subtypeOfObj;
|
|
210
|
-
objectTypes.push(objectType);
|
|
211
|
-
}
|
|
212
|
-
return { dataTypes: [], variableTypes: [], objectTypes, dataTypeNode: [], referenceTypes: [] };
|
|
213
|
-
}
|
|
214
|
-
else if (node.nodeClass === node_opcua_data_model_1.NodeClass.VariableType) {
|
|
215
|
-
const variableTypes = [];
|
|
216
|
-
let variableType = node;
|
|
217
|
-
variableTypes.push(variableType);
|
|
218
|
-
while (variableType.subtypeOfObj && variableType.subtypeOfObj.nodeId.namespace === namespace.index) {
|
|
219
|
-
variableType = variableType.subtypeOfObj;
|
|
220
|
-
variableTypes.push(variableType);
|
|
221
|
-
}
|
|
222
|
-
return { dataTypes: [], variableTypes, objectTypes: [], dataTypeNode: [], referenceTypes: [] };
|
|
223
|
-
}
|
|
224
|
-
const dataTypes = [...namespacePriv._dataTypeIterator()];
|
|
225
|
-
const objectTypes = [...namespacePriv._objectTypeIterator()];
|
|
226
|
-
const variableTypes = [...namespacePriv._variableTypeIterator()];
|
|
227
|
-
const referenceTypes = [...namespacePriv._referenceTypeIterator()];
|
|
228
|
-
return { dataTypes, variableTypes, objectTypes, referenceTypes };
|
|
229
|
-
}
|
|
230
|
-
exports.extractTypes = extractTypes;
|
|
231
|
-
function buildDocumentation(namespace, writer, options) {
|
|
232
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
233
|
-
options = options || {};
|
|
234
|
-
const namespacePriv = namespace;
|
|
235
|
-
const namespaceUri = namespace.namespaceUri;
|
|
236
|
-
// -------- Documentation
|
|
237
|
-
const { dataTypes, objectTypes, variableTypes } = extractTypes(namespace, options);
|
|
238
|
-
writer.writeLine("");
|
|
239
|
-
writer.writeLine("# Namespace " + namespaceUri);
|
|
240
|
-
writer.writeLine("");
|
|
241
|
-
// -------------- writeReferences
|
|
242
|
-
if (namespacePriv._referenceTypeCount() > 0) {
|
|
243
|
-
writer.writeLine("");
|
|
244
|
-
writer.writeLine("## References ");
|
|
245
|
-
writer.writeLine("");
|
|
246
|
-
for (const referenceType of namespacePriv._referenceTypeIterator()) {
|
|
247
|
-
writer.writeLine("\n\n### reference " + referenceType.browseName.name);
|
|
248
|
-
dumpReferenceType(referenceType);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
function d(node) {
|
|
252
|
-
return node.description && node.description.text ? node.description.text.toString() : "";
|
|
253
|
-
}
|
|
254
|
-
// -------------- writeDataType
|
|
255
|
-
if (dataTypes.length > 0) {
|
|
256
|
-
writer.writeLine("");
|
|
257
|
-
writer.writeLine("## DataTypes");
|
|
258
|
-
writer.writeLine("");
|
|
259
|
-
for (const dataType of dataTypes) {
|
|
260
|
-
writer.writeLine("\n\n### " + dataType.browseName.name.toString());
|
|
261
|
-
writer.writeLine("");
|
|
262
|
-
writer.writeLine(dataTypeToMarkdown(dataType));
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
// -------------- writeObjectType
|
|
266
|
-
if (objectTypes.length > 0) {
|
|
267
|
-
writer.writeLine("");
|
|
268
|
-
writer.writeLine("## ObjectTypes");
|
|
269
|
-
writer.writeLine("");
|
|
270
|
-
for (const objectType of objectTypes) {
|
|
271
|
-
writer.writeLine("\n\n### " + objectType.browseName.name.toString());
|
|
272
|
-
writer.writeLine(d(objectType));
|
|
273
|
-
if (options.dumpGraphics) {
|
|
274
|
-
yield options.dumpGraphics(writer, objectType);
|
|
275
|
-
}
|
|
276
|
-
// enumerate components
|
|
277
|
-
writer.writeLine((0, displayNodeElement_1.displayNodeElement)(objectType, { format: "markdown" }));
|
|
278
|
-
for (const comp of objectType.getComponents()) {
|
|
279
|
-
writer.writeLine("\n\n#### " + comp.browseName.name.toString());
|
|
280
|
-
writer.writeLine("");
|
|
281
|
-
writer.writeLine(d(comp));
|
|
282
|
-
}
|
|
283
|
-
for (const comp of objectType.getProperties()) {
|
|
284
|
-
writer.writeLine("\n\n#### " + comp.browseName.name.toString());
|
|
285
|
-
writer.writeLine("");
|
|
286
|
-
writer.writeLine(d(comp));
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
// -------------- writeVariableType
|
|
291
|
-
if (variableTypes.length > 0) {
|
|
292
|
-
writer.writeLine("");
|
|
293
|
-
writer.writeLine("## VariableTypes");
|
|
294
|
-
writer.writeLine("");
|
|
295
|
-
for (const variableType of variableTypes) {
|
|
296
|
-
writer.writeLine("\n\n### " + variableType.browseName.name.toString());
|
|
297
|
-
writer.writeLine(d(variableType));
|
|
298
|
-
writer.writeLine("");
|
|
299
|
-
if (options.dumpGraphics) {
|
|
300
|
-
yield options.dumpGraphics(writer, variableType);
|
|
301
|
-
}
|
|
302
|
-
// enumerate components
|
|
303
|
-
writer.writeLine((0, displayNodeElement_1.displayNodeElement)(variableType, { format: "markdown" }));
|
|
304
|
-
for (const reference of variableType.allReferences()) {
|
|
305
|
-
const n = reference.node;
|
|
306
|
-
writer.writeLine("\n\n#### " + n.browseName.name.toString());
|
|
307
|
-
writer.writeLine("");
|
|
308
|
-
writer.writeLine(d(n));
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
exports.buildDocumentation = buildDocumentation;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.buildDocumentation = exports.extractTypes = exports.buildDocumentationToString = exports.Writer = void 0;
|
|
13
|
+
const node_opcua_basic_types_1 = require("node-opcua-basic-types");
|
|
14
|
+
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
15
|
+
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
16
|
+
const displayNodeElement_1 = require("./displayNodeElement");
|
|
17
|
+
const tableHelper_1 = require("./tableHelper");
|
|
18
|
+
class Writer {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.stream = [];
|
|
21
|
+
/* empty */
|
|
22
|
+
}
|
|
23
|
+
writeLine(str) {
|
|
24
|
+
this.stream.push(str);
|
|
25
|
+
}
|
|
26
|
+
toString() {
|
|
27
|
+
return this.stream.join("\n");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.Writer = Writer;
|
|
31
|
+
function buildDocumentationToString(namespace, options) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
const writer = new Writer();
|
|
34
|
+
yield buildDocumentation(namespace, writer, options);
|
|
35
|
+
return writer.toString();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
exports.buildDocumentationToString = buildDocumentationToString;
|
|
39
|
+
const toDataTypeStr = (p) => {
|
|
40
|
+
if (p.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
|
|
41
|
+
const v = p;
|
|
42
|
+
const arr = v.valueRank == 1 ? "[]" : "";
|
|
43
|
+
const brn = toDataTypeStr(p.dataTypeObj);
|
|
44
|
+
return brn + arr;
|
|
45
|
+
}
|
|
46
|
+
if (p.nodeClass === node_opcua_data_model_1.NodeClass.DataType) {
|
|
47
|
+
const dataType = p;
|
|
48
|
+
const brn = dataType.browseName.toString();
|
|
49
|
+
return brn;
|
|
50
|
+
}
|
|
51
|
+
return "";
|
|
52
|
+
};
|
|
53
|
+
function dataTypeEnumerationToMarkdown(dataType) {
|
|
54
|
+
const writer = new Writer();
|
|
55
|
+
writer.writeLine("");
|
|
56
|
+
if (dataType.description) {
|
|
57
|
+
writer.writeLine(dataType.description.text || "");
|
|
58
|
+
}
|
|
59
|
+
writer.writeLine(`\nThe fields of the ${dataType.browseName.name} DataType are defined in the following table:`);
|
|
60
|
+
writer.writeLine("");
|
|
61
|
+
const definition = dataType.getEnumDefinition();
|
|
62
|
+
writer.writeLine("\nBasic Type: " + node_opcua_variant_1.DataType[node_opcua_variant_1.DataType.Int32]);
|
|
63
|
+
writer.writeLine("");
|
|
64
|
+
const table = new tableHelper_1.TableHelper(["Name", "Value", "Description"]);
|
|
65
|
+
for (const f of definition.fields || []) {
|
|
66
|
+
table.push([f.name, (0, node_opcua_basic_types_1.coerceUInt32)(f.value[1]), f.description.text || ""]);
|
|
67
|
+
}
|
|
68
|
+
writer.writeLine(table.toMarkdownTable());
|
|
69
|
+
const str = dumpTypeRepresentation(dataType);
|
|
70
|
+
writer.writeLine(str);
|
|
71
|
+
return writer.toString();
|
|
72
|
+
}
|
|
73
|
+
function dumpTypeRepresentation(uaType) {
|
|
74
|
+
var _a;
|
|
75
|
+
const className = node_opcua_data_model_1.NodeClass[uaType.nodeClass];
|
|
76
|
+
const writer = new Writer();
|
|
77
|
+
writer.writeLine("\n");
|
|
78
|
+
writer.writeLine(`\nThe representation of the ${uaType.browseName.name} ${className} in the address space is shown in the following table:`);
|
|
79
|
+
const table = new tableHelper_1.TableHelper(["Name", "Attribute"]);
|
|
80
|
+
table.push(["NodeId", uaType.nodeId.toString()]);
|
|
81
|
+
table.push(["NamespaceUri", uaType.addressSpace.getNamespaceUri(uaType.nodeId.namespace)]);
|
|
82
|
+
table.push(["BrowseName", uaType.browseName.name.toString()]);
|
|
83
|
+
table.push(["NodeClass", node_opcua_data_model_1.NodeClass[uaType.nodeClass]]);
|
|
84
|
+
if (uaType.nodeClass === node_opcua_data_model_1.NodeClass.ReferenceType) {
|
|
85
|
+
table.push(["InverseName", uaType.inverseName.text]);
|
|
86
|
+
// table.push(["IsSymmetric", (uaType as UAReferenceType).isSymetric ? "Yes" : "No"]);
|
|
87
|
+
}
|
|
88
|
+
table.push(["IsAbstract", uaType.isAbstract ? "Yes" : "No"]);
|
|
89
|
+
table.push(["SubtypeOf", uaType.subtypeOfObj ? uaType.subtypeOfObj.browseName.toString() : ""]);
|
|
90
|
+
writer.writeLine("");
|
|
91
|
+
writer.writeLine(table.toMarkdownTable());
|
|
92
|
+
writer.writeLine("");
|
|
93
|
+
// forward refereces
|
|
94
|
+
{
|
|
95
|
+
const properties = uaType.findReferencesExAsObject("HasProperty");
|
|
96
|
+
const table = new tableHelper_1.TableHelper(["Reference", "NodeClass", "BrowseName", "DataType", "TypeDefinition", "ModellingRule"]);
|
|
97
|
+
if (uaType.subtypeOfObj) {
|
|
98
|
+
const referenceName = "HasSubType";
|
|
99
|
+
const p = uaType.subtypeOfObj;
|
|
100
|
+
const nodeClass = node_opcua_data_model_1.NodeClass[p.nodeClass];
|
|
101
|
+
const browseName = p.browseName.toString();
|
|
102
|
+
const dataTypeStr = toDataTypeStr(p);
|
|
103
|
+
const modellingRule = p.modellingRule || "";
|
|
104
|
+
const typeDefinitionName = "";
|
|
105
|
+
table.push([referenceName, nodeClass, browseName, dataTypeStr, typeDefinitionName, modellingRule]);
|
|
106
|
+
}
|
|
107
|
+
if (properties.length > 0) {
|
|
108
|
+
writer.writeLine(`\nThe reference of the ${uaType.browseName.name} ${className} is shown in the following table:`);
|
|
109
|
+
writer.writeLine("");
|
|
110
|
+
for (const p of properties) {
|
|
111
|
+
const referenceName = "HasProperty";
|
|
112
|
+
const nodeClass = node_opcua_data_model_1.NodeClass[p.nodeClass];
|
|
113
|
+
const browseName = p.browseName.toString();
|
|
114
|
+
const dataTypeStr = toDataTypeStr(p);
|
|
115
|
+
const typeDefinitionName = (_a = p.typeDefinitionObj) === null || _a === void 0 ? void 0 : _a.browseName.toString();
|
|
116
|
+
const modellingRule = p.modellingRule || "";
|
|
117
|
+
table.push([referenceName, nodeClass, browseName, dataTypeStr, typeDefinitionName, modellingRule]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
writer.writeLine("");
|
|
121
|
+
writer.writeLine(table.toMarkdownTable());
|
|
122
|
+
writer.writeLine("");
|
|
123
|
+
}
|
|
124
|
+
return writer.toString();
|
|
125
|
+
}
|
|
126
|
+
function dataTypeStructureToMarkdown(dataType) {
|
|
127
|
+
const addressSpace = dataType.addressSpace;
|
|
128
|
+
const writer = new Writer();
|
|
129
|
+
writer.writeLine("");
|
|
130
|
+
if (dataType.description) {
|
|
131
|
+
writer.writeLine(dataType.description.text || "");
|
|
132
|
+
}
|
|
133
|
+
const definition = dataType.getStructureDefinition();
|
|
134
|
+
writer.writeLine("\nBasic Type: " + node_opcua_variant_1.DataType[dataType.basicDataType]);
|
|
135
|
+
writer.writeLine("");
|
|
136
|
+
writer.writeLine(`The fields of the ${dataType.browseName.name} DataType are defined in the following table:`);
|
|
137
|
+
const c = (f) => {
|
|
138
|
+
var _a;
|
|
139
|
+
let dataTypeString = addressSpace.findDataType(f.dataType).browseName.toString();
|
|
140
|
+
if (f.valueRank === 1) {
|
|
141
|
+
dataTypeString += "[]";
|
|
142
|
+
}
|
|
143
|
+
else if (f.valueRank >= 2) {
|
|
144
|
+
dataTypeString += "[" + ((_a = f.arrayDimensions) === null || _a === void 0 ? void 0 : _a.map((d) => "" + d).join(" ")) + "]";
|
|
145
|
+
}
|
|
146
|
+
// f.maxStringLength ? f.maxStringLength : "",
|
|
147
|
+
// f.arrayDimensions ? f.arrayDimensions : "",
|
|
148
|
+
return dataTypeString;
|
|
149
|
+
};
|
|
150
|
+
const table = new tableHelper_1.TableHelper(["Name", "Type", "Description"]);
|
|
151
|
+
table.push([dataType.browseName.name, "Structure"]);
|
|
152
|
+
for (const f of definition.fields || []) {
|
|
153
|
+
table.push([" " + f.name, c(f), (f.description.text || "").replace(/\n/g, "<br>")]);
|
|
154
|
+
}
|
|
155
|
+
writer.writeLine(table.toMarkdownTable());
|
|
156
|
+
const str = dumpTypeRepresentation(dataType);
|
|
157
|
+
writer.writeLine(str);
|
|
158
|
+
return writer.toString();
|
|
159
|
+
}
|
|
160
|
+
function dataTypeToMarkdown(dataType) {
|
|
161
|
+
if (dataType.isEnumeration()) {
|
|
162
|
+
return dataTypeEnumerationToMarkdown(dataType);
|
|
163
|
+
}
|
|
164
|
+
else if (dataType.isStructure()) {
|
|
165
|
+
return dataTypeStructureToMarkdown(dataType);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
const writer = new Writer();
|
|
169
|
+
writer.writeLine("");
|
|
170
|
+
if (dataType.description) {
|
|
171
|
+
writer.writeLine(dataType.description.text || "");
|
|
172
|
+
}
|
|
173
|
+
writer.writeLine("\nBasic Type: " + node_opcua_variant_1.DataType[dataType.basicDataType]);
|
|
174
|
+
writer.writeLine("");
|
|
175
|
+
return writer.toString();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function dumpReferenceType(referenceType) {
|
|
179
|
+
const writer = new Writer();
|
|
180
|
+
const str = dumpTypeRepresentation(referenceType);
|
|
181
|
+
writer.writeLine(str);
|
|
182
|
+
return writer.toString();
|
|
183
|
+
}
|
|
184
|
+
function extractTypes(namespace, options) {
|
|
185
|
+
const namespacePriv = namespace;
|
|
186
|
+
if (!options || !options.node) {
|
|
187
|
+
const dataTypes = [...namespacePriv._dataTypeIterator()];
|
|
188
|
+
const objectTypes = [...namespacePriv._objectTypeIterator()];
|
|
189
|
+
const variableTypes = [...namespacePriv._variableTypeIterator()];
|
|
190
|
+
const referenceTypes = [...namespacePriv._referenceTypeIterator()];
|
|
191
|
+
return { dataTypes, variableTypes, objectTypes, referenceTypes };
|
|
192
|
+
}
|
|
193
|
+
const node = options.node;
|
|
194
|
+
if (node.nodeClass === node_opcua_data_model_1.NodeClass.DataType) {
|
|
195
|
+
const dataTypes = [];
|
|
196
|
+
let dataType = node;
|
|
197
|
+
dataTypes.push(dataType);
|
|
198
|
+
while (dataType.subtypeOfObj && dataType.subtypeOfObj.nodeId.namespace === namespace.index) {
|
|
199
|
+
dataType = dataType.subtypeOfObj;
|
|
200
|
+
dataTypes.push(dataType);
|
|
201
|
+
}
|
|
202
|
+
return { dataTypes, variableTypes: [], objectTypes: [], dataTypeNode: [], referenceTypes: [] };
|
|
203
|
+
}
|
|
204
|
+
else if (node.nodeClass === node_opcua_data_model_1.NodeClass.ObjectType) {
|
|
205
|
+
const objectTypes = [];
|
|
206
|
+
let objectType = node;
|
|
207
|
+
objectTypes.push(objectType);
|
|
208
|
+
while (objectType.subtypeOfObj && objectType.subtypeOfObj.nodeId.namespace === namespace.index) {
|
|
209
|
+
objectType = objectType.subtypeOfObj;
|
|
210
|
+
objectTypes.push(objectType);
|
|
211
|
+
}
|
|
212
|
+
return { dataTypes: [], variableTypes: [], objectTypes, dataTypeNode: [], referenceTypes: [] };
|
|
213
|
+
}
|
|
214
|
+
else if (node.nodeClass === node_opcua_data_model_1.NodeClass.VariableType) {
|
|
215
|
+
const variableTypes = [];
|
|
216
|
+
let variableType = node;
|
|
217
|
+
variableTypes.push(variableType);
|
|
218
|
+
while (variableType.subtypeOfObj && variableType.subtypeOfObj.nodeId.namespace === namespace.index) {
|
|
219
|
+
variableType = variableType.subtypeOfObj;
|
|
220
|
+
variableTypes.push(variableType);
|
|
221
|
+
}
|
|
222
|
+
return { dataTypes: [], variableTypes, objectTypes: [], dataTypeNode: [], referenceTypes: [] };
|
|
223
|
+
}
|
|
224
|
+
const dataTypes = [...namespacePriv._dataTypeIterator()];
|
|
225
|
+
const objectTypes = [...namespacePriv._objectTypeIterator()];
|
|
226
|
+
const variableTypes = [...namespacePriv._variableTypeIterator()];
|
|
227
|
+
const referenceTypes = [...namespacePriv._referenceTypeIterator()];
|
|
228
|
+
return { dataTypes, variableTypes, objectTypes, referenceTypes };
|
|
229
|
+
}
|
|
230
|
+
exports.extractTypes = extractTypes;
|
|
231
|
+
function buildDocumentation(namespace, writer, options) {
|
|
232
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
233
|
+
options = options || {};
|
|
234
|
+
const namespacePriv = namespace;
|
|
235
|
+
const namespaceUri = namespace.namespaceUri;
|
|
236
|
+
// -------- Documentation
|
|
237
|
+
const { dataTypes, objectTypes, variableTypes } = extractTypes(namespace, options);
|
|
238
|
+
writer.writeLine("");
|
|
239
|
+
writer.writeLine("# Namespace " + namespaceUri);
|
|
240
|
+
writer.writeLine("");
|
|
241
|
+
// -------------- writeReferences
|
|
242
|
+
if (namespacePriv._referenceTypeCount() > 0) {
|
|
243
|
+
writer.writeLine("");
|
|
244
|
+
writer.writeLine("## References ");
|
|
245
|
+
writer.writeLine("");
|
|
246
|
+
for (const referenceType of namespacePriv._referenceTypeIterator()) {
|
|
247
|
+
writer.writeLine("\n\n### reference " + referenceType.browseName.name);
|
|
248
|
+
dumpReferenceType(referenceType);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function d(node) {
|
|
252
|
+
return node.description && node.description.text ? node.description.text.toString() : "";
|
|
253
|
+
}
|
|
254
|
+
// -------------- writeDataType
|
|
255
|
+
if (dataTypes.length > 0) {
|
|
256
|
+
writer.writeLine("");
|
|
257
|
+
writer.writeLine("## DataTypes");
|
|
258
|
+
writer.writeLine("");
|
|
259
|
+
for (const dataType of dataTypes) {
|
|
260
|
+
writer.writeLine("\n\n### " + dataType.browseName.name.toString());
|
|
261
|
+
writer.writeLine("");
|
|
262
|
+
writer.writeLine(dataTypeToMarkdown(dataType));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// -------------- writeObjectType
|
|
266
|
+
if (objectTypes.length > 0) {
|
|
267
|
+
writer.writeLine("");
|
|
268
|
+
writer.writeLine("## ObjectTypes");
|
|
269
|
+
writer.writeLine("");
|
|
270
|
+
for (const objectType of objectTypes) {
|
|
271
|
+
writer.writeLine("\n\n### " + objectType.browseName.name.toString());
|
|
272
|
+
writer.writeLine(d(objectType));
|
|
273
|
+
if (options.dumpGraphics) {
|
|
274
|
+
yield options.dumpGraphics(writer, objectType);
|
|
275
|
+
}
|
|
276
|
+
// enumerate components
|
|
277
|
+
writer.writeLine((0, displayNodeElement_1.displayNodeElement)(objectType, { format: "markdown" }));
|
|
278
|
+
for (const comp of objectType.getComponents()) {
|
|
279
|
+
writer.writeLine("\n\n#### " + comp.browseName.name.toString());
|
|
280
|
+
writer.writeLine("");
|
|
281
|
+
writer.writeLine(d(comp));
|
|
282
|
+
}
|
|
283
|
+
for (const comp of objectType.getProperties()) {
|
|
284
|
+
writer.writeLine("\n\n#### " + comp.browseName.name.toString());
|
|
285
|
+
writer.writeLine("");
|
|
286
|
+
writer.writeLine(d(comp));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// -------------- writeVariableType
|
|
291
|
+
if (variableTypes.length > 0) {
|
|
292
|
+
writer.writeLine("");
|
|
293
|
+
writer.writeLine("## VariableTypes");
|
|
294
|
+
writer.writeLine("");
|
|
295
|
+
for (const variableType of variableTypes) {
|
|
296
|
+
writer.writeLine("\n\n### " + variableType.browseName.name.toString());
|
|
297
|
+
writer.writeLine(d(variableType));
|
|
298
|
+
writer.writeLine("");
|
|
299
|
+
if (options.dumpGraphics) {
|
|
300
|
+
yield options.dumpGraphics(writer, variableType);
|
|
301
|
+
}
|
|
302
|
+
// enumerate components
|
|
303
|
+
writer.writeLine((0, displayNodeElement_1.displayNodeElement)(variableType, { format: "markdown" }));
|
|
304
|
+
for (const reference of variableType.allReferences()) {
|
|
305
|
+
const n = reference.node;
|
|
306
|
+
writer.writeLine("\n\n#### " + n.browseName.name.toString());
|
|
307
|
+
writer.writeLine("");
|
|
308
|
+
writer.writeLine(d(n));
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
exports.buildDocumentation = buildDocumentation;
|
|
315
315
|
//# sourceMappingURL=generate_markdown_doc.js.map
|