@things-factory/integration-opc 6.1.122 → 6.1.124

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.
@@ -37,8 +37,8 @@ class OPCUAConnector {
37
37
  .on('terminated', () => integration_base_1.ConnectionManager.logger.info('subscription terminated'));
38
38
  try {
39
39
  integration_base_1.ConnectionManager.addConnectionInstance(config, {
40
- read: async function (node, { logger }) {
41
- const dataValue = await session.read({ nodeId: node, attributeId: node_opcua_1.AttributeIds.Value });
40
+ read: async function (node, attribute, { logger }) {
41
+ const dataValue = await session.read({ nodeId: node, attributeId: Number(attribute) });
42
42
  if (dataValue.statusCode !== node_opcua_1.StatusCodes.Good) {
43
43
  logger.info('Could not read ', node);
44
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"opc-ua.js","sourceRoot":"","sources":["../../../server/engine/connector/opc-ua.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n OPCUAClient,\n BrowseResult,\n ReferenceDescription,\n AttributeIds,\n StatusCodes,\n TimestampsToReturn,\n DataValue,\n DataType,\n StatusCode,\n ClientMonitoredItem,\n Variant\n} from 'node-opcua'\n\nimport { Connection, ConnectionManager, Connector } from '@things-factory/integration-base'\n\nexport class OPCUAConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('opc-ua connections are ready')\n }\n\n async connect(config) {\n var {\n name,\n endpoint,\n params: {\n maxRetry = 2,\n initialDelay = 2000,\n maxDelay = 10 * 1000,\n requestedPublishingInterval = 1000,\n requestedLifetimeCount = 100,\n requestedMaxKeepAliveCount = 20,\n maxNotificationsPerPublish = 10,\n publishingEnabled = true,\n priority = 10\n }\n } = config\n\n const client = OPCUAClient.create({\n endpoint_must_exist: false,\n connectionStrategy: {\n maxRetry,\n initialDelay,\n maxDelay\n }\n })\n\n client.on('backoff', () => ConnectionManager.logger.info('retrying connection'))\n\n await client.connect(endpoint)\n\n const session = await client.createSession()\n\n const browseResult: BrowseResult = (await session.browse('RootFolder')) as BrowseResult\n\n ConnectionManager.logger.info(\n browseResult.references.map((r: ReferenceDescription) => r.browseName.toString()).join('\\n')\n )\n\n const subscription = await session.createSubscription2({\n requestedPublishingInterval,\n requestedLifetimeCount,\n requestedMaxKeepAliveCount,\n maxNotificationsPerPublish,\n publishingEnabled,\n priority\n })\n\n subscription\n .on('started', () =>\n ConnectionManager.logger.info('subscription started - subscriptionId=', subscription.subscriptionId)\n )\n .on('keepalive', () => ConnectionManager.logger.info('keepalive'))\n .on('terminated', () => ConnectionManager.logger.info('subscription terminated'))\n\n try {\n ConnectionManager.addConnectionInstance(config, {\n read: async function (node, { logger }): Promise<DataValue> {\n const dataValue = await session.read({ nodeId: node, attributeId: AttributeIds.Value })\n if (dataValue.statusCode !== StatusCodes.Good) {\n logger.info('Could not read ', node)\n }\n logger.info(` dataValue = ${dataValue.value.toString()}`)\n\n return dataValue\n },\n write: async function (node, dataValue, dataType, { logger }): Promise<StatusCode> {\n const resultVariant = new Variant({\n dataType,\n value: dataValue\n })\n\n const statusCode = await session.write({\n nodeId: node,\n attributeId: AttributeIds.Value,\n value: {\n value: resultVariant\n }\n })\n\n logger.info('statusCode = ', statusCode.name)\n return statusCode\n },\n startMonitor: async function (\n node,\n callback: (dataValue: DataValue) => void,\n options: { samplingInterval: number; discardOldest: boolean; queueSize: number },\n { logger }\n ): Promise<ClientMonitoredItem> {\n const { samplingInterval = 100, discardOldest = true, queueSize = 10 } = options || {}\n const monitoredItem = await subscription.monitor(\n {\n nodeId: node,\n attributeId: AttributeIds.Value\n },\n {\n samplingInterval,\n discardOldest,\n queueSize\n },\n TimestampsToReturn.Both\n )\n\n monitoredItem.on('changed', callback)\n return monitoredItem\n },\n stopMonitor: async function (monitoredItem, { logger }): Promise<void> {\n await monitoredItem.terminate()\n return monitoredItem\n },\n close: async function (): Promise<void> {\n await subscription?.terminate()\n await session?.close()\n await client?.disconnect()\n }\n })\n\n ConnectionManager.logger.info(`opc-ua connection(${name}:${endpoint}) is connected`)\n } catch (error) {\n ConnectionManager.logger.info(`opc-ua connection(${name}:${endpoint}) failed to connect`)\n }\n }\n\n async disconnect(connection: Connection) {\n var { close } = ConnectionManager.removeConnectionInstance(connection)\n await close()\n\n ConnectionManager.logger.info(`opc-ua connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'number',\n name: 'maxRetry',\n label: 'max-retry'\n },\n {\n type: 'number',\n name: 'initialDelay',\n label: 'initial-delay'\n },\n {\n type: 'number',\n name: 'maxDelay',\n label: 'max-delay'\n },\n {\n type: 'number',\n name: 'requestedPublishingInterval',\n label: 'requested-publishing-interval'\n },\n {\n type: 'number',\n name: 'requestedLifetimeCount',\n label: 'requested-lifetime-count'\n },\n {\n type: 'number',\n name: 'requestedMaxKeepAliveCount',\n label: 'requested-max-keep-alive-count'\n },\n {\n type: 'number',\n name: 'maxNotificationsPerPublish',\n label: 'max-notifications-per-publish'\n },\n {\n type: 'boolean',\n name: 'publishingEnabled',\n label: 'publishing-enabled'\n },\n {\n type: 'number',\n name: 'priority',\n label: 'priority'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['opc-ua']\n }\n\n get help() {\n return 'integration/connector/opc-ua'\n }\n}\n\nConnectionManager.registerConnector('opc-ua', new OPCUAConnector())\n"]}
1
+ {"version":3,"file":"opc-ua.js","sourceRoot":"","sources":["../../../server/engine/connector/opc-ua.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n OPCUAClient,\n BrowseResult,\n ReferenceDescription,\n AttributeIds,\n StatusCodes,\n TimestampsToReturn,\n DataValue,\n DataType,\n StatusCode,\n ClientMonitoredItem,\n Variant\n} from 'node-opcua'\n\nimport { Connection, ConnectionManager, Connector } from '@things-factory/integration-base'\n\nexport class OPCUAConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('opc-ua connections are ready')\n }\n\n async connect(config) {\n var {\n name,\n endpoint,\n params: {\n maxRetry = 2,\n initialDelay = 2000,\n maxDelay = 10 * 1000,\n requestedPublishingInterval = 1000,\n requestedLifetimeCount = 100,\n requestedMaxKeepAliveCount = 20,\n maxNotificationsPerPublish = 10,\n publishingEnabled = true,\n priority = 10\n }\n } = config\n\n const client = OPCUAClient.create({\n endpoint_must_exist: false,\n connectionStrategy: {\n maxRetry,\n initialDelay,\n maxDelay\n }\n })\n\n client.on('backoff', () => ConnectionManager.logger.info('retrying connection'))\n\n await client.connect(endpoint)\n\n const session = await client.createSession()\n\n const browseResult: BrowseResult = (await session.browse('RootFolder')) as BrowseResult\n\n ConnectionManager.logger.info(\n browseResult.references.map((r: ReferenceDescription) => r.browseName.toString()).join('\\n')\n )\n\n const subscription = await session.createSubscription2({\n requestedPublishingInterval,\n requestedLifetimeCount,\n requestedMaxKeepAliveCount,\n maxNotificationsPerPublish,\n publishingEnabled,\n priority\n })\n\n subscription\n .on('started', () =>\n ConnectionManager.logger.info('subscription started - subscriptionId=', subscription.subscriptionId)\n )\n .on('keepalive', () => ConnectionManager.logger.info('keepalive'))\n .on('terminated', () => ConnectionManager.logger.info('subscription terminated'))\n\n try {\n ConnectionManager.addConnectionInstance(config, {\n read: async function (node, attribute, { logger }): Promise<DataValue> {\n const dataValue = await session.read({ nodeId: node, attributeId: Number(attribute) })\n if (dataValue.statusCode !== StatusCodes.Good) {\n logger.info('Could not read ', node)\n }\n logger.info(` dataValue = ${dataValue.value.toString()}`)\n\n return dataValue\n },\n write: async function (node, dataValue, dataType, { logger }): Promise<StatusCode> {\n const resultVariant = new Variant({\n dataType,\n value: dataValue\n })\n\n const statusCode = await session.write({\n nodeId: node,\n attributeId: AttributeIds.Value,\n value: {\n value: resultVariant\n }\n })\n\n logger.info('statusCode = ', statusCode.name)\n return statusCode\n },\n startMonitor: async function (\n node,\n callback: (dataValue: DataValue) => void,\n options: { samplingInterval: number; discardOldest: boolean; queueSize: number },\n { logger }\n ): Promise<ClientMonitoredItem> {\n const { samplingInterval = 100, discardOldest = true, queueSize = 10 } = options || {}\n const monitoredItem = await subscription.monitor(\n {\n nodeId: node,\n attributeId: AttributeIds.Value\n },\n {\n samplingInterval,\n discardOldest,\n queueSize\n },\n TimestampsToReturn.Both\n )\n\n monitoredItem.on('changed', callback)\n return monitoredItem\n },\n stopMonitor: async function (monitoredItem, { logger }): Promise<void> {\n await monitoredItem.terminate()\n return monitoredItem\n },\n close: async function (): Promise<void> {\n await subscription?.terminate()\n await session?.close()\n await client?.disconnect()\n }\n })\n\n ConnectionManager.logger.info(`opc-ua connection(${name}:${endpoint}) is connected`)\n } catch (error) {\n ConnectionManager.logger.info(`opc-ua connection(${name}:${endpoint}) failed to connect`)\n }\n }\n\n async disconnect(connection: Connection) {\n var { close } = ConnectionManager.removeConnectionInstance(connection)\n await close()\n\n ConnectionManager.logger.info(`opc-ua connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'number',\n name: 'maxRetry',\n label: 'max-retry'\n },\n {\n type: 'number',\n name: 'initialDelay',\n label: 'initial-delay'\n },\n {\n type: 'number',\n name: 'maxDelay',\n label: 'max-delay'\n },\n {\n type: 'number',\n name: 'requestedPublishingInterval',\n label: 'requested-publishing-interval'\n },\n {\n type: 'number',\n name: 'requestedLifetimeCount',\n label: 'requested-lifetime-count'\n },\n {\n type: 'number',\n name: 'requestedMaxKeepAliveCount',\n label: 'requested-max-keep-alive-count'\n },\n {\n type: 'number',\n name: 'maxNotificationsPerPublish',\n label: 'max-notifications-per-publish'\n },\n {\n type: 'boolean',\n name: 'publishingEnabled',\n label: 'publishing-enabled'\n },\n {\n type: 'number',\n name: 'priority',\n label: 'priority'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['opc-ua']\n }\n\n get help() {\n return 'integration/connector/opc-ua'\n }\n}\n\nConnectionManager.registerConnector('opc-ua', new OPCUAConnector())\n"]}
@@ -4,4 +4,5 @@ require("./opc-ua-read");
4
4
  require("./opc-ua-write");
5
5
  require("./opc-ua-start-monitor");
6
6
  require("./opc-ua-stop-monitor");
7
+ require("./utils");
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/engine/task/index.ts"],"names":[],"mappings":";;AAAA,yBAAsB;AACtB,0BAAuB;AACvB,kCAA+B;AAC/B,iCAA8B","sourcesContent":["import './opc-ua-read'\nimport './opc-ua-write'\nimport './opc-ua-start-monitor'\nimport './opc-ua-stop-monitor'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/engine/task/index.ts"],"names":[],"mappings":";;AAAA,yBAAsB;AACtB,0BAAuB;AACvB,kCAA+B;AAC/B,iCAA8B;AAC9B,mBAAgB","sourcesContent":["import './opc-ua-read'\nimport './opc-ua-write'\nimport './opc-ua-start-monitor'\nimport './opc-ua-stop-monitor'\nimport './utils'\n"]}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const integration_base_1 = require("@things-factory/integration-base");
4
+ const node_opcua_1 = require("node-opcua");
5
+ const utils_1 = require("./utils");
4
6
  async function OPCUARead(step, { logger, domain }) {
5
- var { connection, params: { node } } = step;
7
+ var { connection, params: { node, attribute } } = step;
6
8
  var client = integration_base_1.ConnectionManager.getConnectionInstanceByName(domain, connection);
7
9
  if (!client) {
8
10
  throw new Error(`no connection : ${connection}`);
@@ -11,10 +13,10 @@ async function OPCUARead(step, { logger, domain }) {
11
13
  throw new Error('node parameter should be defined');
12
14
  }
13
15
  var { read } = client;
14
- var content = await read(node, { logger });
16
+ var content = await read(node, attribute, { logger });
15
17
  return {
16
18
  data: {
17
- dataType: content === null || content === void 0 ? void 0 : content.value.dataType,
19
+ dataType: utils_1.DataTypeString[content === null || content === void 0 ? void 0 : content.value.dataType],
18
20
  value: content === null || content === void 0 ? void 0 : content.value.value
19
21
  }
20
22
  };
@@ -24,6 +26,42 @@ OPCUARead.parameterSpec = [
24
26
  type: 'string',
25
27
  name: 'node',
26
28
  label: 'node'
29
+ },
30
+ {
31
+ type: 'select',
32
+ label: 'attribute',
33
+ name: 'attribute',
34
+ property: {
35
+ options: [
36
+ { display: 'Value', value: node_opcua_1.AttributeIds.Value },
37
+ { display: 'DataType', value: node_opcua_1.AttributeIds.DataType },
38
+ { display: 'NodeId', value: node_opcua_1.AttributeIds.NodeId },
39
+ { display: 'NodeClass', value: node_opcua_1.AttributeIds.NodeClass },
40
+ { display: 'BrowseName', value: node_opcua_1.AttributeIds.BrowseName },
41
+ { display: 'DisplayName', value: node_opcua_1.AttributeIds.DisplayName },
42
+ { display: 'Description', value: node_opcua_1.AttributeIds.Description },
43
+ { display: 'WriteMask', value: node_opcua_1.AttributeIds.WriteMask },
44
+ { display: 'UserWriteMask', value: node_opcua_1.AttributeIds.UserWriteMask },
45
+ { display: 'IsAbstract', value: node_opcua_1.AttributeIds.IsAbstract },
46
+ { display: 'Symmetric', value: node_opcua_1.AttributeIds.Symmetric },
47
+ { display: 'InverseName', value: node_opcua_1.AttributeIds.InverseName },
48
+ { display: 'ContainsNoLoops', value: node_opcua_1.AttributeIds.ContainsNoLoops },
49
+ { display: 'EventNotifier', value: node_opcua_1.AttributeIds.EventNotifier },
50
+ { display: 'ValueRank', value: node_opcua_1.AttributeIds.ValueRank },
51
+ { display: 'ArrayDimensions', value: node_opcua_1.AttributeIds.ArrayDimensions },
52
+ { display: 'AccessLevel', value: node_opcua_1.AttributeIds.AccessLevel },
53
+ { display: 'UserAccessLevel', value: node_opcua_1.AttributeIds.UserAccessLevel },
54
+ { display: 'MinimumSamplingInterval', value: node_opcua_1.AttributeIds.MinimumSamplingInterval },
55
+ { display: 'Historizing', value: node_opcua_1.AttributeIds.Historizing },
56
+ { display: 'Executable', value: node_opcua_1.AttributeIds.Executable },
57
+ { display: 'UserExecutable', value: node_opcua_1.AttributeIds.UserExecutable },
58
+ { display: 'DataTypeDefinition', value: node_opcua_1.AttributeIds.DataTypeDefinition },
59
+ { display: 'RolePermissions', value: node_opcua_1.AttributeIds.RolePermissions },
60
+ { display: 'UserRolePermissions', value: node_opcua_1.AttributeIds.UserRolePermissions },
61
+ { display: 'AccessRestrictions', value: node_opcua_1.AttributeIds.AccessRestrictions },
62
+ { display: 'AccessLevelEx', value: node_opcua_1.AttributeIds.AccessLevelEx }
63
+ ]
64
+ }
27
65
  }
28
66
  ];
29
67
  OPCUARead.help = 'integration/task/opc-ua-read';
@@ -1 +1 @@
1
- {"version":3,"file":"opc-ua-read.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-read.ts"],"names":[],"mappings":";;AAAA,uEAAkF;AAGlF,KAAK,UAAU,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;IAC/C,IAAI,EACF,UAAU,EACV,MAAM,EAAE,EAAE,IAAI,EAAE,EACjB,GAAG,IAAI,CAAA;IAER,IAAI,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC9E,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;KACjD;IAED,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;KACpD;IAED,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IACrB,IAAI,OAAO,GAAc,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAErD,OAAO;QACL,IAAI,EAAE;YACJ,QAAQ,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,QAAQ;YACjC,KAAK,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,KAAK;SAC5B;KACF,CAAA;AACH,CAAC;AAED,SAAS,CAAC,aAAa,GAAG;IACxB;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;KACd;CACF,CAAA;AAED,SAAS,CAAC,IAAI,GAAG,8BAA8B,CAAA;AAE/C,+BAAY,CAAC,mBAAmB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA","sourcesContent":["import { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\nimport { DataValue } from 'node-opcua'\n\nasync function OPCUARead(step, { logger, domain }) {\n var {\n connection,\n params: { node }\n } = step\n\n var client = ConnectionManager.getConnectionInstanceByName(domain, connection)\n if (!client) {\n throw new Error(`no connection : ${connection}`)\n }\n\n if (!node) {\n throw new Error('node parameter should be defined')\n }\n\n var { read } = client\n var content: DataValue = await read(node, { logger })\n\n return {\n data: {\n dataType: content?.value.dataType,\n value: content?.value.value\n }\n }\n}\n\nOPCUARead.parameterSpec = [\n {\n type: 'string',\n name: 'node',\n label: 'node'\n }\n]\n\nOPCUARead.help = 'integration/task/opc-ua-read'\n\nTaskRegistry.registerTaskHandler('opc-ua-read', OPCUARead)\n"]}
1
+ {"version":3,"file":"opc-ua-read.js","sourceRoot":"","sources":["../../../server/engine/task/opc-ua-read.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\nimport { DataType, DataValue, AttributeIds } from 'node-opcua'\nimport { DataTypeString } from './utils'\n\nasync function OPCUARead(step, { logger, domain }) {\n var {\n connection,\n params: { node, attribute }\n } = step\n\n var client = ConnectionManager.getConnectionInstanceByName(domain, connection)\n if (!client) {\n throw new Error(`no connection : ${connection}`)\n }\n\n if (!node) {\n throw new Error('node parameter should be defined')\n }\n\n var { read } = client\n var content: DataValue = await read(node, attribute, { logger })\n\n return {\n data: {\n dataType: DataTypeString[content?.value.dataType],\n value: content?.value.value\n }\n }\n}\n\nOPCUARead.parameterSpec = [\n {\n type: 'string',\n name: 'node',\n label: 'node'\n },\n {\n type: 'select',\n label: 'attribute',\n name: 'attribute',\n property: {\n options: [\n { display: 'Value', value: AttributeIds.Value },\n { display: 'DataType', value: AttributeIds.DataType },\n { display: 'NodeId', value: AttributeIds.NodeId },\n { display: 'NodeClass', value: AttributeIds.NodeClass },\n { display: 'BrowseName', value: AttributeIds.BrowseName },\n { display: 'DisplayName', value: AttributeIds.DisplayName },\n { display: 'Description', value: AttributeIds.Description },\n { display: 'WriteMask', value: AttributeIds.WriteMask },\n { display: 'UserWriteMask', value: AttributeIds.UserWriteMask },\n { display: 'IsAbstract', value: AttributeIds.IsAbstract },\n { display: 'Symmetric', value: AttributeIds.Symmetric },\n { display: 'InverseName', value: AttributeIds.InverseName },\n { display: 'ContainsNoLoops', value: AttributeIds.ContainsNoLoops },\n { display: 'EventNotifier', value: AttributeIds.EventNotifier },\n { display: 'ValueRank', value: AttributeIds.ValueRank },\n { display: 'ArrayDimensions', value: AttributeIds.ArrayDimensions },\n { display: 'AccessLevel', value: AttributeIds.AccessLevel },\n { display: 'UserAccessLevel', value: AttributeIds.UserAccessLevel },\n { display: 'MinimumSamplingInterval', value: AttributeIds.MinimumSamplingInterval },\n { display: 'Historizing', value: AttributeIds.Historizing },\n { display: 'Executable', value: AttributeIds.Executable },\n { display: 'UserExecutable', value: AttributeIds.UserExecutable },\n { display: 'DataTypeDefinition', value: AttributeIds.DataTypeDefinition },\n { display: 'RolePermissions', value: AttributeIds.RolePermissions },\n { display: 'UserRolePermissions', value: AttributeIds.UserRolePermissions },\n { display: 'AccessRestrictions', value: AttributeIds.AccessRestrictions },\n { display: 'AccessLevelEx', value: AttributeIds.AccessLevelEx }\n ]\n }\n }\n]\n\nOPCUARead.help = 'integration/task/opc-ua-read'\n\nTaskRegistry.registerTaskHandler('opc-ua-read', OPCUARead)\n"]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataTypeString = void 0;
4
+ const node_opcua_1 = require("node-opcua");
5
+ exports.DataTypeString = {
6
+ [node_opcua_1.DataType.Null]: 'Null',
7
+ [node_opcua_1.DataType.Boolean]: 'Boolean',
8
+ [node_opcua_1.DataType.SByte]: 'SByte',
9
+ [node_opcua_1.DataType.Byte]: 'Byte',
10
+ [node_opcua_1.DataType.Int16]: 'Int16',
11
+ [node_opcua_1.DataType.UInt16]: 'UInt16',
12
+ [node_opcua_1.DataType.Int32]: 'Int32',
13
+ [node_opcua_1.DataType.UInt32]: 'UInt32',
14
+ [node_opcua_1.DataType.Int64]: 'Int64',
15
+ [node_opcua_1.DataType.UInt64]: 'UInt64',
16
+ [node_opcua_1.DataType.Float]: 'Float',
17
+ [node_opcua_1.DataType.Double]: 'Double',
18
+ [node_opcua_1.DataType.String]: 'String',
19
+ [node_opcua_1.DataType.DateTime]: 'DateTime',
20
+ [node_opcua_1.DataType.Guid]: 'Guid',
21
+ [node_opcua_1.DataType.ByteString]: 'ByteString',
22
+ [node_opcua_1.DataType.XmlElement]: 'XmlElement',
23
+ [node_opcua_1.DataType.NodeId]: 'NodeId',
24
+ [node_opcua_1.DataType.ExpandedNodeId]: 'ExpandedNodeId',
25
+ [node_opcua_1.DataType.StatusCode]: 'StatusCode',
26
+ [node_opcua_1.DataType.QualifiedName]: 'QualifiedName',
27
+ [node_opcua_1.DataType.LocalizedText]: 'LocalizedText',
28
+ [node_opcua_1.DataType.ExtensionObject]: 'ExtensionObject',
29
+ [node_opcua_1.DataType.DataValue]: 'DataValue',
30
+ [node_opcua_1.DataType.Variant]: 'Variant',
31
+ [node_opcua_1.DataType.DiagnosticInfo]: 'DiagnosticInfo'
32
+ };
33
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../server/engine/task/utils.ts"],"names":[],"mappings":";;;AAAA,2CAAqC;AAExB,QAAA,cAAc,GAAG;IAC5B,CAAC,qBAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACvB,CAAC,qBAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;IAC7B,CAAC,qBAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,qBAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACvB,CAAC,qBAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,qBAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,qBAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,qBAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,qBAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,qBAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,qBAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,qBAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,qBAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,qBAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC/B,CAAC,qBAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACvB,CAAC,qBAAQ,CAAC,UAAU,CAAC,EAAE,YAAY;IACnC,CAAC,qBAAQ,CAAC,UAAU,CAAC,EAAE,YAAY;IACnC,CAAC,qBAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,qBAAQ,CAAC,cAAc,CAAC,EAAE,gBAAgB;IAC3C,CAAC,qBAAQ,CAAC,UAAU,CAAC,EAAE,YAAY;IACnC,CAAC,qBAAQ,CAAC,aAAa,CAAC,EAAE,eAAe;IACzC,CAAC,qBAAQ,CAAC,aAAa,CAAC,EAAE,eAAe;IACzC,CAAC,qBAAQ,CAAC,eAAe,CAAC,EAAE,iBAAiB;IAC7C,CAAC,qBAAQ,CAAC,SAAS,CAAC,EAAE,WAAW;IACjC,CAAC,qBAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;IAC7B,CAAC,qBAAQ,CAAC,cAAc,CAAC,EAAE,gBAAgB;CAC5C,CAAA","sourcesContent":["import { DataType } from 'node-opcua'\n\nexport const DataTypeString = {\n [DataType.Null]: 'Null',\n [DataType.Boolean]: 'Boolean',\n [DataType.SByte]: 'SByte',\n [DataType.Byte]: 'Byte',\n [DataType.Int16]: 'Int16',\n [DataType.UInt16]: 'UInt16',\n [DataType.Int32]: 'Int32',\n [DataType.UInt32]: 'UInt32',\n [DataType.Int64]: 'Int64',\n [DataType.UInt64]: 'UInt64',\n [DataType.Float]: 'Float',\n [DataType.Double]: 'Double',\n [DataType.String]: 'String',\n [DataType.DateTime]: 'DateTime',\n [DataType.Guid]: 'Guid',\n [DataType.ByteString]: 'ByteString',\n [DataType.XmlElement]: 'XmlElement',\n [DataType.NodeId]: 'NodeId',\n [DataType.ExpandedNodeId]: 'ExpandedNodeId',\n [DataType.StatusCode]: 'StatusCode',\n [DataType.QualifiedName]: 'QualifiedName',\n [DataType.LocalizedText]: 'LocalizedText',\n [DataType.ExtensionObject]: 'ExtensionObject',\n [DataType.DataValue]: 'DataValue',\n [DataType.Variant]: 'Variant',\n [DataType.DiagnosticInfo]: 'DiagnosticInfo'\n}\n"]}