node-opcua-client-dynamic-extension-object 2.76.2 → 2.78.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/convert_data_type_definition_to_structuretype_schema.d.ts +3 -3
- package/dist/convert_data_type_definition_to_structuretype_schema.js +16 -12
- package/dist/convert_data_type_definition_to_structuretype_schema.js.map +1 -1
- package/dist/convert_structuretype_schema_to_structure_definition.d.ts +3 -0
- package/dist/convert_structuretype_schema_to_structure_definition.js +54 -0
- package/dist/convert_structuretype_schema_to_structure_definition.js.map +1 -0
- package/dist/extra_data_type_manager.js +4 -1
- package/dist/extra_data_type_manager.js.map +1 -1
- package/dist/get_extension_object_constructor.js +3 -3
- package/dist/get_extension_object_constructor.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/private/populate_data_type_manager_103.js +62 -23
- package/dist/private/populate_data_type_manager_103.js.map +1 -1
- package/dist/private/populate_data_type_manager_104.js +24 -9
- package/dist/private/populate_data_type_manager_104.js.map +1 -1
- package/dist/resolve_dynamic_extension_object.d.ts +2 -0
- package/dist/resolve_dynamic_extension_object.js +79 -6
- package/dist/resolve_dynamic_extension_object.js.map +1 -1
- package/package.json +18 -18
- package/source/convert_data_type_definition_to_structuretype_schema.ts +28 -16
- package/source/convert_structuretype_schema_to_structure_definition.ts +51 -0
- package/source/extra_data_type_manager.ts +4 -1
- package/source/get_extension_object_constructor.ts +3 -3
- package/source/index.ts +1 -0
- package/source/private/populate_data_type_manager_103.ts +73 -28
- package/source/private/populate_data_type_manager_104.ts +26 -10
- package/source/resolve_dynamic_extension_object.ts +94 -6
- package/test/test_convertStructureTypeSchemaToStructureDefinition.ts +117 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate_data_type_manager_104.js","sourceRoot":"","sources":["../../source/private/populate_data_type_manager_104.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"populate_data_type_manager_104.js","sourceRoot":"","sources":["../../source/private/populate_data_type_manager_104.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iEAAsE;AACtE,uDAAgE;AAEhE,yDAAsE;AAEtE,2DAAiH;AACjH,mEAAqD;AAKrD,kIAGiE;AACjE,MAAM,QAAQ,GAAG,IAAA,gCAAa,EAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,QAAQ,GAAG,IAAA,gCAAa,EAAC,UAAU,CAAC,CAAC;AAE3C,SAAsB,kCAAkC,CACpD,OAAsB,EACtB,cAAsB,EACtB,IAAY,EACZ,eAAgC,EAChC,KAAiD;;QAEjD,IAAI;YACA,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAC1E;oBACI,WAAW,EAAE,oCAAY,CAAC,UAAU;oBACpC,MAAM,EAAE,cAAc;iBACzB;gBACD;oBACI,WAAW,EAAE,oCAAY,CAAC,kBAAkB;oBAC5C,MAAM,EAAE,cAAc;iBACzB;aACJ,CAAC,CAAC;YACH,0BAA0B;YAC1B,IAAI,mBAAmB,CAAC,UAAU,KAAK,oCAAW,CAAC,IAAI,EAAE;gBACrD,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;aACnG;YACD,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAgB,CAAC;YAE9D,0BAA0B;YAC1B,IAAI,2BAA2B,CAAC,UAAU,KAAK,oCAAW,CAAC,IAAI,EAAE;gBAC7D,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;aACnG;YACD,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,KAAK,CAAC,KAAK,CAAC;YAEnE,MAAM,MAAM,GAAG,MAAM,IAAA,qGAA8C,EAC/D,OAAO,EACP,cAAc,EACd,IAAI,EACJ,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,KAAK,CACR,CAAC;YACF,IAAI,UAAU,EAAE;gBACZ,yCAAyC;gBACzC,eAAe,CAAC,yBAAyB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;aAE3E;iBAAM;gBACH,MAAM,WAAW,GAAG,IAAA,mDAAyC,EAAC,MAAM,EAAE,eAAe,CAAC,CAAC;aAC1F;SACJ;QAAC,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SAC1B;IACL,CAAC;CAAA;AAjDD,gFAiDC;AAED,MAAM,OAAO;IAAb;QACqB,aAAQ,GAA4B,EAAE,CAAC;QAChD,iBAAY,GAAG,KAAK,CAAC;QACrB,aAAQ,GAA6B,SAAS,CAAC;IAsC3D,CAAC;IApCS,aAAa;;YACf,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAG,CAAC;YACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,MAAM,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,YAAY,CAAC,GAAS,EAAE;oBACpB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC/B,CAAC,CAAA,CAAC,CAAC;aACN;iBAAM;gBACH,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACjC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;oBAC1B,UAAU,EAAE,CAAC;iBAChB;aACJ;QACL,CAAC;KAAA;IACD;;;;OAIG;IACI,YAAY,CAAC,QAA6B;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAClD,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IACY,iBAAiB;;YAC1B,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACtC;YACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;CACJ;AAED,SAAe,2BAA2B,CACtC,OAAsB,EACtB,MAAc,EACd,yBAAmD,EACnD,MAAoD;;QAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAE9B,IAAI,oBAAoB,GAA4B,EAAE,CAAC;QACvD,IAAI,yBAAyB,GAAa,EAAE,CAAC;QAE7C,SAAS,mBAAmB,CAAC,aAA6B;YACtD,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;gBAChC,IAAI,MAAM,CAAC,UAAU,KAAK,oCAAW,CAAC,IAAI,EAAE;oBACxC,IAAI,MAAM,CAAC,iBAAiB,EAAE;wBAC1B,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;wBACzD,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;qBACrC;oBACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE;wBACrC,OAAO,CAAC,YAAY,CAAC,GAAS,EAAE;4BAC5B,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;wBACpB,CAAC,CAAA,CAAC,CAAC;wBACH,yBAAyB;wBACzB,4BAA4B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;qBAC1C;iBACJ;aACJ;QACL,CAAC;QACD,SAAe,WAAW;;gBACtB,IAAI,yBAAyB,CAAC,MAAM,EAAE;oBAClC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;oBACrD,yBAAyB,GAAG,EAAE,CAAC;oBAC/B,OAAO,CAAC,YAAY,CAAC,GAAS,EAAE;wBAC5B,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;wBAC1E,mBAAmB,CAAC,aAAa,CAAC,CAAC;oBACvC,CAAC,CAAA,CAAC,CAAC;iBACN;qBAAM,IAAI,oBAAoB,CAAC,MAAM,EAAE;oBACpC,MAAM,aAAa,GAAG,oBAAoB,CAAC;oBAC3C,oBAAoB,GAAG,EAAE,CAAC;oBAC1B,OAAO,CAAC,YAAY,CAAC,GAAS,EAAE;wBAC5B,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;wBAC1D,mBAAmB,CAAC,aAAa,CAAC,CAAC;oBACvC,CAAC,CAAA,CAAC,CAAC;iBACN;YACL,CAAC;SAAA;QAED,SAAS,4BAA4B,CAAC,MAAc;YAChD,MAAM,YAAY,mCACX,yBAAyB,KAC5B,MAAM,GACT,CAAC;YACF,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACxC,OAAO,CAAC,YAAY,CAAC,GAAS,EAAE;gBAC5B,WAAW,EAAE,CAAC;YAClB,CAAC,CAAA,CAAC,CAAC;QACP,CAAC;QACD,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAC;IACtC,CAAC;CAAA;AACD,SAAsB,0BAA0B,CAAC,OAAsB,EAAE,eAAqC;;QAC1G,MAAM,KAAK,GAA+C,EAAE,CAAC;QAE7D,SAAe,YAAY,CAAC,CAAuB;;gBAC/C,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;gBAChC,IAAI;oBACA,MAAM,eAAe,GAAG,eAAe,CAAC,kBAAkB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;oBACrF,IAAI,cAAc,CAAC,SAAS,KAAK,CAAC,EAAE;wBAChC,wBAAwB;wBACxB,OAAO;qBACV;oBACD,uBAAuB;oBACvB,IAAI,eAAe,CAAC,2BAA2B,CAAC,cAAc,CAAC,EAAE;wBAC7D,kBAAkB;wBAClB,OAAO;qBACV;oBACD,sBAAsB;oBACtB,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC9E,MAAM,kCAAkC,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC,IAAK,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;iBACjH;gBAAC,OAAO,GAAG,EAAE;oBACV,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;iBACzB;YACL,CAAC;SAAA;QAED,MAAM,YAAY,GAA6B;YAC3C,MAAM,EAAE,0BAAM,CAAC,UAAU;YACzB,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,uCAAe,CAAC,OAAO;YACxC,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,IAAA,iCAAa,EAAC,YAAY,CAAC;YAC5C,UAAU,EAAE,IAAI;SACnB,CAAC;QACF,MAAM,2BAA2B,CAAC,OAAO,EAAE,IAAA,iCAAa,EAAC,WAAW,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACvG,CAAC;CAAA;AAjCD,gEAiCC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { ExtensionObject } from "node-opcua-extension-object";
|
|
1
2
|
import { Variant } from "node-opcua-variant";
|
|
2
3
|
import { IBasicSession } from "node-opcua-pseudo-session";
|
|
3
4
|
import { ExtraDataTypeManager } from "./extra_data_type_manager";
|
|
5
|
+
export declare function resolveOpaqueStructureInExtentionObject(session: IBasicSession, dataTypeManager: ExtraDataTypeManager, object: ExtensionObject): Promise<void>;
|
|
4
6
|
export declare function resolveDynamicExtensionObject(session: IBasicSession, variant: Variant, dataTypeManager: ExtraDataTypeManager): Promise<void>;
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.resolveDynamicExtensionObject = void 0;
|
|
12
|
+
exports.resolveDynamicExtensionObject = exports.resolveOpaqueStructureInExtentionObject = void 0;
|
|
13
13
|
const node_opcua_binary_stream_1 = require("node-opcua-binary-stream");
|
|
14
14
|
const node_opcua_extension_object_1 = require("node-opcua-extension-object");
|
|
15
15
|
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
@@ -42,15 +42,87 @@ function getOrExtractConstructor(session, binaryEncodingNodeId, dataTypeManager)
|
|
|
42
42
|
}
|
|
43
43
|
const r = browseResult.references[0];
|
|
44
44
|
const dataTypeNodeId = r.nodeId;
|
|
45
|
-
if (dataTypeFactory.
|
|
45
|
+
if (dataTypeFactory.getStructureInfoForDataType(dataTypeNodeId)) {
|
|
46
46
|
throw new Error("Internal Error: we are not expecting this dataType to be processed already");
|
|
47
47
|
}
|
|
48
48
|
yield (0, populate_data_type_manager_104_1.readDataTypeDefinitionAndBuildType)(session, dataTypeNodeId, r.browseName.name, dataTypeFactory, {});
|
|
49
|
-
|
|
49
|
+
const structureInfo = dataTypeFactory.getStructureInfoForDataType(dataTypeNodeId);
|
|
50
|
+
if (!structureInfo.constructor) {
|
|
51
|
+
throw new Error("Cannot find constructor for abstract DataType");
|
|
52
|
+
}
|
|
53
|
+
return structureInfo.constructor;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function resolveOpaqueStructureInExtentionObject(session, dataTypeManager, object) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
const schema = object.schema;
|
|
59
|
+
function fixOpaqueStructureOnElement(element, field, data, args) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
if (element instanceof node_opcua_variant_1.Variant) {
|
|
62
|
+
yield resolveDynamicExtensionObject(session, element, dataTypeManager);
|
|
63
|
+
return element;
|
|
64
|
+
}
|
|
65
|
+
if (!(element instanceof node_opcua_extension_object_1.OpaqueStructure)) {
|
|
66
|
+
return element;
|
|
67
|
+
}
|
|
68
|
+
const variant = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.ExtensionObject, value: element });
|
|
69
|
+
yield resolveDynamicExtensionObject(session, variant, dataTypeManager);
|
|
70
|
+
return variant.value;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function fixOpaqueStructure(object, field, data, args) {
|
|
74
|
+
if (field.category === "complex" && !field.allowSubType) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (field.category === "basic" && field.fieldType !== "Variant") {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
console.log("field", field.name, field.category, field.fieldType);
|
|
81
|
+
const a = object[field.name];
|
|
82
|
+
if (!a) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (field.isArray) {
|
|
86
|
+
for (let i = 0; i < a.length; i++) {
|
|
87
|
+
const x = a[i];
|
|
88
|
+
promises.push((() => __awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
a[i] = yield fixOpaqueStructureOnElement(x, field, data, args);
|
|
90
|
+
}))());
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
promises.push((() => __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
object[field.name] = yield fixOpaqueStructureOnElement(a, field, data, args);
|
|
96
|
+
}))());
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const promises = [];
|
|
100
|
+
object.applyOnAllFields(fixOpaqueStructure, { dataTypeManager, promises });
|
|
101
|
+
yield Promise.all(promises);
|
|
50
102
|
});
|
|
51
103
|
}
|
|
104
|
+
exports.resolveOpaqueStructureInExtentionObject = resolveOpaqueStructureInExtentionObject;
|
|
105
|
+
// async function resolveInnerVariantType(session: IBasicSession, object: ExtensionObject, dataTypeManager: ExtraDataTypeManager) {
|
|
106
|
+
// console.log("object = ", object.constructor.name);
|
|
107
|
+
// const fields = object.schema.fields;
|
|
108
|
+
// const _object = object as unknown as Record<string, unknown>;
|
|
109
|
+
// for (const field of fields) {
|
|
110
|
+
// console.log("field = ", field.name);
|
|
111
|
+
// if (field.category !== "complex") continue;
|
|
112
|
+
// const p = _object[field.name];
|
|
113
|
+
// if (p === undefined || p === null) continue;
|
|
114
|
+
// console.log("=>", field.name, (p as any).toString());
|
|
115
|
+
// if (p instanceof ExtensionObject) {
|
|
116
|
+
// resolveInnerVariantType(session, p, dataTypeManager);
|
|
117
|
+
// }
|
|
118
|
+
// if (p instanceof Variant && p.value instanceof OpaqueStructure) {
|
|
119
|
+
// console.log("§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§");
|
|
120
|
+
// p.value = resolveDynamicExtensionObjectV(session, p.value, dataTypeManager);
|
|
121
|
+
// }
|
|
122
|
+
// }
|
|
123
|
+
// }
|
|
52
124
|
function resolveDynamicExtensionObjectV(session, opaque, dataTypeManager) {
|
|
53
|
-
var _a
|
|
125
|
+
var _a;
|
|
54
126
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
127
|
try {
|
|
56
128
|
const Constructor = yield getOrExtractConstructor(session, opaque.nodeId, dataTypeManager);
|
|
@@ -58,12 +130,13 @@ function resolveDynamicExtensionObjectV(session, opaque, dataTypeManager) {
|
|
|
58
130
|
const stream = new node_opcua_binary_stream_1.BinaryStream(opaque.buffer);
|
|
59
131
|
try {
|
|
60
132
|
object.decode(stream);
|
|
133
|
+
yield resolveOpaqueStructureInExtentionObject(session, dataTypeManager, object);
|
|
61
134
|
return object;
|
|
62
135
|
}
|
|
63
136
|
catch (err) {
|
|
64
137
|
warningLog("Constructor = ", Constructor.name);
|
|
65
138
|
warningLog("opaqueStructure = ", (_a = opaque === null || opaque === void 0 ? void 0 : opaque.nodeId) === null || _a === void 0 ? void 0 : _a.toString());
|
|
66
|
-
warningLog("opaqueStructure = ",
|
|
139
|
+
warningLog("opaqueStructure = ", (0, node_opcua_debug_1.hexDump)(opaque.buffer, 132, 100));
|
|
67
140
|
warningLog((0, node_opcua_debug_1.hexDump)(opaque.buffer));
|
|
68
141
|
warningLog("resolveDynamicExtensionObjectV err = ", err);
|
|
69
142
|
// try again for debugging
|
|
@@ -74,7 +147,7 @@ function resolveDynamicExtensionObjectV(session, opaque, dataTypeManager) {
|
|
|
74
147
|
catch (err) {
|
|
75
148
|
warningLog("err", err);
|
|
76
149
|
warningLog("opaqueStructure = ", opaque.nodeId.toString());
|
|
77
|
-
warningLog("opaqueStructure = ", "0x" + opaque.buffer
|
|
150
|
+
warningLog("opaqueStructure = ", "0x" + (0, node_opcua_debug_1.hexDump)(opaque.buffer, 132, 100));
|
|
78
151
|
warningLog((0, node_opcua_debug_1.hexDump)(opaque.buffer));
|
|
79
152
|
warningLog(dataTypeManager.toString());
|
|
80
153
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve_dynamic_extension_object.js","sourceRoot":"","sources":["../source/resolve_dynamic_extension_object.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uEAAwD;AACxD,6EAA+E;AAC/E,2DAAyE;AACzE,uDAA4D;AAI5D,iEAAmF;AACnF,mEAAqD;AAGrD,6FAA8F;AAE9F,MAAM,UAAU,GAAG,IAAA,kCAAe,EAAC,UAAU,CAAC,CAAC;AAE/C,SAAe,uBAAuB,CAClC,OAAsB,EACtB,oBAA4B,EAC5B,eAAqC;;QAErC,MAAM,eAAe,GAAG,eAAe,CAAC,8BAA8B,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve_dynamic_extension_object.js","sourceRoot":"","sources":["../source/resolve_dynamic_extension_object.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-opcua-client-dynamic-extension-object",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.78.0",
|
|
4
4
|
"description": "pure nodejs OPCUA SDK - module client-dynamic-extension-object",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc -b",
|
|
9
|
-
"clean": "npx rimraf dist *.tsbuildinfo",
|
|
9
|
+
"clean": "npx rimraf node_modules dist *.tsbuildinfo",
|
|
10
10
|
"test": "echo no test"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"chalk": "4.1.2",
|
|
14
|
-
"node-opcua-assert": "2.
|
|
15
|
-
"node-opcua-binary-stream": "2.
|
|
16
|
-
"node-opcua-data-model": "2.
|
|
17
|
-
"node-opcua-data-value": "2.
|
|
18
|
-
"node-opcua-debug": "2.
|
|
19
|
-
"node-opcua-extension-object": "2.
|
|
20
|
-
"node-opcua-factory": "2.
|
|
21
|
-
"node-opcua-nodeid": "2.
|
|
22
|
-
"node-opcua-pseudo-session": "2.
|
|
23
|
-
"node-opcua-schemas": "2.
|
|
24
|
-
"node-opcua-service-browse": "2.
|
|
25
|
-
"node-opcua-service-translate-browse-path": "2.
|
|
26
|
-
"node-opcua-status-code": "2.
|
|
27
|
-
"node-opcua-types": "2.
|
|
28
|
-
"node-opcua-variant": "2.
|
|
14
|
+
"node-opcua-assert": "2.77.0",
|
|
15
|
+
"node-opcua-binary-stream": "2.77.0",
|
|
16
|
+
"node-opcua-data-model": "2.78.0",
|
|
17
|
+
"node-opcua-data-value": "2.78.0",
|
|
18
|
+
"node-opcua-debug": "2.77.0",
|
|
19
|
+
"node-opcua-extension-object": "2.78.0",
|
|
20
|
+
"node-opcua-factory": "2.78.0",
|
|
21
|
+
"node-opcua-nodeid": "2.77.0",
|
|
22
|
+
"node-opcua-pseudo-session": "2.78.0",
|
|
23
|
+
"node-opcua-schemas": "2.78.0",
|
|
24
|
+
"node-opcua-service-browse": "2.78.0",
|
|
25
|
+
"node-opcua-service-translate-browse-path": "2.78.0",
|
|
26
|
+
"node-opcua-status-code": "2.77.0",
|
|
27
|
+
"node-opcua-types": "2.78.0",
|
|
28
|
+
"node-opcua-variant": "2.78.0"
|
|
29
29
|
},
|
|
30
30
|
"author": "Etienne Rossignon",
|
|
31
31
|
"license": "MIT",
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"internet of things"
|
|
43
43
|
],
|
|
44
44
|
"homepage": "http://node-opcua.github.io/",
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "31c6eee3c51f52427584364fff2fdb07bbac65be"
|
|
46
46
|
}
|
|
@@ -3,11 +3,15 @@ import { AttributeIds, BrowseDirection, makeResultMask, NodeClassMask } from "no
|
|
|
3
3
|
import { DataValue } from "node-opcua-data-value";
|
|
4
4
|
import { make_debugLog, make_errorLog, make_warningLog } from "node-opcua-debug";
|
|
5
5
|
import {
|
|
6
|
+
BitField,
|
|
7
|
+
ConstructorFuncWithSchema,
|
|
6
8
|
DataTypeFactory,
|
|
7
9
|
EnumerationDefinitionSchema,
|
|
10
|
+
extractAllPossibleFields,
|
|
8
11
|
FieldCategory,
|
|
9
12
|
FieldInterfaceOptions,
|
|
10
13
|
getBuiltInType,
|
|
14
|
+
IStructuredTypeSchema,
|
|
11
15
|
StructuredTypeSchema,
|
|
12
16
|
TypeDefinition
|
|
13
17
|
} from "node-opcua-factory";
|
|
@@ -187,7 +191,7 @@ async function resolve2(
|
|
|
187
191
|
};
|
|
188
192
|
if (category === FieldCategory.enumeration) {
|
|
189
193
|
if (definition instanceof EnumDefinition) {
|
|
190
|
-
const e = new EnumerationDefinitionSchema({
|
|
194
|
+
const e = new EnumerationDefinitionSchema(dataTypeNodeId, {
|
|
191
195
|
enumValues: convert(definition.fields),
|
|
192
196
|
name: fieldTypeName
|
|
193
197
|
});
|
|
@@ -196,12 +200,14 @@ async function resolve2(
|
|
|
196
200
|
schema = e;
|
|
197
201
|
}
|
|
198
202
|
} else {
|
|
203
|
+
const isAbstract = false;
|
|
199
204
|
schema = await convertDataTypeDefinitionToStructureTypeSchema(
|
|
200
205
|
session,
|
|
201
206
|
dataTypeNodeId,
|
|
202
207
|
fieldTypeName,
|
|
203
208
|
definition,
|
|
204
209
|
dataTypeFactory,
|
|
210
|
+
isAbstract,
|
|
205
211
|
cache
|
|
206
212
|
);
|
|
207
213
|
}
|
|
@@ -298,7 +304,7 @@ async function resolveFieldType(
|
|
|
298
304
|
let schema: TypeDefinition | undefined;
|
|
299
305
|
let category: FieldCategory = FieldCategory.enumeration;
|
|
300
306
|
|
|
301
|
-
if (dataTypeFactory.
|
|
307
|
+
if (dataTypeFactory.hasStructureByTypeName(fieldTypeName!)) {
|
|
302
308
|
schema = dataTypeFactory.getStructuredTypeSchema(fieldTypeName);
|
|
303
309
|
category = FieldCategory.complex;
|
|
304
310
|
} else if (dataTypeFactory.hasBuiltInType(fieldTypeName!)) {
|
|
@@ -333,12 +339,11 @@ async function resolveFieldType(
|
|
|
333
339
|
async function _setupEncodings(
|
|
334
340
|
session: IBasicSession,
|
|
335
341
|
dataTypeNodeId: NodeId,
|
|
336
|
-
schema:
|
|
337
|
-
): Promise<
|
|
342
|
+
schema: IStructuredTypeSchema
|
|
343
|
+
): Promise<IStructuredTypeSchema> {
|
|
338
344
|
// read abstract flag
|
|
339
345
|
const isAbstractDV = await session.read({ nodeId: dataTypeNodeId, attributeId: AttributeIds.IsAbstract });
|
|
340
346
|
schema.dataTypeNodeId = dataTypeNodeId;
|
|
341
|
-
schema.id = dataTypeNodeId;
|
|
342
347
|
|
|
343
348
|
if (isAbstractDV.statusCode === StatusCodes.Good && isAbstractDV.value.value === false) {
|
|
344
349
|
const encodings = await _findEncodings(session, dataTypeNodeId);
|
|
@@ -356,15 +361,22 @@ export async function convertDataTypeDefinitionToStructureTypeSchema(
|
|
|
356
361
|
name: string,
|
|
357
362
|
definition: DataTypeDefinition,
|
|
358
363
|
dataTypeFactory: DataTypeFactory,
|
|
364
|
+
isAbstract: boolean,
|
|
359
365
|
cache: { [key: string]: CacheForFieldResolution }
|
|
360
|
-
): Promise<
|
|
366
|
+
): Promise<IStructuredTypeSchema> {
|
|
361
367
|
if (definition instanceof StructureDefinition) {
|
|
362
368
|
let fieldCountToIgnore = 0;
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
369
|
+
const structureInfo = dataTypeFactory.getStructureInfoForDataType(definition.baseDataType);
|
|
370
|
+
const baseSchema: IStructuredTypeSchema | undefined | null = structureInfo?.schema;
|
|
371
|
+
|
|
372
|
+
if (baseSchema) {
|
|
373
|
+
const possibleFields = extractAllPossibleFields(baseSchema);
|
|
374
|
+
fieldCountToIgnore += possibleFields.length;
|
|
367
375
|
}
|
|
376
|
+
// while (base && !(base.dataTypeNodeId.value === DataType.ExtensionObject && base.dataTypeNodeId.namespace === 0)) {
|
|
377
|
+
// fieldCountToIgnore += base..length;
|
|
378
|
+
// base = base.getBaseSchema();
|
|
379
|
+
// }
|
|
368
380
|
|
|
369
381
|
const fields: FieldInterfaceOptions[] = [];
|
|
370
382
|
|
|
@@ -386,9 +398,9 @@ export async function convertDataTypeDefinitionToStructureTypeSchema(
|
|
|
386
398
|
let switchValue = 1;
|
|
387
399
|
let switchBit = 0;
|
|
388
400
|
|
|
389
|
-
const bitFields:
|
|
401
|
+
const bitFields: BitField[] | undefined = isUnion ? undefined : [];
|
|
390
402
|
|
|
391
|
-
const postActions: ((schema:
|
|
403
|
+
const postActions: ((schema: IStructuredTypeSchema) => void)[] = [];
|
|
392
404
|
|
|
393
405
|
if (definition.fields) {
|
|
394
406
|
for (let i = fieldCountToIgnore; i < definition.fields.length; i++) {
|
|
@@ -405,7 +417,7 @@ export async function convertDataTypeDefinitionToStructureTypeSchema(
|
|
|
405
417
|
(field.fieldType = fieldTypeName!), (field.category = FieldCategory.complex);
|
|
406
418
|
fields.push(field);
|
|
407
419
|
const capturedField = field;
|
|
408
|
-
postActions.push((schema:
|
|
420
|
+
postActions.push((schema: IStructuredTypeSchema) => {
|
|
409
421
|
capturedField.schema = schema;
|
|
410
422
|
});
|
|
411
423
|
continue;
|
|
@@ -439,8 +451,8 @@ export async function convertDataTypeDefinitionToStructureTypeSchema(
|
|
|
439
451
|
baseType,
|
|
440
452
|
bitFields,
|
|
441
453
|
fields,
|
|
442
|
-
|
|
443
|
-
|
|
454
|
+
name,
|
|
455
|
+
dataTypeFactory
|
|
444
456
|
});
|
|
445
457
|
const structuredTypeSchema = await _setupEncodings(session, dataTypeNodeId, os);
|
|
446
458
|
|
|
@@ -453,7 +465,7 @@ export async function convertDataTypeDefinitionToStructureTypeSchema(
|
|
|
453
465
|
function createField(
|
|
454
466
|
fieldD: StructureField,
|
|
455
467
|
switchBit: number,
|
|
456
|
-
bitFields:
|
|
468
|
+
bitFields: BitField[] | undefined,
|
|
457
469
|
isUnion: boolean,
|
|
458
470
|
switchValue: number
|
|
459
471
|
): { field: FieldInterfaceOptions; switchBit: number; switchValue: number } {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { CommonInterface, FieldCategory, FieldEnumeration, FieldType, IStructuredTypeSchema } from "node-opcua-factory";
|
|
2
|
+
import { StructureDefinition, StructureType, StructureDefinitionOptions, StructureFieldOptions } from "node-opcua-types";
|
|
3
|
+
import { NodeId, resolveNodeId } from "node-opcua-nodeid";
|
|
4
|
+
import { DataType } from "node-opcua-variant";
|
|
5
|
+
|
|
6
|
+
function _getDataType(field: FieldType): NodeId {
|
|
7
|
+
switch (field.category) {
|
|
8
|
+
case FieldCategory.complex:
|
|
9
|
+
return resolveNodeId((field.schema as any).dataTypeNodeId);
|
|
10
|
+
case FieldCategory.basic:
|
|
11
|
+
return resolveNodeId(field.fieldType);
|
|
12
|
+
case FieldCategory.enumeration:
|
|
13
|
+
default:
|
|
14
|
+
return resolveNodeId(field.dataType!);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function convertStructureTypeSchemaToStructureDefinition(st: IStructuredTypeSchema): StructureDefinition {
|
|
19
|
+
|
|
20
|
+
let structureType = StructureType.Invalid;
|
|
21
|
+
let isUnion = false;
|
|
22
|
+
if (st.baseType === "Union") {
|
|
23
|
+
structureType = StructureType.Union;
|
|
24
|
+
isUnion = true;
|
|
25
|
+
} else {
|
|
26
|
+
structureType = StructureType.Structure;
|
|
27
|
+
}
|
|
28
|
+
// convert partial field (not including base class)
|
|
29
|
+
const structureDefinition: StructureDefinitionOptions = {
|
|
30
|
+
fields: [],
|
|
31
|
+
baseDataType: st.getBaseSchema()?.dataTypeNodeId,
|
|
32
|
+
defaultEncodingId: st.encodingDefaultBinary,
|
|
33
|
+
structureType
|
|
34
|
+
};
|
|
35
|
+
const fields: StructureFieldOptions[] = structureDefinition.fields || [];
|
|
36
|
+
for (const f of st.fields) {
|
|
37
|
+
const dataType = _getDataType(f);
|
|
38
|
+
if (isUnion && f.originalName === "SwitchField") {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
fields.push({
|
|
42
|
+
arrayDimensions: f.isArray ? [] : undefined,
|
|
43
|
+
valueRank: f.isArray ? 1 : -1,
|
|
44
|
+
dataType,
|
|
45
|
+
isOptional: isUnion ? undefined: f.switchValue !== undefined,
|
|
46
|
+
description: f.documentation || undefined,
|
|
47
|
+
name: f.originalName
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return new StructureDefinition(structureDefinition);
|
|
51
|
+
}
|
|
@@ -51,7 +51,10 @@ export class ExtraDataTypeManager {
|
|
|
51
51
|
throw new Error("cannot find dataFactory for namespace=" + dataTypeNodeId.namespace);
|
|
52
52
|
}
|
|
53
53
|
// find schema corresponding to dataTypeNodeId in typeDictionary
|
|
54
|
-
const Constructor = dataTypeFactory.
|
|
54
|
+
const Constructor = dataTypeFactory.findStructureInfoForDataType(dataTypeNodeId).constructor;
|
|
55
|
+
if (!Constructor) {
|
|
56
|
+
throw new Error("Cannot find Extension Object Constructor for Abstract dataType");
|
|
57
|
+
}
|
|
55
58
|
return Constructor;
|
|
56
59
|
}
|
|
57
60
|
|
|
@@ -13,9 +13,9 @@ export async function getExtensionObjectConstructor(session: IBasicSession, data
|
|
|
13
13
|
const extraDataTypeManager = await getExtraDataTypeManager(session);
|
|
14
14
|
|
|
15
15
|
const dataTypeFactory = extraDataTypeManager.getDataTypeFactory(dataTypeNodeId.namespace);
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
18
|
-
return
|
|
16
|
+
const structureInfo = dataTypeFactory.getStructureInfoForDataType(dataTypeNodeId);
|
|
17
|
+
if (structureInfo) {
|
|
18
|
+
return structureInfo.constructor as unknown as AnyConstructorFunc;
|
|
19
19
|
}
|
|
20
20
|
const dataValue = await session.read({
|
|
21
21
|
nodeId: dataTypeNodeId,
|
package/source/index.ts
CHANGED
|
@@ -9,4 +9,5 @@ export * from "./get_extension_object_constructor";
|
|
|
9
9
|
export * from "./get_extra_data_type_manager";
|
|
10
10
|
export * from "./resolve_dynamic_extension_object";
|
|
11
11
|
export * from "./convert_data_type_definition_to_structuretype_schema";
|
|
12
|
+
export * from "./convert_structuretype_schema_to_structure_definition";
|
|
12
13
|
export * from "./promote_opaque_structure_in_notification_data";
|