@effect-opcua/client 0.1.0-alpha.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/LICENSE +201 -0
- package/README.md +367 -0
- package/dist/Opcua.d.mts +13 -0
- package/dist/Opcua.d.mts.map +1 -0
- package/dist/Opcua.mjs +23 -0
- package/dist/Opcua.mjs.map +1 -0
- package/dist/OpcuaClient.d.mts +27 -0
- package/dist/OpcuaClient.d.mts.map +1 -0
- package/dist/OpcuaClient.mjs +20 -0
- package/dist/OpcuaClient.mjs.map +1 -0
- package/dist/OpcuaError.d.mts +249 -0
- package/dist/OpcuaError.d.mts.map +1 -0
- package/dist/OpcuaError.mjs +97 -0
- package/dist/OpcuaError.mjs.map +1 -0
- package/dist/OpcuaMethod.d.mts +158 -0
- package/dist/OpcuaMethod.d.mts.map +1 -0
- package/dist/OpcuaMethod.mjs +31 -0
- package/dist/OpcuaMethod.mjs.map +1 -0
- package/dist/OpcuaSession.d.mts +247 -0
- package/dist/OpcuaSession.d.mts.map +1 -0
- package/dist/OpcuaSession.mjs +50 -0
- package/dist/OpcuaSession.mjs.map +1 -0
- package/dist/OpcuaSubscription.d.mts +148 -0
- package/dist/OpcuaSubscription.d.mts.map +1 -0
- package/dist/OpcuaSubscription.mjs +45 -0
- package/dist/OpcuaSubscription.mjs.map +1 -0
- package/dist/OpcuaVariable.d.mts +179 -0
- package/dist/OpcuaVariable.d.mts.map +1 -0
- package/dist/OpcuaVariable.mjs +15 -0
- package/dist/OpcuaVariable.mjs.map +1 -0
- package/dist/_virtual/rolldown_runtime.mjs +18 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.mjs +7 -0
- package/dist/internal/batch/chunk.d.mts +11 -0
- package/dist/internal/batch/chunk.d.mts.map +1 -0
- package/dist/internal/batch/chunk.mjs +23 -0
- package/dist/internal/batch/chunk.mjs.map +1 -0
- package/dist/internal/batch/keyed.d.mts +50 -0
- package/dist/internal/batch/keyed.d.mts.map +1 -0
- package/dist/internal/batch/keyed.mjs +112 -0
- package/dist/internal/batch/keyed.mjs.map +1 -0
- package/dist/internal/batch/operations.d.mts +25 -0
- package/dist/internal/batch/operations.d.mts.map +1 -0
- package/dist/internal/batch/operations.mjs +213 -0
- package/dist/internal/batch/operations.mjs.map +1 -0
- package/dist/internal/browse/operations.d.mts +15 -0
- package/dist/internal/browse/operations.d.mts.map +1 -0
- package/dist/internal/browse/operations.mjs +72 -0
- package/dist/internal/browse/operations.mjs.map +1 -0
- package/dist/internal/client/make.d.mts +16 -0
- package/dist/internal/client/make.d.mts.map +1 -0
- package/dist/internal/client/make.mjs +76 -0
- package/dist/internal/client/make.mjs.map +1 -0
- package/dist/internal/common/collections.d.mts +5 -0
- package/dist/internal/common/collections.d.mts.map +1 -0
- package/dist/internal/common/collections.mjs +10 -0
- package/dist/internal/common/collections.mjs.map +1 -0
- package/dist/internal/common/constants.d.mts +18 -0
- package/dist/internal/common/constants.d.mts.map +1 -0
- package/dist/internal/common/constants.mjs +19 -0
- package/dist/internal/common/constants.mjs.map +1 -0
- package/dist/internal/common/node-id.d.mts +2 -0
- package/dist/internal/common/node-id.mjs +1 -0
- package/dist/internal/common/options.d.mts +15 -0
- package/dist/internal/common/options.d.mts.map +1 -0
- package/dist/internal/common/options.mjs +22 -0
- package/dist/internal/common/options.mjs.map +1 -0
- package/dist/internal/common/predicates.d.mts +8 -0
- package/dist/internal/common/predicates.d.mts.map +1 -0
- package/dist/internal/common/predicates.mjs +13 -0
- package/dist/internal/common/predicates.mjs.map +1 -0
- package/dist/internal/data-types/enum.d.mts +2 -0
- package/dist/internal/data-types/enum.mjs +3 -0
- package/dist/internal/data-types/manager.d.mts +2 -0
- package/dist/internal/data-types/manager.mjs +3 -0
- package/dist/internal/data-types/model.d.mts +2 -0
- package/dist/internal/data-types/model.mjs +1 -0
- package/dist/internal/data-types/read.d.mts +14 -0
- package/dist/internal/data-types/read.d.mts.map +1 -0
- package/dist/internal/data-types/read.mjs +291 -0
- package/dist/internal/data-types/read.mjs.map +1 -0
- package/dist/internal/data-types/structure.d.mts +2 -0
- package/dist/internal/data-types/structure.mjs +3 -0
- package/dist/internal/events/model.d.mts +72 -0
- package/dist/internal/events/model.d.mts.map +1 -0
- package/dist/internal/events/model.mjs +1 -0
- package/dist/internal/events/wire.d.mts +37 -0
- package/dist/internal/events/wire.d.mts.map +1 -0
- package/dist/internal/events/wire.mjs +127 -0
- package/dist/internal/events/wire.mjs.map +1 -0
- package/dist/internal/metadata/arguments.d.mts +2 -0
- package/dist/internal/metadata/arguments.mjs +3 -0
- package/dist/internal/metadata/methods.d.mts +2 -0
- package/dist/internal/metadata/methods.mjs +3 -0
- package/dist/internal/metadata/service.d.mts +23 -0
- package/dist/internal/metadata/service.d.mts.map +1 -0
- package/dist/internal/metadata/service.mjs +416 -0
- package/dist/internal/metadata/service.mjs.map +1 -0
- package/dist/internal/metadata/variables.d.mts +3 -0
- package/dist/internal/metadata/variables.mjs +3 -0
- package/dist/internal/method/arguments.d.mts +48 -0
- package/dist/internal/method/arguments.d.mts.map +1 -0
- package/dist/internal/method/arguments.mjs +216 -0
- package/dist/internal/method/arguments.mjs.map +1 -0
- package/dist/internal/method/operations.d.mts +19 -0
- package/dist/internal/method/operations.d.mts.map +1 -0
- package/dist/internal/method/operations.mjs +111 -0
- package/dist/internal/method/operations.mjs.map +1 -0
- package/dist/internal/monitoring/options.d.mts +30 -0
- package/dist/internal/monitoring/options.d.mts.map +1 -0
- package/dist/internal/monitoring/options.mjs +260 -0
- package/dist/internal/monitoring/options.mjs.map +1 -0
- package/dist/internal/monitoring/requests.d.mts +16 -0
- package/dist/internal/monitoring/requests.d.mts.map +1 -0
- package/dist/internal/monitoring/requests.mjs +53 -0
- package/dist/internal/monitoring/requests.mjs.map +1 -0
- package/dist/internal/monitoring/runtime.d.mts +14 -0
- package/dist/internal/monitoring/runtime.d.mts.map +1 -0
- package/dist/internal/monitoring/runtime.mjs +321 -0
- package/dist/internal/monitoring/runtime.mjs.map +1 -0
- package/dist/internal/monitoring/samples.d.mts +23 -0
- package/dist/internal/monitoring/samples.d.mts.map +1 -0
- package/dist/internal/monitoring/samples.mjs +45 -0
- package/dist/internal/monitoring/samples.mjs.map +1 -0
- package/dist/internal/session/make.d.mts +11 -0
- package/dist/internal/session/make.d.mts.map +1 -0
- package/dist/internal/session/make.mjs +36 -0
- package/dist/internal/session/make.mjs.map +1 -0
- package/dist/internal/session/service.d.mts +10 -0
- package/dist/internal/session/service.d.mts.map +1 -0
- package/dist/internal/session/service.mjs +232 -0
- package/dist/internal/session/service.mjs.map +1 -0
- package/dist/internal/structures/adapter.d.mts +11 -0
- package/dist/internal/structures/adapter.d.mts.map +1 -0
- package/dist/internal/structures/adapter.mjs +37 -0
- package/dist/internal/structures/adapter.mjs.map +1 -0
- package/dist/internal/structures/model.d.mts +21 -0
- package/dist/internal/structures/model.d.mts.map +1 -0
- package/dist/internal/structures/model.mjs +7 -0
- package/dist/internal/structures/model.mjs.map +1 -0
- package/dist/internal/structures/runtime.d.mts +28 -0
- package/dist/internal/structures/runtime.d.mts.map +1 -0
- package/dist/internal/structures/runtime.mjs +119 -0
- package/dist/internal/structures/runtime.mjs.map +1 -0
- package/dist/internal/subscription/options.d.mts +17 -0
- package/dist/internal/subscription/options.d.mts.map +1 -0
- package/dist/internal/subscription/options.mjs +51 -0
- package/dist/internal/subscription/options.mjs.map +1 -0
- package/dist/internal/subscription/runtime.d.mts +15 -0
- package/dist/internal/subscription/runtime.d.mts.map +1 -0
- package/dist/internal/subscription/runtime.mjs +43 -0
- package/dist/internal/subscription/runtime.mjs.map +1 -0
- package/dist/internal/values/codec.d.mts +53 -0
- package/dist/internal/values/codec.d.mts.map +1 -0
- package/dist/internal/values/codec.mjs +117 -0
- package/dist/internal/values/codec.mjs.map +1 -0
- package/dist/internal/values/normalize.d.mts +33 -0
- package/dist/internal/values/normalize.d.mts.map +1 -0
- package/dist/internal/values/normalize.mjs +177 -0
- package/dist/internal/values/normalize.mjs.map +1 -0
- package/dist/internal/values/result.d.mts +16 -0
- package/dist/internal/values/result.d.mts.map +1 -0
- package/dist/internal/values/result.mjs +15 -0
- package/dist/internal/values/result.mjs.map +1 -0
- package/dist/internal/variable/operations.d.mts +50 -0
- package/dist/internal/variable/operations.d.mts.map +1 -0
- package/dist/internal/variable/operations.mjs +192 -0
- package/dist/internal/variable/operations.mjs.map +1 -0
- package/dist/node-opcua.d.mts +2 -0
- package/dist/node-opcua.mjs +3 -0
- package/package.json +57 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/internal/common/predicates.ts
|
|
2
|
+
const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
3
|
+
const isPlainRecord = (value) => {
|
|
4
|
+
if (!isRecord(value)) return false;
|
|
5
|
+
const prototype = Object.getPrototypeOf(value);
|
|
6
|
+
return prototype === Object.prototype || prototype === null;
|
|
7
|
+
};
|
|
8
|
+
const positiveInteger = (value) => typeof value === "number" && Number.isInteger(value) && Number.isFinite(value) && value > 0;
|
|
9
|
+
const nonNegativeInteger = (value) => typeof value === "number" && Number.isInteger(value) && Number.isFinite(value) && value >= 0;
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
export { isPlainRecord, isRecord, nonNegativeInteger, positiveInteger };
|
|
13
|
+
//# sourceMappingURL=predicates.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicates.mjs","names":[],"sources":["../../../src/internal/common/predicates.ts"],"sourcesContent":["export const isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\n\nexport const isPlainRecord = (\n value: unknown,\n): value is Record<string, unknown> => {\n if (!isRecord(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n};\n\nexport const positiveInteger = (value: unknown): value is number =>\n typeof value === \"number\" &&\n Number.isInteger(value) &&\n Number.isFinite(value) &&\n value > 0;\n\nexport const nonNegativeInteger = (value: unknown): value is number =>\n typeof value === \"number\" &&\n Number.isInteger(value) &&\n Number.isFinite(value) &&\n value >= 0;\n"],"mappings":";AAAA,MAAa,YAAY,UACvB,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM;AAEtE,MAAa,iBACX,UACqC;AACrC,KAAI,CAAC,SAAS,MAAM,CAAE,QAAO;CAC7B,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,cAAc,OAAO,aAAa,cAAc;;AAGzD,MAAa,mBAAmB,UAC9B,OAAO,UAAU,YACjB,OAAO,UAAU,MAAM,IACvB,OAAO,SAAS,MAAM,IACtB,QAAQ;AAEV,MAAa,sBAAsB,UACjC,OAAO,UAAU,YACjB,OAAO,UAAU,MAAM,IACvB,OAAO,SAAS,MAAM,IACtB,SAAS"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { OpcuaDataTypeDefinition, OpcuaDataTypeDefinitionResult, OpcuaEnumDefinition, OpcuaEnumField, OpcuaStructureDefinition, OpcuaStructureField } from "../../OpcuaSession.mjs";
|
|
2
|
+
export { type OpcuaDataTypeDefinition, type OpcuaDataTypeDefinitionResult, type OpcuaEnumDefinition, type OpcuaEnumField, type OpcuaStructureDefinition, type OpcuaStructureField };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NodeIdString } from "../../OpcuaVariable.mjs";
|
|
2
|
+
import "../common/node-id.mjs";
|
|
3
|
+
import { OpcuaError } from "../../OpcuaError.mjs";
|
|
4
|
+
import { OpcuaDataTypeDefinition, OpcuaDataTypeDefinitionResult, OpcuaEnumDefinition, OpcuaEnumField, OpcuaStructureDefinition, OpcuaStructureField } from "../../OpcuaSession.mjs";
|
|
5
|
+
import { MetadataService } from "../metadata/service.mjs";
|
|
6
|
+
import { ClientSession } from "node-opcua";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
|
|
9
|
+
//#region src/internal/data-types/read.d.ts
|
|
10
|
+
declare const readDataTypeDefinition: (session: ClientSession, metadata: MetadataService, dataTypeNodeId: NodeIdString) => Effect.Effect<OpcuaDataTypeDefinitionResult, OpcuaError>;
|
|
11
|
+
declare const readManyDataTypeDefinitions: (session: ClientSession, metadata: MetadataService, dataTypeNodeIds: readonly NodeIdString[]) => Effect.Effect<readonly OpcuaDataTypeDefinitionResult[], OpcuaError>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { type OpcuaDataTypeDefinition, type OpcuaDataTypeDefinitionResult, type OpcuaEnumDefinition, type OpcuaEnumField, type OpcuaStructureDefinition, type OpcuaStructureField, readDataTypeDefinition, readManyDataTypeDefinitions };
|
|
14
|
+
//# sourceMappingURL=read.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.mts","names":[],"sources":["../../../src/internal/data-types/read.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cA4Ca,kCACF,yBACC,iCACM,iBACf,MAAA,CAAO,OAAO,+BAA+B;cAMnC,uCACF,yBACC,2CACgB,mBACzB,MAAA,CAAO,gBAAgB,iCAAiC"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { isGood, normalizeStatusCode } from "../values/normalize.mjs";
|
|
2
|
+
import { serviceError } from "../../OpcuaError.mjs";
|
|
3
|
+
import { AttributeIds, BrowseDirection, DataTypeExtractStrategy, ReferenceTypeIds, StatusCodes, coerceNodeId, convertStructureTypeSchemaToStructureDefinition, getExtraDataTypeManager, sameNodeId } from "node-opcua";
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
|
|
6
|
+
//#region src/internal/data-types/read.ts
|
|
7
|
+
const readDataTypeDefinition = (session, metadata, dataTypeNodeId) => Effect.map(readManyDataTypeDefinitions(session, metadata, [dataTypeNodeId]), (results) => results[0]);
|
|
8
|
+
const readManyDataTypeDefinitions = (session, metadata, dataTypeNodeIds) => Effect.gen(function* () {
|
|
9
|
+
if (dataTypeNodeIds.length === 0) return [];
|
|
10
|
+
const metadataResults = yield* metadata.nodes(dataTypeNodeIds);
|
|
11
|
+
let dynamicManager;
|
|
12
|
+
const nodesToRead = dataTypeNodeIds.map((nodeId) => ({
|
|
13
|
+
nodeId: coerceNodeId(nodeId),
|
|
14
|
+
attributeId: AttributeIds.DataTypeDefinition
|
|
15
|
+
}));
|
|
16
|
+
const values = yield* Effect.tryPromise({
|
|
17
|
+
try: () => session.read(nodesToRead, 0),
|
|
18
|
+
catch: (cause) => serviceError({
|
|
19
|
+
operation: "metadata.dataTypeDefinition",
|
|
20
|
+
cause
|
|
21
|
+
})
|
|
22
|
+
});
|
|
23
|
+
if (values.length !== dataTypeNodeIds.length) return yield* Effect.fail(serviceError({
|
|
24
|
+
operation: "metadata.dataTypeDefinition",
|
|
25
|
+
cause: `Expected ${dataTypeNodeIds.length} DataValues, got ${values.length}`
|
|
26
|
+
}));
|
|
27
|
+
return yield* Effect.forEach(dataTypeNodeIds, (dataTypeNodeId, index) => Effect.gen(function* () {
|
|
28
|
+
const result = normalizeDefinitionResult(dataTypeNodeId, metadataResults[index], values[index]);
|
|
29
|
+
const name = dataTypeName(dataTypeNodeId, metadataResults[index]);
|
|
30
|
+
const canReadDynamicDefinition = nodesToRead[index]?.nodeId.namespace !== 0;
|
|
31
|
+
if (isEmptyStructureResult(result)) {
|
|
32
|
+
if (!canReadDynamicDefinition) return {
|
|
33
|
+
_tag: "Unsupported",
|
|
34
|
+
dataTypeNodeId,
|
|
35
|
+
reason: "Structure DataTypeDefinition has no fields"
|
|
36
|
+
};
|
|
37
|
+
return yield* readDynamicDataTypeDefinition(() => dynamicManager ??= getExtraDataTypeManager(session, DataTypeExtractStrategy.Both), dataTypeNodeId, name).pipe(Effect.map((fallback) => fallback ?? {
|
|
38
|
+
_tag: "Unsupported",
|
|
39
|
+
dataTypeNodeId,
|
|
40
|
+
reason: "Structure DataTypeDefinition has no fields"
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
if (result._tag !== "Missing") return result;
|
|
44
|
+
const enumFallback = yield* readEnumPropertyDefinition(session, dataTypeNodeId, name);
|
|
45
|
+
if (enumFallback) return enumFallback;
|
|
46
|
+
if (!canReadDynamicDefinition) return result;
|
|
47
|
+
return yield* readDynamicDataTypeDefinition(() => dynamicManager ??= getExtraDataTypeManager(session, DataTypeExtractStrategy.Both), dataTypeNodeId, name).pipe(Effect.map((fallback) => fallback ?? result));
|
|
48
|
+
}), { concurrency: 1 });
|
|
49
|
+
});
|
|
50
|
+
const isEmptyStructureResult = (result) => result._tag === "Success" && result.definition._tag === "Structure" && result.definition.fields.length === 0;
|
|
51
|
+
const readDynamicDataTypeDefinition = (getDynamicManager, dataTypeNodeId, name) => Effect.promise(async () => {
|
|
52
|
+
try {
|
|
53
|
+
const definition = normalizeDynamicDefinition(await getDynamicManager(), dataTypeNodeId, name);
|
|
54
|
+
return definition ? {
|
|
55
|
+
_tag: "Success",
|
|
56
|
+
dataTypeNodeId,
|
|
57
|
+
definition
|
|
58
|
+
} : void 0;
|
|
59
|
+
} catch {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
const normalizeDynamicDefinition = (manager, dataTypeNodeId, name) => {
|
|
64
|
+
const nodeId = coerceNodeId(dataTypeNodeId);
|
|
65
|
+
const structureInfo = dynamicStructureInfo(manager, nodeId);
|
|
66
|
+
if (structureInfo) {
|
|
67
|
+
const definition = normalizeRawDefinition(dataTypeNodeId, name, convertStructureTypeSchemaToStructureDefinition(structureInfo.schema));
|
|
68
|
+
return definition._tag === "Structure" && definition.fields.length > 0 ? definition : void 0;
|
|
69
|
+
}
|
|
70
|
+
return dynamicEnumDefinition(manager, nodeId, dataTypeNodeId, name);
|
|
71
|
+
};
|
|
72
|
+
const dynamicStructureInfo = (manager, dataTypeNodeId) => {
|
|
73
|
+
if (!isRecord(manager)) return void 0;
|
|
74
|
+
const getStructureInfoForDataType = manager.getStructureInfoForDataType;
|
|
75
|
+
if (typeof getStructureInfoForDataType !== "function") return void 0;
|
|
76
|
+
const info = getStructureInfoForDataType.call(manager, dataTypeNodeId);
|
|
77
|
+
if (!isRecord(info) || !("schema" in info)) return void 0;
|
|
78
|
+
return info;
|
|
79
|
+
};
|
|
80
|
+
const dynamicEnumDefinition = (manager, nodeId, dataTypeNodeId, name) => {
|
|
81
|
+
if (!isRecord(manager)) return void 0;
|
|
82
|
+
const getDataTypeFactory = manager.getDataTypeFactory;
|
|
83
|
+
if (typeof getDataTypeFactory !== "function") return void 0;
|
|
84
|
+
const factory = getDataTypeFactory.call(manager, nodeId.namespace);
|
|
85
|
+
if (!isRecord(factory)) return void 0;
|
|
86
|
+
const getEnumIterator = factory.getEnumIterator;
|
|
87
|
+
if (typeof getEnumIterator !== "function") return void 0;
|
|
88
|
+
for (const rawEnum of getEnumIterator.call(factory)) {
|
|
89
|
+
if (!isRecord(rawEnum)) continue;
|
|
90
|
+
const rawNodeId = rawEnum.dataTypeNodeId;
|
|
91
|
+
if (!isRecord(rawNodeId) || typeof rawNodeId.toString !== "function" || !sameNodeId(coerceNodeId(rawNodeId.toString()), nodeId)) continue;
|
|
92
|
+
const fields = enumFieldsFromMap(rawEnum.enumValues);
|
|
93
|
+
if (fields.length === 0) return void 0;
|
|
94
|
+
return {
|
|
95
|
+
_tag: "Enum",
|
|
96
|
+
dataTypeNodeId,
|
|
97
|
+
name,
|
|
98
|
+
fields
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const readEnumPropertyDefinition = (session, dataTypeNodeId, name) => Effect.gen(function* () {
|
|
103
|
+
const browseResult = yield* Effect.tryPromise({
|
|
104
|
+
try: () => session.browse({
|
|
105
|
+
nodeId: coerceNodeId(dataTypeNodeId),
|
|
106
|
+
referenceTypeId: coerceNodeId(ReferenceTypeIds.HasProperty),
|
|
107
|
+
browseDirection: BrowseDirection.Forward,
|
|
108
|
+
includeSubtypes: false,
|
|
109
|
+
resultMask: 63
|
|
110
|
+
}),
|
|
111
|
+
catch: (cause) => serviceError({
|
|
112
|
+
operation: "metadata.dataTypeEnumProperties",
|
|
113
|
+
nodeId: dataTypeNodeId,
|
|
114
|
+
cause
|
|
115
|
+
})
|
|
116
|
+
});
|
|
117
|
+
if (!isGood(browseResult.statusCode)) return void 0;
|
|
118
|
+
const enumValues = browseResult.references?.find((reference) => reference.browseName?.name === "EnumValues");
|
|
119
|
+
const enumStrings = browseResult.references?.find((reference) => reference.browseName?.name === "EnumStrings");
|
|
120
|
+
const property = enumValues ?? enumStrings;
|
|
121
|
+
if (!property) return void 0;
|
|
122
|
+
const dataValue = yield* Effect.tryPromise({
|
|
123
|
+
try: () => session.read({
|
|
124
|
+
nodeId: property.nodeId,
|
|
125
|
+
attributeId: AttributeIds.Value
|
|
126
|
+
}, 0),
|
|
127
|
+
catch: (cause) => serviceError({
|
|
128
|
+
operation: "metadata.dataTypeEnumProperties",
|
|
129
|
+
nodeId: dataTypeNodeId,
|
|
130
|
+
cause
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
if (!isGood(dataValue.statusCode)) return void 0;
|
|
134
|
+
try {
|
|
135
|
+
return {
|
|
136
|
+
_tag: "Success",
|
|
137
|
+
dataTypeNodeId,
|
|
138
|
+
definition: {
|
|
139
|
+
_tag: "Enum",
|
|
140
|
+
dataTypeNodeId,
|
|
141
|
+
name,
|
|
142
|
+
fields: property === enumValues ? normalizeEnumValues(dataValue.value?.value) : normalizeEnumStrings(dataValue.value?.value)
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
} catch (cause) {
|
|
146
|
+
return {
|
|
147
|
+
_tag: "Failure",
|
|
148
|
+
dataTypeNodeId,
|
|
149
|
+
reason: cause instanceof Error ? cause.message : String(cause)
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
const normalizeDefinitionResult = (dataTypeNodeId, metadata, dataValue) => {
|
|
154
|
+
if (!dataValue || !isGood(dataValue.statusCode)) return {
|
|
155
|
+
_tag: "Missing",
|
|
156
|
+
dataTypeNodeId,
|
|
157
|
+
reason: normalizeStatusCode(dataValue?.statusCode ?? StatusCodes.BadAttributeIdInvalid).text
|
|
158
|
+
};
|
|
159
|
+
const raw = dataValue.value?.value;
|
|
160
|
+
const name = dataTypeName(dataTypeNodeId, metadata);
|
|
161
|
+
try {
|
|
162
|
+
const definition = normalizeRawDefinition(dataTypeNodeId, name, raw);
|
|
163
|
+
return definition._tag === "Unsupported" ? {
|
|
164
|
+
_tag: "Unsupported",
|
|
165
|
+
dataTypeNodeId,
|
|
166
|
+
reason: definition.reason
|
|
167
|
+
} : {
|
|
168
|
+
_tag: "Success",
|
|
169
|
+
dataTypeNodeId,
|
|
170
|
+
definition
|
|
171
|
+
};
|
|
172
|
+
} catch (cause) {
|
|
173
|
+
return {
|
|
174
|
+
_tag: "Failure",
|
|
175
|
+
dataTypeNodeId,
|
|
176
|
+
reason: cause instanceof Error ? cause.message : String(cause)
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
const dataTypeName = (dataTypeNodeId, metadata) => metadata?._tag === "Success" ? metadata.metadata.browseName ?? dataTypeNodeId : dataTypeNodeId;
|
|
181
|
+
const normalizeRawDefinition = (dataTypeNodeId, name, raw) => {
|
|
182
|
+
if (!isRecord(raw)) return {
|
|
183
|
+
_tag: "Unsupported",
|
|
184
|
+
reason: "DataTypeDefinition is not an object"
|
|
185
|
+
};
|
|
186
|
+
if ("structureType" in raw) return {
|
|
187
|
+
_tag: "Structure",
|
|
188
|
+
dataTypeNodeId,
|
|
189
|
+
name,
|
|
190
|
+
structureType: normalizeStructureType(raw.structureType),
|
|
191
|
+
fields: arrayValue(raw.fields).map((field) => normalizeStructureField(field))
|
|
192
|
+
};
|
|
193
|
+
if ("fields" in raw) return {
|
|
194
|
+
_tag: "Enum",
|
|
195
|
+
dataTypeNodeId,
|
|
196
|
+
name,
|
|
197
|
+
fields: arrayValue(raw.fields).map((field) => normalizeEnumField(field))
|
|
198
|
+
};
|
|
199
|
+
return {
|
|
200
|
+
_tag: "Unsupported",
|
|
201
|
+
reason: "Unsupported DataTypeDefinition shape"
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
const normalizeStructureField = (raw) => {
|
|
205
|
+
if (!isRecord(raw)) throw new Error("Structure field is not an object");
|
|
206
|
+
return {
|
|
207
|
+
name: stringValue(raw.name),
|
|
208
|
+
dataTypeNodeId: nodeIdString(raw.dataType),
|
|
209
|
+
valueRank: numberOrUndefined(raw.valueRank),
|
|
210
|
+
arrayDimensions: numberArrayOrUndefined(raw.arrayDimensions),
|
|
211
|
+
isOptional: booleanOrUndefined(raw.isOptional),
|
|
212
|
+
description: localizedText(raw.description)
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
const normalizeEnumField = (raw) => {
|
|
216
|
+
if (!isRecord(raw)) throw new Error("Enum field is not an object");
|
|
217
|
+
return {
|
|
218
|
+
name: stringValue(raw.name),
|
|
219
|
+
value: int64Number(raw.value),
|
|
220
|
+
description: localizedText(raw.description)
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
const enumFieldsFromMap = (raw) => {
|
|
224
|
+
if (Array.isArray(raw)) return raw.map((name, value) => ({
|
|
225
|
+
name: stringValue(name),
|
|
226
|
+
value
|
|
227
|
+
}));
|
|
228
|
+
if (!isRecord(raw)) return [];
|
|
229
|
+
return Object.entries(raw).flatMap(([name, value]) => Number.isNaN(Number(name)) && typeof value === "number" ? [{
|
|
230
|
+
name,
|
|
231
|
+
value
|
|
232
|
+
}] : []);
|
|
233
|
+
};
|
|
234
|
+
const normalizeEnumValues = (raw) => {
|
|
235
|
+
if (!Array.isArray(raw)) throw new Error("EnumValues is not an array");
|
|
236
|
+
return raw.map((field) => {
|
|
237
|
+
if (!isRecord(field)) throw new Error("EnumValues entry is not an object");
|
|
238
|
+
return {
|
|
239
|
+
name: localizedText(field.displayName) ?? localizedText(field.name) ?? stringValue(field.name),
|
|
240
|
+
value: int64Number(field.value),
|
|
241
|
+
description: localizedText(field.description)
|
|
242
|
+
};
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
const normalizeEnumStrings = (raw) => {
|
|
246
|
+
if (!Array.isArray(raw)) throw new Error("EnumStrings is not an array");
|
|
247
|
+
return raw.map((field, value) => ({
|
|
248
|
+
name: localizedText(field) ?? stringValue(field),
|
|
249
|
+
value,
|
|
250
|
+
description: localizedText(field)
|
|
251
|
+
}));
|
|
252
|
+
};
|
|
253
|
+
const normalizeStructureType = (value) => {
|
|
254
|
+
switch (numericEnumValue(value)) {
|
|
255
|
+
case 0: return "Structure";
|
|
256
|
+
case 1: return "StructureWithOptionalFields";
|
|
257
|
+
case 2: return "Union";
|
|
258
|
+
default: return "Unknown";
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
const arrayValue = (value) => Array.isArray(value) ? value : [];
|
|
262
|
+
const stringValue = (value) => typeof value === "string" ? value : "";
|
|
263
|
+
const nodeIdString = (value) => isRecord(value) && typeof value.toString === "function" ? value.toString() : String(value ?? "");
|
|
264
|
+
const numberOrUndefined = (value) => typeof value === "number" ? value : void 0;
|
|
265
|
+
const numberArrayOrUndefined = (value) => Array.isArray(value) && value.every((item) => typeof item === "number") ? [...value] : void 0;
|
|
266
|
+
const booleanOrUndefined = (value) => typeof value === "boolean" ? value : void 0;
|
|
267
|
+
const localizedText = (value) => {
|
|
268
|
+
if (!isRecord(value)) return void 0;
|
|
269
|
+
const text = value.text;
|
|
270
|
+
return typeof text === "string" ? text : void 0;
|
|
271
|
+
};
|
|
272
|
+
const numericEnumValue = (value) => {
|
|
273
|
+
if (typeof value === "number") return value;
|
|
274
|
+
if (isRecord(value) && typeof value.value === "number") return value.value;
|
|
275
|
+
};
|
|
276
|
+
const int64Number = (value) => {
|
|
277
|
+
if (typeof value === "number") return value;
|
|
278
|
+
if (typeof value === "bigint") return Number(value);
|
|
279
|
+
if (Array.isArray(value) && value.length >= 2 && typeof value[0] === "number" && typeof value[1] === "number") {
|
|
280
|
+
const high = value[0] | 0;
|
|
281
|
+
const low = value[1] >>> 0;
|
|
282
|
+
return high * 4294967296 + low;
|
|
283
|
+
}
|
|
284
|
+
if (isRecord(value) && typeof value.value === "number") return value.value;
|
|
285
|
+
throw new Error(`Enum value is not numeric: ${String(value)}`);
|
|
286
|
+
};
|
|
287
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
288
|
+
|
|
289
|
+
//#endregion
|
|
290
|
+
export { readDataTypeDefinition, readManyDataTypeDefinitions };
|
|
291
|
+
//# sourceMappingURL=read.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.mjs","names":["dynamicManager: Promise<unknown> | undefined"],"sources":["../../../src/internal/data-types/read.ts"],"sourcesContent":["import {\n AttributeIds,\n BrowseDirection,\n DataTypeExtractStrategy,\n ReferenceTypeIds,\n StatusCodes,\n coerceNodeId,\n convertStructureTypeSchemaToStructureDefinition,\n getExtraDataTypeManager,\n sameNodeId,\n type ClientSession,\n type DataValue,\n type NodeId,\n} from \"node-opcua\";\nimport { Effect } from \"effect\";\n\nimport type { NodeIdString } from \"../common/node-id.js\";\nimport type {\n OpcuaDataTypeDefinition,\n OpcuaDataTypeDefinitionResult,\n OpcuaEnumDefinition,\n OpcuaEnumField,\n OpcuaStructureDefinition,\n OpcuaStructureField,\n} from \"../../OpcuaSession.js\";\nimport type {\n MetadataService,\n OpcuaNodeMetadataResult,\n} from \"../metadata/service.js\";\nimport { isGood, normalizeStatusCode } from \"../values/normalize.js\";\nimport { serviceError, type OpcuaError } from \"../../OpcuaError.js\";\nexport type {\n OpcuaDataTypeDefinition,\n OpcuaDataTypeDefinitionResult,\n OpcuaEnumDefinition,\n OpcuaEnumField,\n OpcuaStructureDefinition,\n OpcuaStructureField,\n} from \"../../OpcuaSession.js\";\n\ntype DynamicStructureSchema = Parameters<\n typeof convertStructureTypeSchemaToStructureDefinition\n>[0];\n\nexport const readDataTypeDefinition = (\n session: ClientSession,\n metadata: MetadataService,\n dataTypeNodeId: NodeIdString,\n): Effect.Effect<OpcuaDataTypeDefinitionResult, OpcuaError> =>\n Effect.map(\n readManyDataTypeDefinitions(session, metadata, [dataTypeNodeId]),\n (results) => results[0]!,\n );\n\nexport const readManyDataTypeDefinitions = (\n session: ClientSession,\n metadata: MetadataService,\n dataTypeNodeIds: readonly NodeIdString[],\n): Effect.Effect<readonly OpcuaDataTypeDefinitionResult[], OpcuaError> =>\n Effect.gen(function* () {\n if (dataTypeNodeIds.length === 0) return [];\n const metadataResults = yield* metadata.nodes(dataTypeNodeIds);\n let dynamicManager: Promise<unknown> | undefined;\n const nodesToRead = dataTypeNodeIds.map((nodeId) => ({\n nodeId: coerceNodeId(nodeId),\n attributeId: AttributeIds.DataTypeDefinition,\n }));\n const values = yield* Effect.tryPromise({\n try: () => session.read(nodesToRead, 0),\n catch: (cause) =>\n serviceError({\n operation: \"metadata.dataTypeDefinition\",\n cause,\n }),\n });\n if (values.length !== dataTypeNodeIds.length) {\n return yield* Effect.fail(\n serviceError({\n operation: \"metadata.dataTypeDefinition\",\n cause: `Expected ${dataTypeNodeIds.length} DataValues, got ${values.length}`,\n }),\n );\n }\n return yield* Effect.forEach(\n dataTypeNodeIds,\n (dataTypeNodeId, index) =>\n Effect.gen(function* () {\n const result = normalizeDefinitionResult(\n dataTypeNodeId,\n metadataResults[index],\n values[index],\n );\n const name = dataTypeName(dataTypeNodeId, metadataResults[index]);\n const canReadDynamicDefinition =\n nodesToRead[index]?.nodeId.namespace !== 0;\n if (isEmptyStructureResult(result)) {\n if (!canReadDynamicDefinition) {\n return {\n _tag: \"Unsupported\" as const,\n dataTypeNodeId,\n reason: \"Structure DataTypeDefinition has no fields\",\n };\n }\n return yield* readDynamicDataTypeDefinition(\n () =>\n (dynamicManager ??= getExtraDataTypeManager(\n session,\n DataTypeExtractStrategy.Both,\n )),\n dataTypeNodeId,\n name,\n ).pipe(\n Effect.map(\n (fallback) =>\n fallback ?? {\n _tag: \"Unsupported\" as const,\n dataTypeNodeId,\n reason: \"Structure DataTypeDefinition has no fields\",\n },\n ),\n );\n }\n if (result._tag !== \"Missing\") return result;\n const enumFallback = yield* readEnumPropertyDefinition(\n session,\n dataTypeNodeId,\n name,\n );\n if (enumFallback) return enumFallback;\n if (!canReadDynamicDefinition) return result;\n return yield* readDynamicDataTypeDefinition(\n () =>\n (dynamicManager ??= getExtraDataTypeManager(\n session,\n DataTypeExtractStrategy.Both,\n )),\n dataTypeNodeId,\n name,\n ).pipe(Effect.map((fallback) => fallback ?? result));\n }),\n { concurrency: 1 },\n );\n });\n\nconst isEmptyStructureResult = (result: OpcuaDataTypeDefinitionResult) =>\n result._tag === \"Success\" &&\n result.definition._tag === \"Structure\" &&\n result.definition.fields.length === 0;\n\nconst readDynamicDataTypeDefinition = (\n getDynamicManager: () => Promise<unknown>,\n dataTypeNodeId: string,\n name: string,\n): Effect.Effect<OpcuaDataTypeDefinitionResult | undefined> =>\n Effect.promise(async () => {\n try {\n const manager = await getDynamicManager();\n const definition = normalizeDynamicDefinition(\n manager,\n dataTypeNodeId,\n name,\n );\n return definition\n ? {\n _tag: \"Success\" as const,\n dataTypeNodeId,\n definition,\n }\n : undefined;\n } catch {\n return undefined;\n }\n });\n\nconst normalizeDynamicDefinition = (\n manager: unknown,\n dataTypeNodeId: string,\n name: string,\n): OpcuaDataTypeDefinition | undefined => {\n const nodeId = coerceNodeId(dataTypeNodeId);\n const structureInfo = dynamicStructureInfo(manager, nodeId);\n if (structureInfo) {\n const raw = convertStructureTypeSchemaToStructureDefinition(\n structureInfo.schema,\n );\n const definition = normalizeRawDefinition(dataTypeNodeId, name, raw);\n return definition._tag === \"Structure\" && definition.fields.length > 0\n ? definition\n : undefined;\n }\n return dynamicEnumDefinition(manager, nodeId, dataTypeNodeId, name);\n};\n\nconst dynamicStructureInfo = (\n manager: unknown,\n dataTypeNodeId: NodeId,\n): { readonly schema: DynamicStructureSchema } | undefined => {\n if (!isRecord(manager)) return undefined;\n const getStructureInfoForDataType = manager.getStructureInfoForDataType;\n if (typeof getStructureInfoForDataType !== \"function\") return undefined;\n const info = getStructureInfoForDataType.call(manager, dataTypeNodeId);\n if (!isRecord(info) || !(\"schema\" in info)) return undefined;\n return info as { readonly schema: DynamicStructureSchema };\n};\n\nconst dynamicEnumDefinition = (\n manager: unknown,\n nodeId: NodeId,\n dataTypeNodeId: string,\n name: string,\n): OpcuaEnumDefinition | undefined => {\n if (!isRecord(manager)) return undefined;\n const getDataTypeFactory = manager.getDataTypeFactory;\n if (typeof getDataTypeFactory !== \"function\") return undefined;\n const factory = getDataTypeFactory.call(manager, nodeId.namespace);\n if (!isRecord(factory)) return undefined;\n const getEnumIterator = factory.getEnumIterator;\n if (typeof getEnumIterator !== \"function\") return undefined;\n for (const rawEnum of getEnumIterator.call(factory) as Iterable<unknown>) {\n if (!isRecord(rawEnum)) continue;\n const rawNodeId = rawEnum.dataTypeNodeId;\n if (\n !isRecord(rawNodeId) ||\n typeof rawNodeId.toString !== \"function\" ||\n !sameNodeId(coerceNodeId(rawNodeId.toString()), nodeId)\n ) {\n continue;\n }\n const fields = enumFieldsFromMap(rawEnum.enumValues);\n if (fields.length === 0) return undefined;\n return {\n _tag: \"Enum\",\n dataTypeNodeId,\n name,\n fields,\n };\n }\n return undefined;\n};\n\nconst readEnumPropertyDefinition = (\n session: ClientSession,\n dataTypeNodeId: string,\n name: string,\n): Effect.Effect<OpcuaDataTypeDefinitionResult | undefined, OpcuaError> =>\n Effect.gen(function* () {\n const browseResult = yield* Effect.tryPromise({\n try: () =>\n session.browse({\n nodeId: coerceNodeId(dataTypeNodeId),\n referenceTypeId: coerceNodeId(ReferenceTypeIds.HasProperty),\n browseDirection: BrowseDirection.Forward,\n includeSubtypes: false,\n resultMask: 63,\n }),\n catch: (cause) =>\n serviceError({\n operation: \"metadata.dataTypeEnumProperties\",\n nodeId: dataTypeNodeId,\n cause,\n }),\n });\n if (!isGood(browseResult.statusCode)) return undefined;\n const enumValues = browseResult.references?.find(\n (reference) => reference.browseName?.name === \"EnumValues\",\n );\n const enumStrings = browseResult.references?.find(\n (reference) => reference.browseName?.name === \"EnumStrings\",\n );\n const property = enumValues ?? enumStrings;\n if (!property) return undefined;\n\n const dataValue = yield* Effect.tryPromise({\n try: () =>\n session.read(\n {\n nodeId: property.nodeId,\n attributeId: AttributeIds.Value,\n },\n 0,\n ),\n catch: (cause) =>\n serviceError({\n operation: \"metadata.dataTypeEnumProperties\",\n nodeId: dataTypeNodeId,\n cause,\n }),\n });\n if (!isGood(dataValue.statusCode)) return undefined;\n try {\n const fields =\n property === enumValues\n ? normalizeEnumValues(dataValue.value?.value)\n : normalizeEnumStrings(dataValue.value?.value);\n return {\n _tag: \"Success\",\n dataTypeNodeId,\n definition: {\n _tag: \"Enum\",\n dataTypeNodeId,\n name,\n fields,\n },\n };\n } catch (cause) {\n return {\n _tag: \"Failure\",\n dataTypeNodeId,\n reason: cause instanceof Error ? cause.message : String(cause),\n };\n }\n });\n\nconst normalizeDefinitionResult = (\n dataTypeNodeId: string,\n metadata: OpcuaNodeMetadataResult | undefined,\n dataValue: DataValue | undefined,\n): OpcuaDataTypeDefinitionResult => {\n if (!dataValue || !isGood(dataValue.statusCode)) {\n return {\n _tag: \"Missing\",\n dataTypeNodeId,\n reason: normalizeStatusCode(\n dataValue?.statusCode ?? StatusCodes.BadAttributeIdInvalid,\n ).text,\n };\n }\n const raw = dataValue.value?.value;\n const name = dataTypeName(dataTypeNodeId, metadata);\n try {\n const definition = normalizeRawDefinition(dataTypeNodeId, name, raw);\n return definition._tag === \"Unsupported\"\n ? {\n _tag: \"Unsupported\",\n dataTypeNodeId,\n reason: definition.reason,\n }\n : {\n _tag: \"Success\",\n dataTypeNodeId,\n definition,\n };\n } catch (cause) {\n return {\n _tag: \"Failure\",\n dataTypeNodeId,\n reason: cause instanceof Error ? cause.message : String(cause),\n };\n }\n};\n\nconst dataTypeName = (\n dataTypeNodeId: string,\n metadata: OpcuaNodeMetadataResult | undefined,\n) =>\n metadata?._tag === \"Success\"\n ? (metadata.metadata.browseName ?? dataTypeNodeId)\n : dataTypeNodeId;\n\nconst normalizeRawDefinition = (\n dataTypeNodeId: string,\n name: string,\n raw: unknown,\n):\n | OpcuaDataTypeDefinition\n | { readonly _tag: \"Unsupported\"; readonly reason: string } => {\n if (!isRecord(raw)) {\n return {\n _tag: \"Unsupported\",\n reason: \"DataTypeDefinition is not an object\",\n };\n }\n if (\"structureType\" in raw) {\n return {\n _tag: \"Structure\",\n dataTypeNodeId,\n name,\n structureType: normalizeStructureType(raw.structureType),\n fields: arrayValue(raw.fields).map((field) =>\n normalizeStructureField(field),\n ),\n };\n }\n if (\"fields\" in raw) {\n return {\n _tag: \"Enum\",\n dataTypeNodeId,\n name,\n fields: arrayValue(raw.fields).map((field) => normalizeEnumField(field)),\n };\n }\n return {\n _tag: \"Unsupported\",\n reason: \"Unsupported DataTypeDefinition shape\",\n };\n};\n\nconst normalizeStructureField = (raw: unknown): OpcuaStructureField => {\n if (!isRecord(raw)) throw new Error(\"Structure field is not an object\");\n return {\n name: stringValue(raw.name),\n dataTypeNodeId: nodeIdString(raw.dataType),\n valueRank: numberOrUndefined(raw.valueRank),\n arrayDimensions: numberArrayOrUndefined(raw.arrayDimensions),\n isOptional: booleanOrUndefined(raw.isOptional),\n description: localizedText(raw.description),\n };\n};\n\nconst normalizeEnumField = (raw: unknown): OpcuaEnumField => {\n if (!isRecord(raw)) throw new Error(\"Enum field is not an object\");\n return {\n name: stringValue(raw.name),\n value: int64Number(raw.value),\n description: localizedText(raw.description),\n };\n};\n\nconst enumFieldsFromMap = (raw: unknown): readonly OpcuaEnumField[] => {\n if (Array.isArray(raw)) {\n return raw.map((name, value) => ({ name: stringValue(name), value }));\n }\n if (!isRecord(raw)) return [];\n return Object.entries(raw).flatMap(([name, value]) =>\n Number.isNaN(Number(name)) && typeof value === \"number\"\n ? [{ name, value }]\n : [],\n );\n};\n\nconst normalizeEnumValues = (raw: unknown): readonly OpcuaEnumField[] => {\n if (!Array.isArray(raw)) throw new Error(\"EnumValues is not an array\");\n return raw.map((field) => {\n if (!isRecord(field)) throw new Error(\"EnumValues entry is not an object\");\n return {\n name:\n localizedText(field.displayName) ??\n localizedText(field.name) ??\n stringValue(field.name),\n value: int64Number(field.value),\n description: localizedText(field.description),\n };\n });\n};\n\nconst normalizeEnumStrings = (raw: unknown): readonly OpcuaEnumField[] => {\n if (!Array.isArray(raw)) throw new Error(\"EnumStrings is not an array\");\n return raw.map((field, value) => ({\n name: localizedText(field) ?? stringValue(field),\n value,\n description: localizedText(field),\n }));\n};\n\nconst normalizeStructureType = (\n value: unknown,\n): OpcuaStructureDefinition[\"structureType\"] => {\n switch (numericEnumValue(value)) {\n case 0:\n return \"Structure\";\n case 1:\n return \"StructureWithOptionalFields\";\n case 2:\n return \"Union\";\n default:\n return \"Unknown\";\n }\n};\n\nconst arrayValue = (value: unknown): readonly unknown[] =>\n Array.isArray(value) ? value : [];\n\nconst stringValue = (value: unknown): string =>\n typeof value === \"string\" ? value : \"\";\n\nconst nodeIdString = (value: unknown): string =>\n isRecord(value) && typeof value.toString === \"function\"\n ? value.toString()\n : String(value ?? \"\");\n\nconst numberOrUndefined = (value: unknown): number | undefined =>\n typeof value === \"number\" ? value : undefined;\n\nconst numberArrayOrUndefined = (\n value: unknown,\n): readonly number[] | undefined =>\n Array.isArray(value) && value.every((item) => typeof item === \"number\")\n ? [...value]\n : undefined;\n\nconst booleanOrUndefined = (value: unknown): boolean | undefined =>\n typeof value === \"boolean\" ? value : undefined;\n\nconst localizedText = (value: unknown): string | undefined => {\n if (!isRecord(value)) return undefined;\n const text = value.text;\n return typeof text === \"string\" ? text : undefined;\n};\n\nconst numericEnumValue = (value: unknown): number | undefined => {\n if (typeof value === \"number\") return value;\n if (isRecord(value) && typeof value.value === \"number\") return value.value;\n return undefined;\n};\n\nconst int64Number = (value: unknown): number => {\n if (typeof value === \"number\") return value;\n if (typeof value === \"bigint\") return Number(value);\n if (\n Array.isArray(value) &&\n value.length >= 2 &&\n typeof value[0] === \"number\" &&\n typeof value[1] === \"number\"\n ) {\n const high = value[0] | 0;\n const low = value[1] >>> 0;\n return high * 0x1_0000_0000 + low;\n }\n if (isRecord(value) && typeof value.value === \"number\") return value.value;\n throw new Error(`Enum value is not numeric: ${String(value)}`);\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { NodeIdString } from "../../OpcuaVariable.mjs";
|
|
2
|
+
import "../common/node-id.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/internal/events/model.d.ts
|
|
5
|
+
type OpcuaClientEvent = {
|
|
6
|
+
readonly _tag: "Connected";
|
|
7
|
+
readonly endpointUrl: string;
|
|
8
|
+
} | {
|
|
9
|
+
readonly _tag: "Backoff";
|
|
10
|
+
readonly unsafeRaw: unknown;
|
|
11
|
+
} | {
|
|
12
|
+
readonly _tag: "StartReconnection";
|
|
13
|
+
readonly unsafeRaw: unknown;
|
|
14
|
+
} | {
|
|
15
|
+
readonly _tag: "AfterReconnection";
|
|
16
|
+
readonly unsafeRaw: unknown;
|
|
17
|
+
} | {
|
|
18
|
+
readonly _tag: "ConnectionLost";
|
|
19
|
+
readonly unsafeRaw: unknown;
|
|
20
|
+
} | {
|
|
21
|
+
readonly _tag: "ConnectionReestablished";
|
|
22
|
+
readonly unsafeRaw: unknown;
|
|
23
|
+
} | {
|
|
24
|
+
readonly _tag: "Disconnected";
|
|
25
|
+
readonly endpointUrl?: string;
|
|
26
|
+
};
|
|
27
|
+
type OpcuaSessionEvent = {
|
|
28
|
+
readonly _tag: "KeepAlive";
|
|
29
|
+
readonly unsafeRaw: unknown;
|
|
30
|
+
} | {
|
|
31
|
+
readonly _tag: "KeepAliveFailure";
|
|
32
|
+
readonly unsafeRaw: unknown;
|
|
33
|
+
} | {
|
|
34
|
+
readonly _tag: "SessionClosed";
|
|
35
|
+
readonly unsafeRaw: unknown;
|
|
36
|
+
} | {
|
|
37
|
+
readonly _tag: "SessionRestored";
|
|
38
|
+
};
|
|
39
|
+
type OpcuaSubscriptionEvent = {
|
|
40
|
+
readonly _tag: "Started";
|
|
41
|
+
readonly subscriptionId: number;
|
|
42
|
+
} | {
|
|
43
|
+
readonly _tag: "Terminated";
|
|
44
|
+
readonly subscriptionId?: number;
|
|
45
|
+
readonly cause?: unknown;
|
|
46
|
+
} | {
|
|
47
|
+
readonly _tag: "KeepAlive";
|
|
48
|
+
readonly subscriptionId: number;
|
|
49
|
+
} | {
|
|
50
|
+
readonly _tag: "InternalError";
|
|
51
|
+
readonly subscriptionId?: number;
|
|
52
|
+
readonly cause: unknown;
|
|
53
|
+
} | {
|
|
54
|
+
readonly _tag: "StatusChanged";
|
|
55
|
+
readonly subscriptionId?: number;
|
|
56
|
+
readonly unsafeRaw: unknown;
|
|
57
|
+
} | {
|
|
58
|
+
readonly _tag: "ClientBufferDropped";
|
|
59
|
+
readonly subscriptionId?: number;
|
|
60
|
+
readonly nodeId: NodeIdString;
|
|
61
|
+
} | {
|
|
62
|
+
readonly _tag: "MonitorItemsCreated";
|
|
63
|
+
readonly subscriptionId?: number;
|
|
64
|
+
readonly nodeIds: ReadonlyArray<NodeIdString>;
|
|
65
|
+
} | {
|
|
66
|
+
readonly _tag: "MonitorItemsTerminated";
|
|
67
|
+
readonly subscriptionId?: number;
|
|
68
|
+
readonly nodeIds: ReadonlyArray<NodeIdString>;
|
|
69
|
+
};
|
|
70
|
+
//#endregion
|
|
71
|
+
export { OpcuaClientEvent, OpcuaSessionEvent, OpcuaSubscriptionEvent };
|
|
72
|
+
//# sourceMappingURL=model.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.mts","names":[],"sources":["../../../src/internal/events/model.ts"],"sourcesContent":[],"mappings":";;;;KAEY,gBAAA;;;AAAZ,CAAA,GAAY;EASA,SAAA,IAAA,EAAA,SAAiB;EAMjB,SAAA,SAAA,EAAA,OAAsB;CAqBX,GAAA;EAKe,SAAA,IAAA,EAAA,mBAAA;EAAd,SAAA,SAAA,EAAA,OAAA;CAKc,GAAA;EAAd,SAAA,IAAA,EAAA,mBAAA;EAAa,SAAA,SAAA,EAAA,OAAA;;;;;;;;;;;KArCzB,iBAAA;;;;;;;;;;;;KAMA,sBAAA;;;;;;;;;;;;;;;;;;;;;mBAqBW;;;;oBAKC,cAAc;;;;oBAKd,cAAc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { OpcuaClientEvent, OpcuaSessionEvent, OpcuaSubscriptionEvent } from "./model.mjs";
|
|
2
|
+
import { ClientSession, ClientSubscription, OPCUAClient } from "node-opcua";
|
|
3
|
+
import { Effect, PubSub } from "effect";
|
|
4
|
+
import * as effect_Scope2 from "effect/Scope";
|
|
5
|
+
|
|
6
|
+
//#region src/internal/events/wire.d.ts
|
|
7
|
+
type Emitter = {
|
|
8
|
+
readonly on: (event: string, listener: (...args: ReadonlyArray<unknown>) => void) => unknown;
|
|
9
|
+
readonly off?: (event: string, listener: (...args: ReadonlyArray<unknown>) => void) => unknown;
|
|
10
|
+
readonly removeListener?: (event: string, listener: (...args: ReadonlyArray<unknown>) => void) => unknown;
|
|
11
|
+
};
|
|
12
|
+
type EventMapping<A> = {
|
|
13
|
+
readonly event: string;
|
|
14
|
+
readonly make: (...args: ReadonlyArray<unknown>) => A;
|
|
15
|
+
};
|
|
16
|
+
declare const EventBus: {
|
|
17
|
+
publishUnsafe: <A>(pubsub: PubSub.PubSub<A>, event: A) => boolean;
|
|
18
|
+
wireEmitter: <A>(emitter: Emitter, mappings: ReadonlyArray<EventMapping<A>>, pubsub: PubSub.PubSub<A>) => Effect.Effect<{
|
|
19
|
+
event: string;
|
|
20
|
+
listener: (...args: ReadonlyArray<unknown>) => void;
|
|
21
|
+
}[], never, effect_Scope2.Scope>;
|
|
22
|
+
};
|
|
23
|
+
declare const wireClientEvents: (client: OPCUAClient, events: PubSub.PubSub<OpcuaClientEvent>) => Effect.Effect<{
|
|
24
|
+
event: string;
|
|
25
|
+
listener: (...args: ReadonlyArray<unknown>) => void;
|
|
26
|
+
}[], never, effect_Scope2.Scope>;
|
|
27
|
+
declare const wireSessionEvents: (session: ClientSession, events: PubSub.PubSub<OpcuaSessionEvent>) => Effect.Effect<{
|
|
28
|
+
event: string;
|
|
29
|
+
listener: (...args: ReadonlyArray<unknown>) => void;
|
|
30
|
+
}[], never, effect_Scope2.Scope>;
|
|
31
|
+
declare const wireSubscriptionEvents: (subscription: ClientSubscription, events: PubSub.PubSub<OpcuaSubscriptionEvent>) => Effect.Effect<{
|
|
32
|
+
event: string;
|
|
33
|
+
listener: (...args: ReadonlyArray<unknown>) => void;
|
|
34
|
+
}[], never, effect_Scope2.Scope>;
|
|
35
|
+
//#endregion
|
|
36
|
+
export { EventBus, wireClientEvents, wireSessionEvents, wireSubscriptionEvents };
|
|
37
|
+
//# sourceMappingURL=wire.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.d.mts","names":[],"sources":["../../../src/internal/events/wire.ts"],"sourcesContent":[],"mappings":";;;;;;KAaK,OAAA;mDAGmB;qDAIA;EAPnB,SAAA,cAAO,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,CAAA,GAAA,IAAA,EAWY,aAXZ,CAAA,OAAA,CAAA,EAAA,GAAA,IAAA,EAAA,GAAA,OAAA;CAGY;KAYnB,YARmB,CAAA,CAAA,CAAA,GAAA;EAIA,SAAA,KAAA,EAAA,MAAA;EAAa,SAAA,IAAA,EAAA,CAAA,GAAA,IAAA,EAMV,aANU,CAAA,OAAA,CAAA,EAAA,GAMiB,CANjB;AAAA,CAAA;AASxB,cAAA,QA0BZ,EAAA;EAzB0C,aAAA,EAAA,CAAA,CAAA,CAAA,CAAA,MAAA,EAAd,MAAA,CAAO,MAAO,CAAA,CAAA,CAAA,EAAA,KAAA,EAAW,CAAX,EAAA,GAAA,OAAA;EAAd,WAAO,EAAA,CAAA,CAAA,CAAA,CAAA,OAAA,EAGvB,OAHuB,EAAA,QAAA,EAItB,aAJsB,CAIR,YAJQ,CAIK,CAJL,CAAA,CAAA,EAAA,MAAA,EAKxB,MAAA,CAAO,MALiB,CAKV,CALU,CAAA,EAAA,GAKR,MAAA,CAAA,MALQ,CAAA;IAAkB,KAAA,EAAA,MAAA;IAGzC,QAAA,EAAA,CAAA,GAAA,IAAA,EAOwB,aAPxB,CAAA,OAAA,CAAA,EAAA,GAAA,IAAA;EAC4B,CAAA,EAAA,EAAA,KAAA,EAMS,aAAA,CAAA,KAAA,CANT;CAAb;AAAd,cAuBD,gBAvBC,EAAA,CAAA,MAAA,EAwBJ,WAxBI,EAAA,MAAA,EAyBJ,MAAA,CAAO,MAzBH,CAyBU,gBAzBV,CAAA,EAAA,GAyB2B,MAAA,CAAA,MAzB3B,CAAA;EACY,KAAA,EAAA,MAAA;EAAd,QAAO,EAAA,CAAA,GAAA,IAAA,EAKkB,aALlB,CAAA,OAAA,CAAA,EAAA,GAAA,IAAA;CAKkB,EAAA,EAAA,KAAA,EAAa,aAAA,CAAA,KAAA,CAAb;AAAa,cAoDrC,iBApDqC,EAAA,CAAA,OAAA,EAqDvC,aArDuC,EAAA,MAAA,EAsDxC,MAAA,CAAO,MAtDiC,CAsD1B,iBAtD0B,CAAA,EAAA,GAsDR,MAAA,CAAA,MAtDQ,CAAA;EALtB,KAAA,EAAA,MAAA;EAAA,QAAA,EAAA,CAAA,GAAA,IAAA,EAKS,aALT,CAAA,OAAA,CAAA,EAAA,GAAA,IAAA;AAsB5B,CAAA,EAAA,EAAa,KAAA,EAjBqC,aAAA,CAAA,KAAA,CAkD/C;AAhCO,cA6DG,sBA7DH,EAAA,CAAA,YAAA,EA8DM,kBA9DN,EAAA,MAAA,EA+DA,MAAA,CAAO,MA/DP,CA+Dc,sBA/Dd,CAAA,EAAA,GA+DqC,MAAA,CAAA,MA/DrC,CAAA;EACc,KAAA,EAAA,MAAA;EAAd,QAAO,EAAA,CAAA,GAAA,IAAA,EAnBoB,aAmBpB,CAAA,OAAA,CAAA,EAAA,GAAA,IAAA;CAnBoB,EAAA,EAAA,KAAA,EAAa,aAAA,CAAA,KAAA,CAAb"}
|