node-opcua-client-dynamic-extension-object 2.183.0 → 2.184.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/convert_data_type_definition_to_structuretype_schema.d.ts +1 -0
- package/dist/convert_data_type_definition_to_structuretype_schema.d.ts.map +1 -0
- package/dist/convert_data_type_definition_to_structuretype_schema.js +82 -85
- package/dist/convert_data_type_definition_to_structuretype_schema.js.map +1 -1
- package/dist/convert_structuretype_schema_to_structure_definition.d.ts +1 -0
- package/dist/convert_structuretype_schema_to_structure_definition.d.ts.map +1 -0
- package/dist/convert_structuretype_schema_to_structure_definition.js +13 -16
- package/dist/convert_structuretype_schema_to_structure_definition.js.map +1 -1
- package/dist/extra_data_type_manager.d.ts +16 -0
- package/dist/extra_data_type_manager.d.ts.map +1 -0
- package/dist/extra_data_type_manager.js +56 -21
- package/dist/extra_data_type_manager.js.map +1 -1
- package/dist/get_extension_object_constructor.d.ts +1 -0
- package/dist/get_extension_object_constructor.d.ts.map +1 -0
- package/dist/get_extension_object_constructor.js +7 -10
- package/dist/get_extension_object_constructor.js.map +1 -1
- package/dist/get_extra_data_type_manager.d.ts +1 -0
- package/dist/get_extra_data_type_manager.d.ts.map +1 -0
- package/dist/get_extra_data_type_manager.js +21 -27
- package/dist/get_extra_data_type_manager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -25
- package/dist/index.js.map +1 -1
- package/dist/populate_data_type_manager.d.ts +1 -0
- package/dist/populate_data_type_manager.d.ts.map +1 -0
- package/dist/populate_data_type_manager.js +44 -49
- package/dist/populate_data_type_manager.js.map +1 -1
- package/dist/private/find_encodings.d.ts +1 -0
- package/dist/private/find_encodings.d.ts.map +1 -0
- package/dist/private/find_encodings.js +12 -15
- package/dist/private/find_encodings.js.map +1 -1
- package/dist/private/populate_data_type_manager_103.d.ts +1 -0
- package/dist/private/populate_data_type_manager_103.d.ts.map +1 -0
- package/dist/private/populate_data_type_manager_103.js +88 -94
- package/dist/private/populate_data_type_manager_103.js.map +1 -1
- package/dist/private/populate_data_type_manager_104.d.ts +1 -0
- package/dist/private/populate_data_type_manager_104.d.ts.map +1 -0
- package/dist/private/populate_data_type_manager_104.js +35 -39
- package/dist/private/populate_data_type_manager_104.js.map +1 -1
- package/dist/promote_opaque_structure.d.ts +1 -0
- package/dist/promote_opaque_structure.d.ts.map +1 -0
- package/dist/promote_opaque_structure.js +12 -16
- package/dist/promote_opaque_structure.js.map +1 -1
- package/dist/promote_opaque_structure_in_notification_data.d.ts +1 -0
- package/dist/promote_opaque_structure_in_notification_data.d.ts.map +1 -0
- package/dist/promote_opaque_structure_in_notification_data.js +9 -12
- package/dist/promote_opaque_structure_in_notification_data.js.map +1 -1
- package/dist/resolve_dynamic_extension_object.d.ts +1 -0
- package/dist/resolve_dynamic_extension_object.d.ts.map +1 -0
- package/dist/resolve_dynamic_extension_object.js +16 -20
- package/dist/resolve_dynamic_extension_object.js.map +1 -1
- package/package.json +19 -18
- package/source/extra_data_type_manager.ts +49 -4
- package/source/get_extra_data_type_manager.ts +3 -3
- package/source/private/populate_data_type_manager_103.ts +1 -1
- package/source/private/populate_data_type_manager_104.ts +1 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ExtraDataTypeManager = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* @module node-opcua-client-dynamic-extension-object
|
|
6
3
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
import { format } from "node:util";
|
|
5
|
+
import { assert } from "node-opcua-assert";
|
|
6
|
+
import { BrowseDirection, NodeClassMask, ResultMask } from "node-opcua-data-model";
|
|
7
|
+
import { make_warningLog } from "node-opcua-debug";
|
|
8
|
+
import { getStandardDataTypeFactory } from "node-opcua-factory";
|
|
9
|
+
import { readDataTypeDefinitionAndBuildType } from "./private/populate_data_type_manager_104.js";
|
|
10
|
+
const warningLog = make_warningLog("ExtraDataTypeManager");
|
|
11
|
+
export class ExtraDataTypeManager {
|
|
12
12
|
namespaceArray = [];
|
|
13
13
|
dataTypeFactoryMapByNamespace = {};
|
|
14
14
|
_session = null;
|
|
@@ -27,27 +27,67 @@ class ExtraDataTypeManager {
|
|
|
27
27
|
}
|
|
28
28
|
registerDataTypeFactory(namespaceIndex, dataTypeFactory) {
|
|
29
29
|
/* c8 ignore next */
|
|
30
|
-
|
|
30
|
+
assert(namespaceIndex !== 0, "registerTypeDictionary cannot be used for namespace 0");
|
|
31
31
|
if (this.hasDataTypeFactory(namespaceIndex)) {
|
|
32
32
|
throw new Error("Dictionary already registered");
|
|
33
33
|
}
|
|
34
34
|
this.dataTypeFactoryMapByNamespace[namespaceIndex] = dataTypeFactory;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Forget the factory of a namespace, and with it every structure, enumeration and
|
|
38
|
+
* ExtensionObject constructor that namespace registered.
|
|
39
|
+
*
|
|
40
|
+
* A namespace that is emptied and loaded again (see `IAddressSpace.deleteNamespace`) must
|
|
41
|
+
* come back to a manager that has no memory of the previous load: `registerDataTypeFactory`
|
|
42
|
+
* refuses a second factory for the same index, and the schemas of the old load carry the
|
|
43
|
+
* NodeIds of nodes that no longer exist.
|
|
44
|
+
*
|
|
45
|
+
* Namespace 0 has no factory of its own - it is served by the standard one - and is refused.
|
|
46
|
+
*
|
|
47
|
+
* A factory that other namespaces list among their base factories keeps being referenced by
|
|
48
|
+
* them; those namespaces have to be re-extracted as well if they used its types.
|
|
49
|
+
*/
|
|
50
|
+
unregisterDataTypeFactory(namespaceIndex) {
|
|
51
|
+
/* c8 ignore next */
|
|
52
|
+
if (namespaceIndex === 0) {
|
|
53
|
+
throw new Error("unregisterDataTypeFactory cannot be used for namespace 0");
|
|
54
|
+
}
|
|
55
|
+
const dropped = this.dataTypeFactoryMapByNamespace[namespaceIndex];
|
|
56
|
+
if (!dropped) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
delete this.dataTypeFactoryMapByNamespace[namespaceIndex];
|
|
60
|
+
// A namespace whose types are built on this one keeps the factory just dropped in its
|
|
61
|
+
// fallback chain, and will go on resolving those types through schemas of the load that
|
|
62
|
+
// has gone. Nothing fails when that happens, which is why it is said out loud here: the
|
|
63
|
+
// dependent namespaces have to be extracted again too.
|
|
64
|
+
const dependents = [];
|
|
65
|
+
for (const [key, factory] of Object.entries(this.dataTypeFactoryMapByNamespace)) {
|
|
66
|
+
if (factory.getBaseDataFactories().includes(dropped)) {
|
|
67
|
+
dependents.push(Number.parseInt(key, 10));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (dependents.length) {
|
|
71
|
+
warningLog(`unregisterDataTypeFactory: namespace ${namespaceIndex} (${dropped.targetNamespace}) is a base of ` +
|
|
72
|
+
`namespace(s) ${dependents.join(", ")}, whose DataType factories now refer to a discarded one. ` +
|
|
73
|
+
"Those namespaces must be reloaded as well.");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
36
76
|
getDataTypeFactoryForNamespace(namespaceIndex) {
|
|
37
77
|
if (namespaceIndex === 0) {
|
|
38
|
-
return
|
|
78
|
+
return getStandardDataTypeFactory();
|
|
39
79
|
}
|
|
40
80
|
return this.dataTypeFactoryMapByNamespace[namespaceIndex];
|
|
41
81
|
}
|
|
42
82
|
getDataTypeFactory(namespaceIndex) {
|
|
43
83
|
if (namespaceIndex === 0) {
|
|
44
|
-
return
|
|
84
|
+
return getStandardDataTypeFactory();
|
|
45
85
|
}
|
|
46
86
|
return this.dataTypeFactoryMapByNamespace[namespaceIndex];
|
|
47
87
|
}
|
|
48
88
|
getBuiltInType(fieldTypeName) {
|
|
49
89
|
// fallback to standard factory
|
|
50
|
-
const standardDataTypeFactory =
|
|
90
|
+
const standardDataTypeFactory = getStandardDataTypeFactory();
|
|
51
91
|
if (standardDataTypeFactory.hasBuiltInType(fieldTypeName)) {
|
|
52
92
|
return standardDataTypeFactory.getBuiltInType(fieldTypeName);
|
|
53
93
|
}
|
|
@@ -75,10 +115,6 @@ class ExtraDataTypeManager {
|
|
|
75
115
|
}
|
|
76
116
|
const session = this._session;
|
|
77
117
|
const promise = (async () => {
|
|
78
|
-
// We'll need to make sure it's accessible and correctly used.
|
|
79
|
-
// For now, let's assume we can import it or move it.
|
|
80
|
-
// Actually, populate_data_type_manager_104.ts exports readDataTypeDefinitionAndBuildType
|
|
81
|
-
const { readDataTypeDefinitionAndBuildType } = require("./private/populate_data_type_manager_104");
|
|
82
118
|
const cache = {}; // local cache for this extraction
|
|
83
119
|
await readDataTypeDefinitionAndBuildType(session, dataTypeNodeId, undefined, this, cache);
|
|
84
120
|
const info = this.getStructureInfoForDataType(dataTypeNodeId);
|
|
@@ -138,10 +174,10 @@ class ExtraDataTypeManager {
|
|
|
138
174
|
const browseResult = await this._session.browse({
|
|
139
175
|
nodeId: binaryEncodingNodeId,
|
|
140
176
|
referenceTypeId: "HasEncoding",
|
|
141
|
-
browseDirection:
|
|
177
|
+
browseDirection: BrowseDirection.Inverse,
|
|
142
178
|
includeSubtypes: false,
|
|
143
|
-
nodeClassMask:
|
|
144
|
-
resultMask:
|
|
179
|
+
nodeClassMask: NodeClassMask.DataType,
|
|
180
|
+
resultMask: ResultMask.BrowseName
|
|
145
181
|
});
|
|
146
182
|
if (browseResult.statusCode.isNotGood() || !browseResult.references || browseResult.references.length !== 1) {
|
|
147
183
|
throw new Error(`Cannot find DataType for binary encoding ${binaryEncodingNodeId.toString()}`);
|
|
@@ -157,7 +193,7 @@ class ExtraDataTypeManager {
|
|
|
157
193
|
toString() {
|
|
158
194
|
const l = [];
|
|
159
195
|
function write(...args) {
|
|
160
|
-
l.push(
|
|
196
|
+
l.push(format.apply(format, args));
|
|
161
197
|
}
|
|
162
198
|
write("ExtraDataTypeManager");
|
|
163
199
|
for (let n = 0; n < this.namespaceArray.length; n++) {
|
|
@@ -171,5 +207,4 @@ class ExtraDataTypeManager {
|
|
|
171
207
|
return l.join("\n");
|
|
172
208
|
}
|
|
173
209
|
}
|
|
174
|
-
exports.ExtraDataTypeManager = ExtraDataTypeManager;
|
|
175
210
|
//# sourceMappingURL=extra_data_type_manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extra_data_type_manager.js","sourceRoot":"","sources":["../source/extra_data_type_manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extra_data_type_manager.js","sourceRoot":"","sources":["../source/extra_data_type_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_extension_object_constructor.d.ts","sourceRoot":"","sources":["../source/get_extension_object_constructor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAK7D;;GAEG;AACH,wBAAsB,6BAA6B,CAC/C,OAAO,EAAE,mBAAmB,EAC5B,cAAc,EAAE,MAAM,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAmB7B"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getExtensionObjectConstructor = getExtensionObjectConstructor;
|
|
4
|
-
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
1
|
+
import { AttributeIds } from "node-opcua-data-model";
|
|
5
2
|
//
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import { getExtraDataTypeManager } from "./get_extra_data_type_manager.js";
|
|
4
|
+
import { readDataTypeDefinitionAndBuildType } from "./private/populate_data_type_manager_104.js";
|
|
8
5
|
/**
|
|
9
6
|
*
|
|
10
7
|
*/
|
|
11
|
-
async function getExtensionObjectConstructor(session, dataTypeNodeId) {
|
|
12
|
-
const dataTypeManager = await
|
|
8
|
+
export async function getExtensionObjectConstructor(session, dataTypeNodeId) {
|
|
9
|
+
const dataTypeManager = await getExtraDataTypeManager(session);
|
|
13
10
|
const dataTypeFactory = dataTypeManager.getDataTypeFactory(dataTypeNodeId.namespace);
|
|
14
11
|
const structureInfo = dataTypeFactory.getStructureInfoForDataType(dataTypeNodeId);
|
|
15
12
|
if (structureInfo) {
|
|
@@ -17,13 +14,13 @@ async function getExtensionObjectConstructor(session, dataTypeNodeId) {
|
|
|
17
14
|
}
|
|
18
15
|
const dataValue = await session.read({
|
|
19
16
|
nodeId: dataTypeNodeId,
|
|
20
|
-
attributeId:
|
|
17
|
+
attributeId: AttributeIds.BrowseName
|
|
21
18
|
});
|
|
22
19
|
const browseName = dataValue.value.value;
|
|
23
20
|
if (!browseName.name) {
|
|
24
21
|
throw new Error(`Unexpected: BrowseName has no name for nodeId ${dataTypeNodeId.toString()}`);
|
|
25
22
|
}
|
|
26
|
-
await
|
|
23
|
+
await readDataTypeDefinitionAndBuildType(session, dataTypeNodeId, browseName.name, dataTypeManager, {});
|
|
27
24
|
return await dataTypeManager.getExtensionObjectConstructorFromDataType(dataTypeNodeId);
|
|
28
25
|
}
|
|
29
26
|
//# sourceMappingURL=get_extension_object_constructor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_extension_object_constructor.js","sourceRoot":"","sources":["../source/get_extension_object_constructor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_extension_object_constructor.js","sourceRoot":"","sources":["../source/get_extension_object_constructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAIzE,EAAE;AACF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AAEjG;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAC/C,OAA4B,EAC5B,cAAsB;IAEtB,MAAM,eAAe,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAE/D,MAAM,eAAe,GAAG,eAAe,CAAC,kBAAkB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACrF,MAAM,aAAa,GAAG,eAAe,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC;IAClF,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,aAAa,CAAC,WAA4C,CAAC;IACtE,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;QACjC,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,YAAY,CAAC,UAAU;KACvC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,KAAsB,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,iDAAiD,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,MAAM,kCAAkC,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IAExG,OAAO,MAAM,eAAe,CAAC,yCAAyC,CAAC,cAAc,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -14,3 +14,4 @@ export declare function invalidateExtraDataTypeManager(session: IBasicSessionAsy
|
|
|
14
14
|
export declare function hasBoostedSession(session: IBasicSessionAsync2): boolean;
|
|
15
15
|
export declare function getSessionForDataTypeManagerExtraction(session: IBasicSessionAsync2): IBasicSessionAsync2;
|
|
16
16
|
export declare function getExtraDataTypeManager(session: IBasicSessionAsync2, strategy?: DataTypeExtractStrategy): Promise<ExtraDataTypeManager>;
|
|
17
|
+
//# sourceMappingURL=get_extra_data_type_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_extra_data_type_manager.d.ts","sourceRoot":"","sources":["../source/get_extra_data_type_manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAqB,KAAK,mBAAmB,EAAsB,MAAM,2BAA2B,CAAC;AAE5G,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAA2B,MAAM,iCAAiC,CAAC;AAOnG,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACnE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,sBAAsB,CAAC,EAAE,oBAAoB,CAAC;IAC9C,+BAA+B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,oBAAoB,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;IAE9F,iCAAiC,CAAC,EAAE,MAAM,mBAAmB,CAAC;IAE9D,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAE7F,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,wBAAsB,8BAA8B,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhG;AA0CD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAGvE;AACD,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CAMxG;AAUD,wBAAsB,uBAAuB,CACzC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,CAAC,EAAE,uBAAuB,GACnC,OAAO,CAAC,oBAAoB,CAAC,CAyC/B"}
|
|
@@ -1,22 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.hasBoostedSession = hasBoostedSession;
|
|
5
|
-
exports.getSessionForDataTypeManagerExtraction = getSessionForDataTypeManagerExtraction;
|
|
6
|
-
exports.getExtraDataTypeManager = getExtraDataTypeManager;
|
|
7
|
-
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
8
|
-
const node_opcua_factory_1 = require("node-opcua-factory");
|
|
9
|
-
const node_opcua_pseudo_session_1 = require("node-opcua-pseudo-session");
|
|
1
|
+
import { checkDebugFlag, make_debugLog, make_errorLog } from "node-opcua-debug";
|
|
2
|
+
import { DataTypeFactory, getStandardDataTypeFactory } from "node-opcua-factory";
|
|
3
|
+
import { clearSessionCache, readNamespaceArray } from "node-opcua-pseudo-session";
|
|
10
4
|
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const doDebug =
|
|
14
|
-
const debugLog =
|
|
15
|
-
const errorLog =
|
|
5
|
+
import { ExtraDataTypeManager } from "./extra_data_type_manager.js";
|
|
6
|
+
import { DataTypeExtractStrategy, populateDataTypeManager } from "./populate_data_type_manager.js";
|
|
7
|
+
const doDebug = checkDebugFlag("get_extra_data_type_manager");
|
|
8
|
+
const debugLog = make_debugLog("get_extra_data_type_manager");
|
|
9
|
+
const errorLog = make_errorLog("get_extra_data_type_manager");
|
|
16
10
|
const warningLog = errorLog;
|
|
17
|
-
async function invalidateExtraDataTypeManager(session) {
|
|
11
|
+
export async function invalidateExtraDataTypeManager(session) {
|
|
18
12
|
const sessionPriv = session;
|
|
19
|
-
|
|
13
|
+
clearSessionCache(session);
|
|
20
14
|
sessionPriv.$$namespaceArray = undefined;
|
|
21
15
|
sessionPriv.$$extraDataTypeManager = undefined;
|
|
22
16
|
if (sessionPriv.$$extraDataTypeManagerToResolve) {
|
|
@@ -24,24 +18,24 @@ async function invalidateExtraDataTypeManager(session) {
|
|
|
24
18
|
}
|
|
25
19
|
}
|
|
26
20
|
async function extractDataTypeManagerPrivate(session, strategy) {
|
|
27
|
-
const namespaceArray = await
|
|
28
|
-
|
|
21
|
+
const namespaceArray = await readNamespaceArray(session);
|
|
22
|
+
/* c8 ignore next */
|
|
29
23
|
if (namespaceArray.length === 0) {
|
|
30
24
|
errorLog("namespaceArray is not populated ! Your server must expose a list of namespace ");
|
|
31
25
|
}
|
|
32
|
-
|
|
26
|
+
/* c8 ignore next */
|
|
33
27
|
if (doDebug) {
|
|
34
28
|
debugLog("Namespace Array = ", namespaceArray.join("\n "));
|
|
35
29
|
}
|
|
36
|
-
const dataTypeManager = new
|
|
30
|
+
const dataTypeManager = new ExtraDataTypeManager();
|
|
37
31
|
dataTypeManager.setSession(session);
|
|
38
32
|
dataTypeManager.setNamespaceArray(namespaceArray);
|
|
39
33
|
for (let namespaceIndex = 1; namespaceIndex < namespaceArray.length; namespaceIndex++) {
|
|
40
|
-
const dataTypeFactory1 = new
|
|
34
|
+
const dataTypeFactory1 = new DataTypeFactory([getStandardDataTypeFactory()]);
|
|
41
35
|
dataTypeManager.registerDataTypeFactory(namespaceIndex, dataTypeFactory1);
|
|
42
36
|
}
|
|
43
|
-
await
|
|
44
|
-
|
|
37
|
+
await populateDataTypeManager(session, dataTypeManager, strategy);
|
|
38
|
+
/* c8 ignore next */
|
|
45
39
|
if (dataTypeManager.namespaceArray.length === 0) {
|
|
46
40
|
throw new Error("namespaceArray is not populated ! Your server must expose a list of namespace ");
|
|
47
41
|
}
|
|
@@ -55,13 +49,13 @@ function getStrategy(session, strategy) {
|
|
|
55
49
|
if (client && client.dataTypeExtractStrategy !== undefined) {
|
|
56
50
|
return client.dataTypeExtractStrategy;
|
|
57
51
|
}
|
|
58
|
-
return
|
|
52
|
+
return DataTypeExtractStrategy.Auto;
|
|
59
53
|
}
|
|
60
|
-
function hasBoostedSession(session) {
|
|
54
|
+
export function hasBoostedSession(session) {
|
|
61
55
|
const _session = session;
|
|
62
56
|
return !!_session.$$getSessionForDataTypeExtraction || !!_session.session;
|
|
63
57
|
}
|
|
64
|
-
function getSessionForDataTypeManagerExtraction(session) {
|
|
58
|
+
export function getSessionForDataTypeManagerExtraction(session) {
|
|
65
59
|
const _session = session;
|
|
66
60
|
if (_session.$$getSessionForDataTypeExtraction) {
|
|
67
61
|
return _session.$$getSessionForDataTypeExtraction();
|
|
@@ -74,7 +68,7 @@ function followSession(session) {
|
|
|
74
68
|
}
|
|
75
69
|
return session;
|
|
76
70
|
}
|
|
77
|
-
async function getExtraDataTypeManager(session, strategy) {
|
|
71
|
+
export async function getExtraDataTypeManager(session, strategy) {
|
|
78
72
|
const sessionPriv = followSession(session);
|
|
79
73
|
if (sessionPriv.$$extraDataTypeManager) {
|
|
80
74
|
return sessionPriv.$$extraDataTypeManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_extra_data_type_manager.js","sourceRoot":"","sources":["../source/get_extra_data_type_manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_extra_data_type_manager.js","sourceRoot":"","sources":["../source/get_extra_data_type_manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;;GAEG;AAEH,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oDAAoD,CAAC;AACnE,cAAc,uCAAuC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/*!
|
|
3
2
|
* The MIT License (MIT)
|
|
4
3
|
* Copyright (c) 2022-2025 Sterfive SAS - 833264583 RCS ORLEANS - France (https://www.sterfive.com)
|
|
@@ -24,28 +23,13 @@
|
|
|
24
23
|
/**
|
|
25
24
|
* @module node-opcua-client-dynamic-extension-object
|
|
26
25
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
o[k2] = m[k];
|
|
37
|
-
}));
|
|
38
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
39
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
40
|
-
};
|
|
41
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
__exportStar(require("./convert_data_type_definition_to_structuretype_schema.js"), exports);
|
|
43
|
-
__exportStar(require("./convert_structuretype_schema_to_structure_definition.js"), exports);
|
|
44
|
-
__exportStar(require("./extra_data_type_manager.js"), exports);
|
|
45
|
-
__exportStar(require("./get_extension_object_constructor.js"), exports);
|
|
46
|
-
__exportStar(require("./get_extra_data_type_manager.js"), exports);
|
|
47
|
-
__exportStar(require("./populate_data_type_manager.js"), exports);
|
|
48
|
-
__exportStar(require("./promote_opaque_structure.js"), exports);
|
|
49
|
-
__exportStar(require("./promote_opaque_structure_in_notification_data.js"), exports);
|
|
50
|
-
__exportStar(require("./resolve_dynamic_extension_object.js"), exports);
|
|
26
|
+
export * from "./convert_data_type_definition_to_structuretype_schema.js";
|
|
27
|
+
export * from "./convert_structuretype_schema_to_structure_definition.js";
|
|
28
|
+
export * from "./extra_data_type_manager.js";
|
|
29
|
+
export * from "./get_extension_object_constructor.js";
|
|
30
|
+
export * from "./get_extra_data_type_manager.js";
|
|
31
|
+
export * from "./populate_data_type_manager.js";
|
|
32
|
+
export * from "./promote_opaque_structure.js";
|
|
33
|
+
export * from "./promote_opaque_structure_in_notification_data.js";
|
|
34
|
+
export * from "./resolve_dynamic_extension_object.js";
|
|
51
35
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;;GAEG;AAEH,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oDAAoD,CAAC;AACnE,cAAc,uCAAuC,CAAC"}
|
|
@@ -9,3 +9,4 @@ export declare enum DataTypeExtractStrategy {
|
|
|
9
9
|
Lazy = 4
|
|
10
10
|
}
|
|
11
11
|
export declare function populateDataTypeManager(session: IBasicSessionAsync2, dataTypeManager: ExtraDataTypeManager, strategy: DataTypeExtractStrategy): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=populate_data_type_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"populate_data_type_manager.d.ts","sourceRoot":"","sources":["../source/populate_data_type_manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,mBAAmB,EAAsB,MAAM,2BAA2B,CAAC;AAGzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AASzE,wBAAsB,kCAAkC,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAyFvG;AAED,oBAAY,uBAAuB;IAC/B,IAAI,IAAI;IACR,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,IAAI,IAAI;IACR,IAAI,IAAI;CACX;AAED,wBAAsB,uBAAuB,CACzC,OAAO,EAAE,mBAAmB,EAC5B,eAAe,EAAE,oBAAoB,EACrC,QAAQ,EAAE,uBAAuB,GAClC,OAAO,CAAC,IAAI,CAAC,CAqDf"}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const node_opcua_service_translate_browse_path_1 = require("node-opcua-service-translate-browse-path");
|
|
13
|
-
const populate_data_type_manager_103_js_1 = require("./private/populate_data_type_manager_103.js");
|
|
14
|
-
const populate_data_type_manager_104_js_1 = require("./private/populate_data_type_manager_104.js");
|
|
15
|
-
const doDebug = (0, node_opcua_debug_1.checkDebugFlag)("populateDataTypeManager");
|
|
16
|
-
const debugLog = (0, node_opcua_debug_1.make_debugLog)("populateDataTypeManager");
|
|
1
|
+
import { DataTypeIds, ObjectIds, VariableIds, VariableTypeIds } from "node-opcua-constants";
|
|
2
|
+
import { AttributeIds, BrowseDirection, NodeClassMask, ResultMask } from "node-opcua-data-model";
|
|
3
|
+
import { checkDebugFlag, make_debugLog } from "node-opcua-debug";
|
|
4
|
+
import { DataTypeFactory } from "node-opcua-factory";
|
|
5
|
+
import { resolveNodeId } from "node-opcua-nodeid";
|
|
6
|
+
import { readNamespaceArray } from "node-opcua-pseudo-session";
|
|
7
|
+
import { makeBrowsePath } from "node-opcua-service-translate-browse-path";
|
|
8
|
+
import { populateDataTypeManager103 } from "./private/populate_data_type_manager_103.js";
|
|
9
|
+
import { populateDataTypeManager104 } from "./private/populate_data_type_manager_104.js";
|
|
10
|
+
const doDebug = checkDebugFlag("populateDataTypeManager");
|
|
11
|
+
const debugLog = make_debugLog("populateDataTypeManager");
|
|
17
12
|
const ComplexTypes2017 = "http://opcfoundation.org/UA-Profile/Server/ComplexTypes2017";
|
|
18
|
-
async function serverImplementsDataTypeDefinition(session) {
|
|
13
|
+
export async function serverImplementsDataTypeDefinition(session) {
|
|
19
14
|
const dataValueServerCapabilities = await session.read({
|
|
20
|
-
nodeId:
|
|
21
|
-
attributeId:
|
|
15
|
+
nodeId: resolveNodeId(VariableIds.Server_ServerCapabilities_ServerProfileArray),
|
|
16
|
+
attributeId: AttributeIds.Value
|
|
22
17
|
});
|
|
23
18
|
const serverCapabilities = dataValueServerCapabilities.value?.value ?? [];
|
|
24
19
|
if (serverCapabilities.indexOf(ComplexTypes2017) >= 0) {
|
|
@@ -27,23 +22,23 @@ async function serverImplementsDataTypeDefinition(session) {
|
|
|
27
22
|
}
|
|
28
23
|
// Check if any non-deprecated 1.03 dictionary exists
|
|
29
24
|
const browseResult1 = await session.browse({
|
|
30
|
-
browseDirection:
|
|
25
|
+
browseDirection: BrowseDirection.Forward,
|
|
31
26
|
includeSubtypes: true,
|
|
32
|
-
nodeClassMask:
|
|
33
|
-
nodeId:
|
|
34
|
-
resultMask:
|
|
27
|
+
nodeClassMask: NodeClassMask.Variable,
|
|
28
|
+
nodeId: resolveNodeId(ObjectIds.OPCBinarySchema_TypeSystem),
|
|
29
|
+
resultMask: ResultMask.TypeDefinition
|
|
35
30
|
});
|
|
36
31
|
const references103 = browseResult1.references || [];
|
|
37
32
|
for (const ref of references103) {
|
|
38
33
|
const td = ref.typeDefinition;
|
|
39
|
-
if (td.namespace === 0 && td.value ===
|
|
40
|
-
const p = await session.translateBrowsePath(
|
|
34
|
+
if (td.namespace === 0 && td.value === VariableTypeIds.DataTypeDictionaryType) {
|
|
35
|
+
const p = await session.translateBrowsePath(makeBrowsePath(ref.nodeId, "/Deprecated"));
|
|
41
36
|
if (!p.statusCode.isGood() || !p.targets || p.targets.length === 0) {
|
|
42
37
|
doDebug && debugLog("server implements 1.03 dictionary but no Deprecated node found");
|
|
43
38
|
return false;
|
|
44
39
|
}
|
|
45
40
|
const deprecatedNodeId = p.targets[0].targetId;
|
|
46
|
-
const dataValue = await session.read({ nodeId: deprecatedNodeId, attributeId:
|
|
41
|
+
const dataValue = await session.read({ nodeId: deprecatedNodeId, attributeId: AttributeIds.Value });
|
|
47
42
|
if (dataValue.statusCode.isGood() && dataValue.value.value === false) {
|
|
48
43
|
doDebug && debugLog("server implements 1.03 dictionary but Deprecated node is true");
|
|
49
44
|
return false;
|
|
@@ -53,17 +48,17 @@ async function serverImplementsDataTypeDefinition(session) {
|
|
|
53
48
|
// Try to find AT LEAST ONE custom DataType and check its DataTypeDefinition
|
|
54
49
|
// We browse the Structure type (22) without recursion first
|
|
55
50
|
const browseResult2 = await session.browse({
|
|
56
|
-
browseDirection:
|
|
51
|
+
browseDirection: BrowseDirection.Forward,
|
|
57
52
|
includeSubtypes: true,
|
|
58
|
-
nodeClassMask:
|
|
59
|
-
nodeId:
|
|
60
|
-
referenceTypeId:
|
|
53
|
+
nodeClassMask: NodeClassMask.DataType,
|
|
54
|
+
nodeId: resolveNodeId(DataTypeIds.Structure),
|
|
55
|
+
referenceTypeId: resolveNodeId("HasSubtype"),
|
|
61
56
|
resultMask: 63
|
|
62
57
|
});
|
|
63
58
|
const references = browseResult2.references || [];
|
|
64
59
|
const customDataType = references.find((r) => r.nodeId.namespace !== 0);
|
|
65
60
|
if (customDataType) {
|
|
66
|
-
const dv = await session.read({ nodeId: customDataType.nodeId, attributeId:
|
|
61
|
+
const dv = await session.read({ nodeId: customDataType.nodeId, attributeId: AttributeIds.DataTypeDefinition });
|
|
67
62
|
if (dv.statusCode.isGood()) {
|
|
68
63
|
doDebug && debugLog("server implements 1.04 dictionary with custom DataType");
|
|
69
64
|
return true;
|
|
@@ -72,7 +67,7 @@ async function serverImplementsDataTypeDefinition(session) {
|
|
|
72
67
|
else {
|
|
73
68
|
const standardDataType = references.find((r) => r.nodeId.namespace === 0);
|
|
74
69
|
if (standardDataType) {
|
|
75
|
-
const dv = await session.read({ nodeId: standardDataType.nodeId, attributeId:
|
|
70
|
+
const dv = await session.read({ nodeId: standardDataType.nodeId, attributeId: AttributeIds.DataTypeDefinition });
|
|
76
71
|
if (dv.statusCode.isGood()) {
|
|
77
72
|
doDebug && debugLog("server implements 1.04 dictionary with standard DataType");
|
|
78
73
|
return true;
|
|
@@ -81,16 +76,16 @@ async function serverImplementsDataTypeDefinition(session) {
|
|
|
81
76
|
}
|
|
82
77
|
// If no custom type at first level, check Union too
|
|
83
78
|
const browseResult3 = await session.browse({
|
|
84
|
-
browseDirection:
|
|
79
|
+
browseDirection: BrowseDirection.Forward,
|
|
85
80
|
includeSubtypes: true,
|
|
86
|
-
nodeClassMask:
|
|
87
|
-
nodeId:
|
|
88
|
-
referenceTypeId:
|
|
81
|
+
nodeClassMask: NodeClassMask.DataType,
|
|
82
|
+
nodeId: resolveNodeId(DataTypeIds.Union),
|
|
83
|
+
referenceTypeId: resolveNodeId("HasSubtype"),
|
|
89
84
|
resultMask: 63
|
|
90
85
|
});
|
|
91
86
|
const customDataType2 = (browseResult3.references || []).find((r) => r.nodeId.namespace !== 0);
|
|
92
87
|
if (customDataType2) {
|
|
93
|
-
const dv = await session.read({ nodeId: customDataType2.nodeId, attributeId:
|
|
88
|
+
const dv = await session.read({ nodeId: customDataType2.nodeId, attributeId: AttributeIds.DataTypeDefinition });
|
|
94
89
|
if (dv.statusCode.isGood()) {
|
|
95
90
|
doDebug && debugLog("server implements 1.04 dictionary with custom Union");
|
|
96
91
|
return true;
|
|
@@ -99,15 +94,15 @@ async function serverImplementsDataTypeDefinition(session) {
|
|
|
99
94
|
doDebug && debugLog("server does not implement 1.04 dictionary or we cannot find any evidence of it");
|
|
100
95
|
return false;
|
|
101
96
|
}
|
|
102
|
-
var DataTypeExtractStrategy;
|
|
97
|
+
export var DataTypeExtractStrategy;
|
|
103
98
|
(function (DataTypeExtractStrategy) {
|
|
104
99
|
DataTypeExtractStrategy[DataTypeExtractStrategy["Auto"] = 0] = "Auto";
|
|
105
100
|
DataTypeExtractStrategy[DataTypeExtractStrategy["Force103"] = 1] = "Force103";
|
|
106
101
|
DataTypeExtractStrategy[DataTypeExtractStrategy["Force104"] = 2] = "Force104";
|
|
107
102
|
DataTypeExtractStrategy[DataTypeExtractStrategy["Both"] = 3] = "Both";
|
|
108
103
|
DataTypeExtractStrategy[DataTypeExtractStrategy["Lazy"] = 4] = "Lazy";
|
|
109
|
-
})(DataTypeExtractStrategy || (
|
|
110
|
-
async function populateDataTypeManager(session, dataTypeManager, strategy) {
|
|
104
|
+
})(DataTypeExtractStrategy || (DataTypeExtractStrategy = {}));
|
|
105
|
+
export async function populateDataTypeManager(session, dataTypeManager, strategy) {
|
|
111
106
|
dataTypeManager.setSession(session);
|
|
112
107
|
if (strategy === DataTypeExtractStrategy.Lazy) {
|
|
113
108
|
doDebug && debugLog("populateDataTypeManager: Lazy mode");
|
|
@@ -116,11 +111,11 @@ async function populateDataTypeManager(session, dataTypeManager, strategy) {
|
|
|
116
111
|
doDebug && debugLog("populateDataTypeManager: Lazy mode - server implements 1.04 dictionary - we will be lazy");
|
|
117
112
|
// we are in lazy mode for 1.0.5+
|
|
118
113
|
// create teh dataTypeFactory for namespace 1
|
|
119
|
-
const namespace = await
|
|
114
|
+
const namespace = await readNamespaceArray(session);
|
|
120
115
|
for (let i = 1; i < namespace.length; i++) {
|
|
121
116
|
let dataTypeFactory = dataTypeManager.getDataTypeFactory(i);
|
|
122
117
|
if (!dataTypeFactory) {
|
|
123
|
-
dataTypeFactory = new
|
|
118
|
+
dataTypeFactory = new DataTypeFactory([]);
|
|
124
119
|
dataTypeManager.registerDataTypeFactory(i, dataTypeFactory);
|
|
125
120
|
// throw new Error("cannot find dataType Manager for namespace of " + dataTypeNodeId.toString());
|
|
126
121
|
}
|
|
@@ -129,8 +124,8 @@ async function populateDataTypeManager(session, dataTypeManager, strategy) {
|
|
|
129
124
|
}
|
|
130
125
|
doDebug && debugLog("populateDataTypeManager: Lazy mode - server does not implement 1.04 dictionary - we will be eager");
|
|
131
126
|
// for old 1.03 servers we must be eager as we don't have a way to lazy load 1.03 dictionaries yet
|
|
132
|
-
await
|
|
133
|
-
await
|
|
127
|
+
await populateDataTypeManager103(session, dataTypeManager);
|
|
128
|
+
await populateDataTypeManager104(session, dataTypeManager);
|
|
134
129
|
return;
|
|
135
130
|
}
|
|
136
131
|
if (strategy === DataTypeExtractStrategy.Auto) {
|
|
@@ -138,23 +133,23 @@ async function populateDataTypeManager(session, dataTypeManager, strategy) {
|
|
|
138
133
|
const force104 = await serverImplementsDataTypeDefinition(session);
|
|
139
134
|
if (force104) {
|
|
140
135
|
doDebug && debugLog("populateDataTypeManager: Auto mode - server implements 1.04 dictionary - we will be 104 eager");
|
|
141
|
-
await
|
|
136
|
+
await populateDataTypeManager104(session, dataTypeManager);
|
|
142
137
|
return;
|
|
143
138
|
}
|
|
144
139
|
doDebug &&
|
|
145
140
|
debugLog("populateDataTypeManager: Auto mode - server does not implement 1.04 dictionary - we will be 103 eager and 104 eager");
|
|
146
141
|
// old way for 1.03 and early 1.04 prototype
|
|
147
|
-
await
|
|
148
|
-
await
|
|
142
|
+
await populateDataTypeManager103(session, dataTypeManager);
|
|
143
|
+
await populateDataTypeManager104(session, dataTypeManager);
|
|
149
144
|
return;
|
|
150
145
|
}
|
|
151
146
|
if (strategy === DataTypeExtractStrategy.Force103 || strategy === DataTypeExtractStrategy.Both) {
|
|
152
147
|
doDebug && debugLog("populateDataTypeManager: Force103 mode - we will be 103 eager");
|
|
153
|
-
await
|
|
148
|
+
await populateDataTypeManager103(session, dataTypeManager);
|
|
154
149
|
}
|
|
155
150
|
if (strategy === DataTypeExtractStrategy.Force104 || strategy === DataTypeExtractStrategy.Both) {
|
|
156
151
|
doDebug && debugLog("populateDataTypeManager: Force104 mode - we will be 104 eager");
|
|
157
|
-
await
|
|
152
|
+
await populateDataTypeManager104(session, dataTypeManager);
|
|
158
153
|
}
|
|
159
154
|
}
|
|
160
155
|
//# sourceMappingURL=populate_data_type_manager.js.map
|