node-opcua-alias-name-server 2.182.2 → 2.183.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/bind_find_alias.js +38 -1
- package/dist/bind_find_alias.js.map +1 -1
- package/package.json +17 -14
- package/source/bind_find_alias.ts +41 -2
package/dist/bind_find_alias.js
CHANGED
|
@@ -17,6 +17,7 @@ const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
|
17
17
|
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
18
18
|
const node_opcua_types_1 = require("node-opcua-types");
|
|
19
19
|
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
20
|
+
const well_known_js_1 = require("./well_known.js");
|
|
20
21
|
/** The default: keep discovery order (a stable no-op comparator). */
|
|
21
22
|
const insertionOrderComparator = () => 0;
|
|
22
23
|
exports.insertionOrderComparator = insertionOrderComparator;
|
|
@@ -35,6 +36,30 @@ function readReferenceTypeFilter(inputArguments) {
|
|
|
35
36
|
const value = inputArguments?.[1]?.value;
|
|
36
37
|
return value instanceof node_opcua_nodeid_1.NodeId ? value : undefined;
|
|
37
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* `ReferenceTypeFilter` (clause 6.3.2 Table 3) must be `AliasFor` or a subtype
|
|
41
|
+
* of it; `null`/absent means "no filtering" and is always accepted.
|
|
42
|
+
*
|
|
43
|
+
* Mirrors the check `coerceReferenceType` in `add_alias.ts` applies when an
|
|
44
|
+
* AliasName is created, since both enforce the same clause 8.2 rule.
|
|
45
|
+
*/
|
|
46
|
+
function isValidReferenceTypeFilter(category, filter) {
|
|
47
|
+
if (!filter || filter.isEmpty()) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
const addressSpace = category.addressSpace;
|
|
51
|
+
const aliasFor = addressSpace.findReferenceType(well_known_js_1.ALIAS_FOR);
|
|
52
|
+
const candidate = addressSpace.findReferenceType(filter);
|
|
53
|
+
if (!candidate) {
|
|
54
|
+
// an unknown ReferenceType can never be AliasFor or a subtype of it
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
if (!aliasFor) {
|
|
58
|
+
// c8 ignore next: AliasFor is a standard ReferenceType, always present
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return (0, node_opcua_nodeid_1.sameNodeId)(candidate.nodeId, aliasFor.nodeId) || candidate.isSubtypeOf(aliasFor);
|
|
62
|
+
}
|
|
38
63
|
/**
|
|
39
64
|
* Merge entries that share an AliasName.
|
|
40
65
|
*
|
|
@@ -145,9 +170,21 @@ function makeFindAliasHandler(options, verbose) {
|
|
|
145
170
|
if (pattern === null) {
|
|
146
171
|
return { statusCode: node_opcua_status_code_1.StatusCodes.BadInvalidArgument };
|
|
147
172
|
}
|
|
173
|
+
const referenceTypeFilter = readReferenceTypeFilter(inputArguments);
|
|
174
|
+
// clause 6.3.2 Table 3 / clause 8.2: ReferenceTypeFilter must be
|
|
175
|
+
// AliasFor or a subtype of it (null means "all"). A per-argument
|
|
176
|
+
// BadInvalidArgument is reported alongside the operation-level one,
|
|
177
|
+
// mirroring verifyArguments_ArgumentList in node-opcua-address-space
|
|
178
|
+
// (CTT AliasName Base Err-004).
|
|
179
|
+
if (!isValidReferenceTypeFilter(category, referenceTypeFilter)) {
|
|
180
|
+
return {
|
|
181
|
+
statusCode: node_opcua_status_code_1.StatusCodes.BadInvalidArgument,
|
|
182
|
+
inputArgumentResults: [node_opcua_status_code_1.StatusCodes.Good, node_opcua_status_code_1.StatusCodes.BadInvalidArgument]
|
|
183
|
+
};
|
|
184
|
+
}
|
|
148
185
|
const query = {
|
|
149
186
|
pattern,
|
|
150
|
-
referenceTypeFilter
|
|
187
|
+
referenceTypeFilter,
|
|
151
188
|
categoryNodeId: category.nodeId,
|
|
152
189
|
maxResults: options.maxResults,
|
|
153
190
|
// Handed the same memoised closure the filter below uses, so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind_find_alias.js","sourceRoot":"","sources":["../source/bind_find_alias.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;
|
|
1
|
+
{"version":3,"file":"bind_find_alias.js","sourceRoot":"","sources":["../source/bind_find_alias.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-opcua-alias-name-server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.183.1",
|
|
4
4
|
"description": "pure nodejs OPCUA SDK - server-side alias names (OPC 10000-17)",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsc -b",
|
|
@@ -16,21 +16,24 @@
|
|
|
16
16
|
"node": ">=18.x",
|
|
17
17
|
"npm": ">=10.x"
|
|
18
18
|
},
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=22.13.0"
|
|
21
|
+
},
|
|
19
22
|
"dependencies": {
|
|
20
|
-
"node-opcua-address-space-base": "2.
|
|
21
|
-
"node-opcua-alias-name-common": "2.
|
|
22
|
-
"node-opcua-constants": "2.
|
|
23
|
-
"node-opcua-data-model": "2.
|
|
24
|
-
"node-opcua-nodeid": "2.
|
|
25
|
-
"node-opcua-service-call": "2.
|
|
26
|
-
"node-opcua-status-code": "2.
|
|
27
|
-
"node-opcua-types": "2.
|
|
28
|
-
"node-opcua-variant": "2.
|
|
23
|
+
"node-opcua-address-space-base": "2.183.1",
|
|
24
|
+
"node-opcua-alias-name-common": "2.183.0",
|
|
25
|
+
"node-opcua-constants": "2.183.0",
|
|
26
|
+
"node-opcua-data-model": "2.183.0",
|
|
27
|
+
"node-opcua-nodeid": "2.183.0",
|
|
28
|
+
"node-opcua-service-call": "2.183.0",
|
|
29
|
+
"node-opcua-status-code": "2.183.0",
|
|
30
|
+
"node-opcua-types": "2.183.0",
|
|
31
|
+
"node-opcua-variant": "2.183.0"
|
|
29
32
|
},
|
|
30
33
|
"devDependencies": {
|
|
31
|
-
"node-opcua-address-space": "2.
|
|
32
|
-
"node-opcua-leak-detector": "2.
|
|
33
|
-
"node-opcua-nodesets": "2.
|
|
34
|
+
"node-opcua-address-space": "2.183.1",
|
|
35
|
+
"node-opcua-leak-detector": "2.183.0",
|
|
36
|
+
"node-opcua-nodesets": "2.183.0"
|
|
34
37
|
},
|
|
35
38
|
"author": "Etienne Rossignon",
|
|
36
39
|
"license": "MIT",
|
|
@@ -51,5 +54,5 @@
|
|
|
51
54
|
"dist",
|
|
52
55
|
"source"
|
|
53
56
|
],
|
|
54
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "2326127b73f78cae1f0957788f16850a3be70701"
|
|
55
58
|
}
|
|
@@ -11,11 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
import type { ISessionContext, UAMethod, UAObject } from "node-opcua-address-space-base";
|
|
13
13
|
import { type AliasEntry, type AliasQuery, type IAliasStore, InvalidLikePatternError } from "node-opcua-alias-name-common";
|
|
14
|
-
import { type NodeId, NodeId as NodeIdClass } from "node-opcua-nodeid";
|
|
14
|
+
import { type NodeId, NodeId as NodeIdClass, sameNodeId } from "node-opcua-nodeid";
|
|
15
15
|
import type { CallMethodResultOptions } from "node-opcua-service-call";
|
|
16
16
|
import { StatusCodes } from "node-opcua-status-code";
|
|
17
17
|
import { AliasNameDataType, AliasNameVerboseDataType } from "node-opcua-types";
|
|
18
18
|
import { DataType, type Variant, VariantArrayType } from "node-opcua-variant";
|
|
19
|
+
import { ALIAS_FOR } from "./well_known.js";
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Orders results before they are returned.
|
|
@@ -74,6 +75,31 @@ function readReferenceTypeFilter(inputArguments: Variant[]): NodeId | undefined
|
|
|
74
75
|
return value instanceof NodeIdClass ? value : undefined;
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
/**
|
|
79
|
+
* `ReferenceTypeFilter` (clause 6.3.2 Table 3) must be `AliasFor` or a subtype
|
|
80
|
+
* of it; `null`/absent means "no filtering" and is always accepted.
|
|
81
|
+
*
|
|
82
|
+
* Mirrors the check `coerceReferenceType` in `add_alias.ts` applies when an
|
|
83
|
+
* AliasName is created, since both enforce the same clause 8.2 rule.
|
|
84
|
+
*/
|
|
85
|
+
function isValidReferenceTypeFilter(category: UAObject, filter: NodeId | undefined): boolean {
|
|
86
|
+
if (!filter || filter.isEmpty()) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
const addressSpace = category.addressSpace;
|
|
90
|
+
const aliasFor = addressSpace.findReferenceType(ALIAS_FOR);
|
|
91
|
+
const candidate = addressSpace.findReferenceType(filter);
|
|
92
|
+
if (!candidate) {
|
|
93
|
+
// an unknown ReferenceType can never be AliasFor or a subtype of it
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
if (!aliasFor) {
|
|
97
|
+
// c8 ignore next: AliasFor is a standard ReferenceType, always present
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
return sameNodeId(candidate.nodeId, aliasFor.nodeId) || candidate.isSubtypeOf(aliasFor);
|
|
101
|
+
}
|
|
102
|
+
|
|
77
103
|
/**
|
|
78
104
|
* Merge entries that share an AliasName.
|
|
79
105
|
*
|
|
@@ -197,9 +223,22 @@ export function makeFindAliasHandler(options: FindAliasBindingOptions, verbose:
|
|
|
197
223
|
return { statusCode: StatusCodes.BadInvalidArgument };
|
|
198
224
|
}
|
|
199
225
|
|
|
226
|
+
const referenceTypeFilter = readReferenceTypeFilter(inputArguments);
|
|
227
|
+
// clause 6.3.2 Table 3 / clause 8.2: ReferenceTypeFilter must be
|
|
228
|
+
// AliasFor or a subtype of it (null means "all"). A per-argument
|
|
229
|
+
// BadInvalidArgument is reported alongside the operation-level one,
|
|
230
|
+
// mirroring verifyArguments_ArgumentList in node-opcua-address-space
|
|
231
|
+
// (CTT AliasName Base Err-004).
|
|
232
|
+
if (!isValidReferenceTypeFilter(category, referenceTypeFilter)) {
|
|
233
|
+
return {
|
|
234
|
+
statusCode: StatusCodes.BadInvalidArgument,
|
|
235
|
+
inputArgumentResults: [StatusCodes.Good, StatusCodes.BadInvalidArgument]
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
200
239
|
const query: AliasQuery = {
|
|
201
240
|
pattern,
|
|
202
|
-
referenceTypeFilter
|
|
241
|
+
referenceTypeFilter,
|
|
203
242
|
categoryNodeId: category.nodeId,
|
|
204
243
|
maxResults: options.maxResults,
|
|
205
244
|
// Handed the same memoised closure the filter below uses, so the
|