@ya-modbus/mqtt-bridge 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/CHANGELOG.md +4 -2
  2. package/dist/cjs/bin/ya-modbus-bridge.d.ts.map +1 -0
  3. package/dist/cjs/bin/ya-modbus-bridge.js +12 -0
  4. package/dist/cjs/bin/ya-modbus-bridge.js.map +1 -0
  5. package/dist/cjs/package.json +1 -0
  6. package/dist/cjs/src/cli.d.ts.map +1 -0
  7. package/dist/cjs/src/cli.js +113 -0
  8. package/dist/cjs/src/cli.js.map +1 -0
  9. package/dist/cjs/src/device-manager.d.ts.map +1 -0
  10. package/dist/cjs/src/device-manager.js +82 -0
  11. package/dist/cjs/src/device-manager.js.map +1 -0
  12. package/dist/cjs/src/driver-loader.d.ts.map +1 -0
  13. package/dist/cjs/src/driver-loader.js +122 -0
  14. package/dist/cjs/src/driver-loader.js.map +1 -0
  15. package/dist/cjs/src/index.d.ts.map +1 -0
  16. package/dist/cjs/src/index.js +291 -0
  17. package/dist/cjs/src/index.js.map +1 -0
  18. package/dist/cjs/src/polling-scheduler.d.ts.map +1 -0
  19. package/dist/cjs/src/polling-scheduler.js +130 -0
  20. package/dist/cjs/src/polling-scheduler.js.map +1 -0
  21. package/dist/cjs/src/types.d.ts.map +1 -0
  22. package/dist/cjs/src/types.js +3 -0
  23. package/dist/{src → cjs/src}/types.js.map +1 -1
  24. package/dist/cjs/src/utils/config-validator.d.ts.map +1 -0
  25. package/dist/cjs/src/utils/config-validator.js +35 -0
  26. package/dist/cjs/src/utils/config-validator.js.map +1 -0
  27. package/dist/cjs/src/utils/config.d.ts.map +1 -0
  28. package/dist/cjs/src/utils/config.js +55 -0
  29. package/dist/cjs/src/utils/config.js.map +1 -0
  30. package/dist/cjs/src/utils/device-validation.d.ts.map +1 -0
  31. package/dist/cjs/src/utils/device-validation.js +74 -0
  32. package/dist/cjs/src/utils/device-validation.js.map +1 -0
  33. package/dist/cjs/src/utils/package-info.d.ts.map +1 -0
  34. package/dist/cjs/src/utils/package-info.js +30 -0
  35. package/dist/cjs/src/utils/package-info.js.map +1 -0
  36. package/dist/cjs/src/utils/process.d.ts.map +1 -0
  37. package/dist/cjs/src/utils/process.js +16 -0
  38. package/dist/cjs/src/utils/process.js.map +1 -0
  39. package/dist/cjs/src/utils/test-utils.d.ts.map +1 -0
  40. package/dist/cjs/src/utils/test-utils.js +556 -0
  41. package/dist/cjs/src/utils/test-utils.js.map +1 -0
  42. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  43. package/dist/esm/bin/ya-modbus-bridge.d.ts +9 -0
  44. package/dist/esm/bin/ya-modbus-bridge.d.ts.map +1 -0
  45. package/dist/esm/bin/ya-modbus-bridge.js.map +1 -0
  46. package/dist/esm/package.json +1 -0
  47. package/dist/esm/src/cli.d.ts +4 -0
  48. package/dist/esm/src/cli.d.ts.map +1 -0
  49. package/dist/esm/src/cli.js.map +1 -0
  50. package/dist/esm/src/device-manager.d.ts +17 -0
  51. package/dist/esm/src/device-manager.d.ts.map +1 -0
  52. package/dist/{src → esm/src}/device-manager.js +2 -3
  53. package/dist/esm/src/device-manager.js.map +1 -0
  54. package/dist/esm/src/driver-loader.d.ts +53 -0
  55. package/dist/esm/src/driver-loader.d.ts.map +1 -0
  56. package/dist/{src → esm/src}/driver-loader.js +2 -4
  57. package/dist/esm/src/driver-loader.js.map +1 -0
  58. package/dist/esm/src/index.d.ts +13 -0
  59. package/dist/esm/src/index.d.ts.map +1 -0
  60. package/dist/esm/src/index.js.map +1 -0
  61. package/dist/esm/src/polling-scheduler.d.ts +48 -0
  62. package/dist/esm/src/polling-scheduler.d.ts.map +1 -0
  63. package/dist/{src → esm/src}/polling-scheduler.js +2 -4
  64. package/dist/esm/src/polling-scheduler.js.map +1 -0
  65. package/dist/esm/src/types.d.ts +86 -0
  66. package/dist/esm/src/types.d.ts.map +1 -0
  67. package/dist/esm/src/types.js.map +1 -0
  68. package/dist/esm/src/utils/config-validator.d.ts +3 -0
  69. package/dist/esm/src/utils/config-validator.d.ts.map +1 -0
  70. package/dist/esm/src/utils/config-validator.js.map +1 -0
  71. package/dist/esm/src/utils/config.d.ts +3 -0
  72. package/dist/esm/src/utils/config.d.ts.map +1 -0
  73. package/dist/esm/src/utils/config.js.map +1 -0
  74. package/dist/esm/src/utils/device-validation.d.ts +31 -0
  75. package/dist/esm/src/utils/device-validation.d.ts.map +1 -0
  76. package/dist/esm/src/utils/device-validation.js.map +1 -0
  77. package/dist/esm/src/utils/package-info.d.ts +5 -0
  78. package/dist/esm/src/utils/package-info.d.ts.map +1 -0
  79. package/dist/esm/src/utils/package-info.js +27 -0
  80. package/dist/esm/src/utils/package-info.js.map +1 -0
  81. package/dist/esm/src/utils/process.d.ts +10 -0
  82. package/dist/esm/src/utils/process.d.ts.map +1 -0
  83. package/dist/esm/src/utils/process.js.map +1 -0
  84. package/dist/esm/src/utils/test-utils.d.ts +313 -0
  85. package/dist/esm/src/utils/test-utils.d.ts.map +1 -0
  86. package/dist/esm/src/utils/test-utils.js.map +1 -0
  87. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  88. package/package.json +27 -10
  89. package/dist/bin/ya-modbus-bridge.d.ts.map +0 -1
  90. package/dist/bin/ya-modbus-bridge.js.map +0 -1
  91. package/dist/src/cli.d.ts.map +0 -1
  92. package/dist/src/cli.js.map +0 -1
  93. package/dist/src/device-manager.d.ts.map +0 -1
  94. package/dist/src/device-manager.js.map +0 -1
  95. package/dist/src/driver-loader.d.ts.map +0 -1
  96. package/dist/src/driver-loader.js.map +0 -1
  97. package/dist/src/index.d.ts.map +0 -1
  98. package/dist/src/index.js.map +0 -1
  99. package/dist/src/polling-scheduler.d.ts.map +0 -1
  100. package/dist/src/polling-scheduler.js.map +0 -1
  101. package/dist/src/types.d.ts.map +0 -1
  102. package/dist/src/utils/__mocks__/package-info.d.ts +0 -9
  103. package/dist/src/utils/__mocks__/package-info.d.ts.map +0 -1
  104. package/dist/src/utils/__mocks__/package-info.js +0 -11
  105. package/dist/src/utils/__mocks__/package-info.js.map +0 -1
  106. package/dist/src/utils/__mocks__/process.d.ts +0 -20
  107. package/dist/src/utils/__mocks__/process.d.ts.map +0 -1
  108. package/dist/src/utils/__mocks__/process.js +0 -37
  109. package/dist/src/utils/__mocks__/process.js.map +0 -1
  110. package/dist/src/utils/config-validator.d.ts.map +0 -1
  111. package/dist/src/utils/config-validator.js.map +0 -1
  112. package/dist/src/utils/config.d.ts.map +0 -1
  113. package/dist/src/utils/config.js.map +0 -1
  114. package/dist/src/utils/device-validation.d.ts.map +0 -1
  115. package/dist/src/utils/device-validation.js.map +0 -1
  116. package/dist/src/utils/package-info.d.ts.map +0 -1
  117. package/dist/src/utils/package-info.js +0 -11
  118. package/dist/src/utils/package-info.js.map +0 -1
  119. package/dist/src/utils/process.d.ts.map +0 -1
  120. package/dist/src/utils/process.js.map +0 -1
  121. package/dist/src/utils/test-utils.d.ts.map +0 -1
  122. package/dist/src/utils/test-utils.js.map +0 -1
  123. package/dist/tsconfig.tsbuildinfo +0 -1
  124. /package/dist/{bin → cjs/bin}/ya-modbus-bridge.d.ts +0 -0
  125. /package/dist/{src → cjs/src}/cli.d.ts +0 -0
  126. /package/dist/{src → cjs/src}/device-manager.d.ts +0 -0
  127. /package/dist/{src → cjs/src}/driver-loader.d.ts +0 -0
  128. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  129. /package/dist/{src → cjs/src}/polling-scheduler.d.ts +0 -0
  130. /package/dist/{src → cjs/src}/types.d.ts +0 -0
  131. /package/dist/{src → cjs/src}/utils/config-validator.d.ts +0 -0
  132. /package/dist/{src → cjs/src}/utils/config.d.ts +0 -0
  133. /package/dist/{src → cjs/src}/utils/device-validation.d.ts +0 -0
  134. /package/dist/{src → cjs/src}/utils/package-info.d.ts +0 -0
  135. /package/dist/{src → cjs/src}/utils/process.d.ts +0 -0
  136. /package/dist/{src → cjs/src}/utils/test-utils.d.ts +0 -0
  137. /package/dist/{bin → esm/bin}/ya-modbus-bridge.js +0 -0
  138. /package/dist/{src → esm/src}/cli.js +0 -0
  139. /package/dist/{src → esm/src}/index.js +0 -0
  140. /package/dist/{src → esm/src}/types.js +0 -0
  141. /package/dist/{src → esm/src}/utils/config-validator.js +0 -0
  142. /package/dist/{src → esm/src}/utils/config.js +0 -0
  143. /package/dist/{src → esm/src}/utils/device-validation.js +0 -0
  144. /package/dist/{src → esm/src}/utils/process.js +0 -0
  145. /package/dist/{src → esm/src}/utils/test-utils.js +0 -0
package/CHANGELOG.md CHANGED
@@ -3,9 +3,11 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [0.6.1](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/mqtt-bridge@0.6.0...@ya-modbus/mqtt-bridge@0.6.1) (2026-01-08)
6
+ # [0.7.0](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/mqtt-bridge@0.6.0...@ya-modbus/mqtt-bridge@0.7.0) (2026-01-11)
7
7
 
8
- **Note:** Version bump only for package @ya-modbus/mqtt-bridge
8
+ ### Features
9
+
10
+ - **build:** add dual CommonJS/ESM package support ([#187](https://github.com/groupsky/ya-modbus/issues/187)) ([3d78130](https://github.com/groupsky/ya-modbus/commit/3d781304d42edba335cdc320ba25275f3b4ea6c9))
9
11
 
10
12
  # 0.6.0 (2026-01-04)
11
13
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ya-modbus-bridge.d.ts","sourceRoot":"","sources":["../../../bin/ya-modbus-bridge.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * CLI entry point
5
+ *
6
+ * This file is the executable entry point that parses command-line arguments.
7
+ * The actual CLI implementation is in src/cli.ts
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const cli_js_1 = require("../src/cli.js");
11
+ cli_js_1.program.parse();
12
+ //# sourceMappingURL=ya-modbus-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ya-modbus-bridge.js","sourceRoot":"","sources":["../../../bin/ya-modbus-bridge.ts"],"names":[],"mappings":";;AAEA;;;;;GAKG;;AAEH,0CAAuC;AAEvC,gBAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUnC,eAAO,MAAM,OAAO,SAAgB,CAAA"}
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.program = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ const commander_1 = require("commander");
8
+ const config_validator_js_1 = require("./utils/config-validator.js");
9
+ const config_js_1 = require("./utils/config.js");
10
+ const package_info_js_1 = require("./utils/package-info.js");
11
+ const process_js_1 = require("./utils/process.js");
12
+ const index_js_1 = require("./index.js");
13
+ exports.program = new commander_1.Command();
14
+ const packageInfo = (0, package_info_js_1.getPackageInfo)();
15
+ exports.program.name('ya-modbus-bridge').description(packageInfo.description).version(packageInfo.version);
16
+ // Error handler for command execution
17
+ exports.program.exitOverride(); // Prevent automatic exit, let us handle errors
18
+ exports.program.configureOutput({
19
+ /* istanbul ignore next - commander internal error output */
20
+ writeErr: (str) => process.stderr.write(str),
21
+ });
22
+ exports.program
23
+ .command('run')
24
+ .description('Run the MQTT bridge')
25
+ .option('-c, --config <path>', 'Path to configuration file')
26
+ .option('--mqtt-url <url>', 'MQTT broker URL (mqtt://, mqtts://, ws://, wss://)')
27
+ .option('--mqtt-client-id <id>', 'MQTT client identifier')
28
+ .option('--mqtt-username <username>', 'MQTT authentication username')
29
+ .option('--mqtt-password <password>', 'MQTT authentication password')
30
+ .option('--mqtt-reconnect-period <ms>', 'Reconnection interval in milliseconds', parseInt)
31
+ .option('--topic-prefix <prefix>', 'Topic prefix for all MQTT topics (default: modbus)')
32
+ .option('--state-dir <path>', 'Directory path for state persistence')
33
+ .action(async (options) => {
34
+ try {
35
+ await runCommand(options);
36
+ }
37
+ catch (error) {
38
+ console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : String(error));
39
+ process_js_1.processUtils.exit(1);
40
+ }
41
+ });
42
+ async function runCommand(options) {
43
+ console.log(chalk_1.default.blue('Loading configuration...'));
44
+ let config;
45
+ if (options.config) {
46
+ // Load from file
47
+ config = await (0, config_js_1.loadConfig)(options.config);
48
+ // Override with CLI options if provided
49
+ if (options.mqttUrl)
50
+ config.mqtt.url = options.mqttUrl;
51
+ if (options.mqttClientId)
52
+ config.mqtt.clientId = options.mqttClientId;
53
+ if (options.mqttUsername)
54
+ config.mqtt.username = options.mqttUsername;
55
+ if (options.mqttPassword)
56
+ config.mqtt.password = options.mqttPassword;
57
+ if (options.mqttReconnectPeriod)
58
+ config.mqtt.reconnectPeriod = options.mqttReconnectPeriod;
59
+ if (options.topicPrefix)
60
+ config.topicPrefix = options.topicPrefix;
61
+ if (options.stateDir)
62
+ config.stateDir = options.stateDir;
63
+ }
64
+ else {
65
+ // Build from CLI options only
66
+ if (!options.mqttUrl) {
67
+ throw new Error('Either --config or --mqtt-url must be provided');
68
+ }
69
+ config = {
70
+ mqtt: {
71
+ url: options.mqttUrl,
72
+ ...(options.mqttClientId && { clientId: options.mqttClientId }),
73
+ ...(options.mqttUsername && { username: options.mqttUsername }),
74
+ ...(options.mqttPassword && { password: options.mqttPassword }),
75
+ ...(options.mqttReconnectPeriod && { reconnectPeriod: options.mqttReconnectPeriod }),
76
+ },
77
+ ...(options.topicPrefix && { topicPrefix: options.topicPrefix }),
78
+ ...(options.stateDir && { stateDir: options.stateDir }),
79
+ };
80
+ }
81
+ // Validate configuration after merging CLI options
82
+ (0, config_validator_js_1.validateConfig)(config);
83
+ // Sanitize URL to hide credentials
84
+ const sanitizedUrl = config.mqtt.url.replace(/:\/\/([^:]+):([^@]+)@/, '://$1:****@');
85
+ console.log(chalk_1.default.blue(`Starting MQTT bridge - connecting to ${sanitizedUrl}...`));
86
+ const bridge = (0, index_js_1.createBridge)(config);
87
+ await bridge.start();
88
+ console.log(chalk_1.default.green('Bridge started successfully'));
89
+ let isShuttingDown = false;
90
+ const handleShutdown = async (signal) => {
91
+ if (isShuttingDown) {
92
+ return;
93
+ }
94
+ isShuttingDown = true;
95
+ console.log(chalk_1.default.yellow(`\nReceived ${signal}, shutting down...`));
96
+ await bridge.stop();
97
+ console.log(chalk_1.default.green('Bridge stopped'));
98
+ process_js_1.processUtils.exit(0);
99
+ };
100
+ process_js_1.processUtils.onSignal('SIGINT', () => {
101
+ handleShutdown('SIGINT').catch((err) => {
102
+ console.error(chalk_1.default.red('Shutdown error:'), err);
103
+ process_js_1.processUtils.exit(1);
104
+ });
105
+ });
106
+ process_js_1.processUtils.onSignal('SIGTERM', () => {
107
+ handleShutdown('SIGTERM').catch((err) => {
108
+ console.error(chalk_1.default.red('Shutdown error:'), err);
109
+ process_js_1.processUtils.exit(1);
110
+ });
111
+ });
112
+ }
113
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-manager.d.ts","sourceRoot":"","sources":["../../../src/device-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG5D,qBAAa,aAAa;IAIZ,OAAO,CAAC,YAAY;IAHhC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAkC;gBAE7B,YAAY,EAAE,YAAY;IAExC,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC9C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIrD,WAAW,IAAI,YAAY,EAAE;IAI7B,cAAc,IAAI,MAAM;IAIxB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,GAAG,IAAI;IAYrF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAG5D"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeviceManager = void 0;
4
+ const device_validation_js_1 = require("./utils/device-validation.js");
5
+ class DeviceManager {
6
+ constructor(driverLoader) {
7
+ this.driverLoader = driverLoader;
8
+ this.devices = new Map();
9
+ this.configs = new Map();
10
+ }
11
+ async addDevice(config) {
12
+ (0, device_validation_js_1.validateDeviceConfig)(config);
13
+ if (this.devices.has(config.deviceId)) {
14
+ throw new Error(`Device ${config.deviceId} already exists`);
15
+ }
16
+ const enabled = config.enabled ?? true;
17
+ const status = {
18
+ deviceId: config.deviceId,
19
+ state: 'disconnected',
20
+ enabled,
21
+ connected: false,
22
+ };
23
+ this.devices.set(config.deviceId, status);
24
+ this.configs.set(config.deviceId, config);
25
+ // Load driver if enabled
26
+ if (enabled) {
27
+ try {
28
+ this.updateDeviceState(config.deviceId, { state: 'connecting' });
29
+ await this.driverLoader.loadDriver(config.driver, config.connection, config.deviceId);
30
+ this.updateDeviceState(config.deviceId, {
31
+ state: 'connected',
32
+ connected: true,
33
+ lastUpdate: Date.now(),
34
+ });
35
+ }
36
+ catch (error) {
37
+ // Clean up device state to allow retry (make operation atomic)
38
+ this.devices.delete(config.deviceId);
39
+ this.configs.delete(config.deviceId);
40
+ throw error;
41
+ }
42
+ }
43
+ }
44
+ async removeDevice(deviceId) {
45
+ if (!this.devices.has(deviceId)) {
46
+ throw new Error(`Device ${deviceId} not found`);
47
+ }
48
+ await this.driverLoader.unloadDriver(deviceId);
49
+ this.devices.delete(deviceId);
50
+ this.configs.delete(deviceId);
51
+ }
52
+ getDevice(deviceId) {
53
+ return this.devices.get(deviceId);
54
+ }
55
+ listDevices() {
56
+ return Array.from(this.devices.values());
57
+ }
58
+ getDeviceCount() {
59
+ return this.devices.size;
60
+ }
61
+ updateDeviceState(deviceId, updates) {
62
+ const device = this.devices.get(deviceId);
63
+ if (!device) {
64
+ throw new Error(`Device ${deviceId} not found`);
65
+ }
66
+ this.devices.set(deviceId, {
67
+ ...device,
68
+ ...updates,
69
+ });
70
+ }
71
+ async clear() {
72
+ const deviceIds = Array.from(this.devices.keys());
73
+ await Promise.all(deviceIds.map((id) => this.driverLoader.unloadDriver(id)));
74
+ this.devices.clear();
75
+ this.configs.clear();
76
+ }
77
+ getDeviceConfig(deviceId) {
78
+ return this.configs.get(deviceId);
79
+ }
80
+ }
81
+ exports.DeviceManager = DeviceManager;
82
+ //# sourceMappingURL=device-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-manager.js","sourceRoot":"","sources":["../../../src/device-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-loader.d.ts","sourceRoot":"","sources":["../../../src/driver-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAwB,MAAM,sBAAsB,CAAA;AAE7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,KAAK,kBAAkB,GAAG,OAAO,iBAAiB,CAAA;AAElD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;gBAEvC,YAAY,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,gBAAgB;IAKlF;;;;;;;OAOG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IA2CxB;;;;;OAKG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIrD;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;CAkBpC"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DriverLoader = void 0;
4
+ const driver_loader_1 = require("@ya-modbus/driver-loader");
5
+ const transport_1 = require("@ya-modbus/transport");
6
+ /**
7
+ * Manages dynamic loading and lifecycle of device drivers
8
+ * Uses TransportManager to pool RTU transports and prevent bus collisions
9
+ */
10
+ class DriverLoader {
11
+ constructor(loadDriverFn, transportManager) {
12
+ this.driverInstances = new Map();
13
+ this.devicePackages = new Map();
14
+ this.loadDriverFn = loadDriverFn ?? driver_loader_1.loadDriver;
15
+ this.transportManager = transportManager ?? new transport_1.TransportManager();
16
+ }
17
+ /**
18
+ * Load a driver package and create an instance for a device
19
+ *
20
+ * @param packageName - NPM package name (e.g., '@ya-modbus/driver-xymd1' or 'ya-modbus-driver-test')
21
+ * @param connection - Device connection configuration
22
+ * @param deviceId - Unique device identifier for tracking the instance
23
+ * @returns Driver instance
24
+ */
25
+ async loadDriver(packageName, connection, deviceId) {
26
+ // Security validation: prevent path traversal and code injection
27
+ // Accept both scoped (@ya-modbus/driver-*) and unscoped (ya-modbus-driver-*) packages
28
+ const isValidScopedDriver = packageName.startsWith('@ya-modbus/driver-');
29
+ const isValidUnscopedDriver = packageName.startsWith('ya-modbus-driver-');
30
+ if (!isValidScopedDriver && !isValidUnscopedDriver) {
31
+ throw new Error(`Invalid driver package name: must be @ya-modbus/driver-<name> or ya-modbus-driver-<name>`);
32
+ }
33
+ if (packageName.includes('..') || packageName.includes('\\')) {
34
+ throw new Error('Invalid driver package name: path traversal not allowed');
35
+ }
36
+ // Load driver package using driver-loader
37
+ const loadedDriver = await this.loadDriverFn({ driverPackage: packageName });
38
+ // Get transport from manager (shared for RTU, unique for TCP)
39
+ const config = this.connectionToTransportConfig(connection);
40
+ const transport = await this.transportManager.getTransport(config);
41
+ // Create driver instance
42
+ const driver = await loadedDriver.createDriver({
43
+ transport,
44
+ slaveId: connection.slaveId,
45
+ });
46
+ // Call initialize if available
47
+ if (driver.initialize) {
48
+ await driver.initialize();
49
+ }
50
+ // Cache instance if deviceId provided
51
+ if (deviceId) {
52
+ this.driverInstances.set(deviceId, driver);
53
+ this.devicePackages.set(deviceId, packageName);
54
+ }
55
+ // Note: Don't close transport on failure - it may be shared by other devices
56
+ // The transport manager will handle cleanup when closeAll() is called
57
+ return driver;
58
+ }
59
+ /**
60
+ * Unload a driver instance and clean up resources
61
+ * Note: Transport is managed by TransportManager and not closed here
62
+ *
63
+ * @param deviceId - Device identifier
64
+ */
65
+ async unloadDriver(deviceId) {
66
+ const driver = this.driverInstances.get(deviceId);
67
+ try {
68
+ if (driver?.destroy) {
69
+ await driver.destroy();
70
+ }
71
+ }
72
+ finally {
73
+ // Always remove from cache, even if destroy fails
74
+ this.driverInstances.delete(deviceId);
75
+ this.devicePackages.delete(deviceId);
76
+ }
77
+ // Note: Transport is managed by TransportManager and shared across devices
78
+ // It will be closed when the entire bridge shuts down via closeAll()
79
+ }
80
+ /**
81
+ * Get a loaded driver instance
82
+ *
83
+ * @param deviceId - Device identifier
84
+ * @returns Driver instance or undefined if not loaded
85
+ */
86
+ getDriver(deviceId) {
87
+ return this.driverInstances.get(deviceId);
88
+ }
89
+ /**
90
+ * Close all managed transports
91
+ * Should be called when shutting down the bridge
92
+ */
93
+ async closeAllTransports() {
94
+ await this.transportManager.closeAll();
95
+ }
96
+ /**
97
+ * Convert DeviceConnection to TransportConfig
98
+ *
99
+ * @param connection - Device connection configuration
100
+ * @returns Transport configuration
101
+ */
102
+ connectionToTransportConfig(connection) {
103
+ return connection.type === 'rtu'
104
+ ? {
105
+ port: connection.port,
106
+ baudRate: connection.baudRate,
107
+ dataBits: connection.dataBits,
108
+ parity: connection.parity,
109
+ stopBits: connection.stopBits,
110
+ slaveId: connection.slaveId,
111
+ timeout: connection.timeout,
112
+ }
113
+ : {
114
+ host: connection.host,
115
+ port: connection.port,
116
+ slaveId: connection.slaveId,
117
+ timeout: connection.timeout,
118
+ };
119
+ }
120
+ }
121
+ exports.DriverLoader = DriverLoader;
122
+ //# sourceMappingURL=driver-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-loader.js","sourceRoot":"","sources":["../../../src/driver-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EAMX,MAAM,YAAY,CAAA;AAQnB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG9C,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,EACxB,YAAY,CAAC,EAAE,kBAAkB,GAChC,UAAU,CA0UZ"}