@ya-modbus/cli 0.6.0 → 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 (207) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/bin/ya-modbus.d.ts.map +1 -0
  3. package/dist/cjs/bin/ya-modbus.js +12 -0
  4. package/dist/cjs/bin/ya-modbus.js.map +1 -0
  5. package/dist/cjs/package.json +1 -0
  6. package/dist/cjs/src/commands/discover.d.ts.map +1 -0
  7. package/dist/cjs/src/commands/discover.js +196 -0
  8. package/dist/cjs/src/commands/discover.js.map +1 -0
  9. package/dist/cjs/src/commands/list-devices.d.ts.map +1 -0
  10. package/dist/cjs/src/commands/list-devices.js +79 -0
  11. package/dist/cjs/src/commands/list-devices.js.map +1 -0
  12. package/dist/cjs/src/commands/read.d.ts.map +1 -0
  13. package/dist/cjs/src/commands/read.js +79 -0
  14. package/dist/cjs/src/commands/read.js.map +1 -0
  15. package/dist/cjs/src/commands/show-defaults.d.ts.map +1 -0
  16. package/dist/cjs/src/commands/show-defaults.js +51 -0
  17. package/dist/cjs/src/commands/show-defaults.js.map +1 -0
  18. package/dist/cjs/src/commands/write.d.ts.map +1 -0
  19. package/dist/cjs/src/commands/write.js +65 -0
  20. package/dist/cjs/src/commands/write.js.map +1 -0
  21. package/dist/cjs/src/discovery/constants.d.ts.map +1 -0
  22. package/dist/cjs/src/discovery/constants.js +48 -0
  23. package/dist/cjs/src/discovery/constants.js.map +1 -0
  24. package/dist/cjs/src/discovery/device-identifier.d.ts.map +1 -0
  25. package/dist/cjs/src/discovery/device-identifier.js +196 -0
  26. package/dist/cjs/src/discovery/device-identifier.js.map +1 -0
  27. package/dist/cjs/src/discovery/parameter-generator-utils.d.ts.map +1 -0
  28. package/dist/cjs/src/discovery/parameter-generator-utils.js +63 -0
  29. package/dist/cjs/src/discovery/parameter-generator-utils.js.map +1 -0
  30. package/dist/cjs/src/discovery/parameter-generator.d.ts.map +1 -0
  31. package/dist/cjs/src/discovery/parameter-generator.js +188 -0
  32. package/dist/cjs/src/discovery/parameter-generator.js.map +1 -0
  33. package/dist/cjs/src/discovery/progress.d.ts.map +1 -0
  34. package/dist/cjs/src/discovery/progress.js +59 -0
  35. package/dist/cjs/src/discovery/progress.js.map +1 -0
  36. package/dist/cjs/src/discovery/scanner.d.ts.map +1 -0
  37. package/dist/cjs/src/discovery/scanner.js +147 -0
  38. package/dist/cjs/src/discovery/scanner.js.map +1 -0
  39. package/dist/cjs/src/formatters/discovery-results.d.ts.map +1 -0
  40. package/dist/cjs/src/formatters/discovery-results.js +62 -0
  41. package/dist/cjs/src/formatters/discovery-results.js.map +1 -0
  42. package/dist/cjs/src/formatters/json.d.ts.map +1 -0
  43. package/dist/cjs/src/formatters/json.js +36 -0
  44. package/dist/cjs/src/formatters/json.js.map +1 -0
  45. package/dist/cjs/src/formatters/performance.d.ts.map +1 -0
  46. package/dist/cjs/src/formatters/performance.js +28 -0
  47. package/dist/cjs/src/formatters/performance.js.map +1 -0
  48. package/dist/cjs/src/formatters/table.d.ts.map +1 -0
  49. package/dist/cjs/src/formatters/table.js +95 -0
  50. package/dist/cjs/src/formatters/table.js.map +1 -0
  51. package/dist/cjs/src/index.d.ts.map +1 -0
  52. package/dist/cjs/src/index.js +157 -0
  53. package/dist/cjs/src/index.js.map +1 -0
  54. package/dist/cjs/src/utils/commands.d.ts.map +1 -0
  55. package/dist/cjs/src/utils/commands.js +421 -0
  56. package/dist/cjs/src/utils/commands.js.map +1 -0
  57. package/dist/cjs/src/utils/object-utils.d.ts.map +1 -0
  58. package/dist/cjs/src/utils/object-utils.js +31 -0
  59. package/dist/cjs/src/utils/object-utils.js.map +1 -0
  60. package/dist/cjs/src/utils/validation.d.ts.map +1 -0
  61. package/dist/cjs/src/utils/validation.js +165 -0
  62. package/dist/cjs/src/utils/validation.js.map +1 -0
  63. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  64. package/dist/esm/bin/ya-modbus.d.ts +9 -0
  65. package/dist/esm/bin/ya-modbus.d.ts.map +1 -0
  66. package/dist/esm/bin/ya-modbus.js.map +1 -0
  67. package/dist/esm/package.json +1 -0
  68. package/dist/esm/src/commands/discover.d.ts +25 -0
  69. package/dist/esm/src/commands/discover.d.ts.map +1 -0
  70. package/dist/esm/src/commands/discover.js.map +1 -0
  71. package/dist/esm/src/commands/list-devices.d.ts +21 -0
  72. package/dist/esm/src/commands/list-devices.d.ts.map +1 -0
  73. package/dist/esm/src/commands/list-devices.js.map +1 -0
  74. package/dist/esm/src/commands/read.d.ts +25 -0
  75. package/dist/esm/src/commands/read.d.ts.map +1 -0
  76. package/dist/esm/src/commands/read.js.map +1 -0
  77. package/dist/esm/src/commands/show-defaults.d.ts +21 -0
  78. package/dist/esm/src/commands/show-defaults.d.ts.map +1 -0
  79. package/dist/esm/src/commands/show-defaults.js.map +1 -0
  80. package/dist/esm/src/commands/write.d.ts +26 -0
  81. package/dist/esm/src/commands/write.d.ts.map +1 -0
  82. package/dist/esm/src/commands/write.js.map +1 -0
  83. package/dist/esm/src/discovery/constants.d.ts +37 -0
  84. package/dist/esm/src/discovery/constants.d.ts.map +1 -0
  85. package/dist/esm/src/discovery/constants.js.map +1 -0
  86. package/dist/esm/src/discovery/device-identifier.d.ts +52 -0
  87. package/dist/esm/src/discovery/device-identifier.d.ts.map +1 -0
  88. package/dist/esm/src/discovery/device-identifier.js.map +1 -0
  89. package/dist/esm/src/discovery/parameter-generator-utils.d.ts +29 -0
  90. package/dist/esm/src/discovery/parameter-generator-utils.d.ts.map +1 -0
  91. package/dist/esm/src/discovery/parameter-generator-utils.js.map +1 -0
  92. package/dist/esm/src/discovery/parameter-generator.d.ts +97 -0
  93. package/dist/esm/src/discovery/parameter-generator.d.ts.map +1 -0
  94. package/dist/esm/src/discovery/parameter-generator.js.map +1 -0
  95. package/dist/esm/src/discovery/progress.d.ts +24 -0
  96. package/dist/esm/src/discovery/progress.d.ts.map +1 -0
  97. package/dist/{src → esm/src}/discovery/progress.js +2 -4
  98. package/dist/esm/src/discovery/progress.js.map +1 -0
  99. package/dist/esm/src/discovery/scanner.d.ts +46 -0
  100. package/dist/esm/src/discovery/scanner.d.ts.map +1 -0
  101. package/dist/esm/src/discovery/scanner.js.map +1 -0
  102. package/dist/esm/src/formatters/discovery-results.d.ts +10 -0
  103. package/dist/esm/src/formatters/discovery-results.d.ts.map +1 -0
  104. package/dist/esm/src/formatters/discovery-results.js.map +1 -0
  105. package/dist/esm/src/formatters/json.d.ts +30 -0
  106. package/dist/esm/src/formatters/json.d.ts.map +1 -0
  107. package/dist/esm/src/formatters/json.js.map +1 -0
  108. package/dist/esm/src/formatters/performance.d.ts +19 -0
  109. package/dist/esm/src/formatters/performance.d.ts.map +1 -0
  110. package/dist/esm/src/formatters/performance.js.map +1 -0
  111. package/dist/esm/src/formatters/table.d.ts +10 -0
  112. package/dist/esm/src/formatters/table.d.ts.map +1 -0
  113. package/dist/esm/src/formatters/table.js.map +1 -0
  114. package/dist/esm/src/index.d.ts +5 -0
  115. package/dist/esm/src/index.d.ts.map +1 -0
  116. package/dist/esm/src/index.js.map +1 -0
  117. package/dist/esm/src/utils/commands.d.ts +191 -0
  118. package/dist/esm/src/utils/commands.d.ts.map +1 -0
  119. package/dist/esm/src/utils/commands.js.map +1 -0
  120. package/dist/esm/src/utils/object-utils.d.ts +20 -0
  121. package/dist/esm/src/utils/object-utils.d.ts.map +1 -0
  122. package/dist/esm/src/utils/object-utils.js.map +1 -0
  123. package/dist/esm/src/utils/validation.d.ts +70 -0
  124. package/dist/esm/src/utils/validation.d.ts.map +1 -0
  125. package/dist/{src → esm/src}/utils/validation.js +0 -3
  126. package/dist/esm/src/utils/validation.js.map +1 -0
  127. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  128. package/package.json +26 -9
  129. package/dist/bin/ya-modbus.d.ts.map +0 -1
  130. package/dist/bin/ya-modbus.js.map +0 -1
  131. package/dist/src/commands/discover.d.ts.map +0 -1
  132. package/dist/src/commands/discover.js.map +0 -1
  133. package/dist/src/commands/list-devices.d.ts.map +0 -1
  134. package/dist/src/commands/list-devices.js.map +0 -1
  135. package/dist/src/commands/read.d.ts.map +0 -1
  136. package/dist/src/commands/read.js.map +0 -1
  137. package/dist/src/commands/show-defaults.d.ts.map +0 -1
  138. package/dist/src/commands/show-defaults.js.map +0 -1
  139. package/dist/src/commands/write.d.ts.map +0 -1
  140. package/dist/src/commands/write.js.map +0 -1
  141. package/dist/src/discovery/constants.d.ts.map +0 -1
  142. package/dist/src/discovery/constants.js.map +0 -1
  143. package/dist/src/discovery/device-identifier.d.ts.map +0 -1
  144. package/dist/src/discovery/device-identifier.js.map +0 -1
  145. package/dist/src/discovery/parameter-generator-utils.d.ts.map +0 -1
  146. package/dist/src/discovery/parameter-generator-utils.js.map +0 -1
  147. package/dist/src/discovery/parameter-generator.d.ts.map +0 -1
  148. package/dist/src/discovery/parameter-generator.js.map +0 -1
  149. package/dist/src/discovery/progress.d.ts.map +0 -1
  150. package/dist/src/discovery/progress.js.map +0 -1
  151. package/dist/src/discovery/scanner.d.ts.map +0 -1
  152. package/dist/src/discovery/scanner.js.map +0 -1
  153. package/dist/src/formatters/discovery-results.d.ts.map +0 -1
  154. package/dist/src/formatters/discovery-results.js.map +0 -1
  155. package/dist/src/formatters/json.d.ts.map +0 -1
  156. package/dist/src/formatters/json.js.map +0 -1
  157. package/dist/src/formatters/performance.d.ts.map +0 -1
  158. package/dist/src/formatters/performance.js.map +0 -1
  159. package/dist/src/formatters/table.d.ts.map +0 -1
  160. package/dist/src/formatters/table.js.map +0 -1
  161. package/dist/src/index.d.ts.map +0 -1
  162. package/dist/src/index.js.map +0 -1
  163. package/dist/src/utils/commands.d.ts.map +0 -1
  164. package/dist/src/utils/commands.js.map +0 -1
  165. package/dist/src/utils/object-utils.d.ts.map +0 -1
  166. package/dist/src/utils/object-utils.js.map +0 -1
  167. package/dist/src/utils/validation.d.ts.map +0 -1
  168. package/dist/src/utils/validation.js.map +0 -1
  169. package/dist/tsconfig.tsbuildinfo +0 -1
  170. /package/dist/{bin → cjs/bin}/ya-modbus.d.ts +0 -0
  171. /package/dist/{src → cjs/src}/commands/discover.d.ts +0 -0
  172. /package/dist/{src → cjs/src}/commands/list-devices.d.ts +0 -0
  173. /package/dist/{src → cjs/src}/commands/read.d.ts +0 -0
  174. /package/dist/{src → cjs/src}/commands/show-defaults.d.ts +0 -0
  175. /package/dist/{src → cjs/src}/commands/write.d.ts +0 -0
  176. /package/dist/{src → cjs/src}/discovery/constants.d.ts +0 -0
  177. /package/dist/{src → cjs/src}/discovery/device-identifier.d.ts +0 -0
  178. /package/dist/{src → cjs/src}/discovery/parameter-generator-utils.d.ts +0 -0
  179. /package/dist/{src → cjs/src}/discovery/parameter-generator.d.ts +0 -0
  180. /package/dist/{src → cjs/src}/discovery/progress.d.ts +0 -0
  181. /package/dist/{src → cjs/src}/discovery/scanner.d.ts +0 -0
  182. /package/dist/{src → cjs/src}/formatters/discovery-results.d.ts +0 -0
  183. /package/dist/{src → cjs/src}/formatters/json.d.ts +0 -0
  184. /package/dist/{src → cjs/src}/formatters/performance.d.ts +0 -0
  185. /package/dist/{src → cjs/src}/formatters/table.d.ts +0 -0
  186. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  187. /package/dist/{src → cjs/src}/utils/commands.d.ts +0 -0
  188. /package/dist/{src → cjs/src}/utils/object-utils.d.ts +0 -0
  189. /package/dist/{src → cjs/src}/utils/validation.d.ts +0 -0
  190. /package/dist/{bin → esm/bin}/ya-modbus.js +0 -0
  191. /package/dist/{src → esm/src}/commands/discover.js +0 -0
  192. /package/dist/{src → esm/src}/commands/list-devices.js +0 -0
  193. /package/dist/{src → esm/src}/commands/read.js +0 -0
  194. /package/dist/{src → esm/src}/commands/show-defaults.js +0 -0
  195. /package/dist/{src → esm/src}/commands/write.js +0 -0
  196. /package/dist/{src → esm/src}/discovery/constants.js +0 -0
  197. /package/dist/{src → esm/src}/discovery/device-identifier.js +0 -0
  198. /package/dist/{src → esm/src}/discovery/parameter-generator-utils.js +0 -0
  199. /package/dist/{src → esm/src}/discovery/parameter-generator.js +0 -0
  200. /package/dist/{src → esm/src}/discovery/scanner.js +0 -0
  201. /package/dist/{src → esm/src}/formatters/discovery-results.js +0 -0
  202. /package/dist/{src → esm/src}/formatters/json.js +0 -0
  203. /package/dist/{src → esm/src}/formatters/performance.js +0 -0
  204. /package/dist/{src → esm/src}/formatters/table.js +0 -0
  205. /package/dist/{src → esm/src}/index.js +0 -0
  206. /package/dist/{src → esm/src}/utils/commands.js +0 -0
  207. /package/dist/{src → esm/src}/utils/object-utils.js +0 -0
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scanForDevices = scanForDevices;
4
+ const tslib_1 = require("tslib");
5
+ const modbus_serial_1 = tslib_1.__importDefault(require("modbus-serial"));
6
+ const device_identifier_js_1 = require("./device-identifier.js");
7
+ const parameter_generator_utils_js_1 = require("./parameter-generator-utils.js");
8
+ const parameter_generator_js_1 = require("./parameter-generator.js");
9
+ /**
10
+ * Apply inter-test delay to prevent bus contention
11
+ *
12
+ * When a device is found, waits full delayMs for bus recovery.
13
+ * When no device found or error, waits remainder (delayMs - timeout) since
14
+ * timeout already consumed time waiting for response.
15
+ *
16
+ * @param delayMs - Configured delay between tests
17
+ * @param timeout - Request timeout in milliseconds
18
+ * @param deviceFound - Whether a device was found (true) or not found/error (false)
19
+ * @param shouldContinue - Whether scanning will continue after this delay
20
+ */
21
+ async function applyInterTestDelay(delayMs, timeout, deviceFound, shouldContinue) {
22
+ // Skip delay if not continuing (reached maxDevices)
23
+ if (!shouldContinue) {
24
+ return;
25
+ }
26
+ if (deviceFound) {
27
+ // Device found - wait full delay for bus recovery
28
+ if (delayMs > 0) {
29
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
30
+ }
31
+ }
32
+ else {
33
+ // No device or error - timeout already consumed time, wait remainder
34
+ if (delayMs > timeout) {
35
+ await new Promise((resolve) => setTimeout(resolve, delayMs - timeout));
36
+ }
37
+ }
38
+ }
39
+ /**
40
+ * Scan for Modbus devices using given parameter combinations
41
+ *
42
+ * **Performance Optimization**: Uses grouped generator to avoid materializing
43
+ * all combinations. Groups by serial parameters to reuse connections,
44
+ * reducing overhead from ~600ms to ~100ms per test.
45
+ *
46
+ * **Memory Efficiency**: Only materializes one group (~247 combinations) at a time
47
+ * instead of all ~1500+ combinations.
48
+ *
49
+ * @param generatorOptions - Options for parameter combination generation
50
+ * @param scanOptions - Scanning options
51
+ * @returns Array of discovered devices
52
+ */
53
+ async function scanForDevices(generatorOptions, scanOptions) {
54
+ const { port, timeout, delayMs, maxDevices = 1, verbose = false, onProgress, onDeviceFound, onTestAttempt, } = scanOptions;
55
+ // Calculate total combinations efficiently (no materialization)
56
+ const total = (0, parameter_generator_utils_js_1.countParameterCombinations)(generatorOptions);
57
+ const discovered = [];
58
+ let currentIndex = 0;
59
+ // Test each serial parameter group
60
+ // Generator yields groups without materializing all combinations
61
+ for (const group of (0, parameter_generator_js_1.generateParameterGroups)(generatorOptions)) {
62
+ const { serialParams, combinations: groupCombinations } = group;
63
+ // Stop if we've found enough devices
64
+ if (maxDevices > 0 && discovered.length >= maxDevices) {
65
+ break;
66
+ }
67
+ // Get serial params from group
68
+ const { baudRate, parity, dataBits, stopBits } = serialParams;
69
+ try {
70
+ // Create and connect once for this serial parameter set
71
+ const client = new modbus_serial_1.default();
72
+ await client.connectRTUBuffered(port, {
73
+ baudRate,
74
+ parity,
75
+ dataBits,
76
+ stopBits,
77
+ });
78
+ // Set timeout once for this connection
79
+ client.setTimeout(timeout);
80
+ try {
81
+ // Test all slave IDs with this serial configuration
82
+ for (const combination of groupCombinations) {
83
+ // Stop if we've found enough devices
84
+ if (maxDevices > 0 && discovered.length >= maxDevices) {
85
+ break;
86
+ }
87
+ const { slaveId } = combination;
88
+ try {
89
+ // Notify verbose progress
90
+ onTestAttempt?.(combination, 'testing');
91
+ // Set slave ID (reusing same connection)
92
+ client.setID(slaveId);
93
+ // Try to identify device
94
+ const identification = await (0, device_identifier_js_1.identifyDevice)(client);
95
+ // If device found, add to results
96
+ if (identification.present) {
97
+ const device = {
98
+ ...combination,
99
+ identification,
100
+ };
101
+ discovered.push(device);
102
+ onTestAttempt?.(combination, 'found');
103
+ onDeviceFound?.(device);
104
+ // Apply delay for bus recovery before next test
105
+ const reachedLimit = maxDevices > 0 && discovered.length >= maxDevices;
106
+ await applyInterTestDelay(delayMs, timeout, true, !reachedLimit);
107
+ }
108
+ else {
109
+ onTestAttempt?.(combination, 'not-found');
110
+ // Apply delay before next test (timeout already consumed time)
111
+ await applyInterTestDelay(delayMs, timeout, false, true);
112
+ }
113
+ }
114
+ catch {
115
+ // Device identification error - skip this slave ID
116
+ onTestAttempt?.(combination, 'not-found');
117
+ // Apply delay before next test (error/timeout already consumed time)
118
+ await applyInterTestDelay(delayMs, timeout, false, true);
119
+ }
120
+ // Update progress
121
+ currentIndex++;
122
+ onProgress?.(currentIndex, total, discovered.length);
123
+ }
124
+ }
125
+ finally {
126
+ // Close connection after testing all slave IDs
127
+ // Client is always defined here since we only reach this point after successful connection
128
+ const clientToClose = client;
129
+ await new Promise((resolve) => clientToClose.close(resolve));
130
+ }
131
+ }
132
+ catch (error) {
133
+ // Connection error for this serial parameter set - skip entire group
134
+ // This can happen if port is busy, doesn't exist, or serial params are invalid
135
+ // Log connection error in verbose mode to help debug hardware issues
136
+ if (verbose) {
137
+ const errorMessage = error instanceof Error ? error.message : String(error);
138
+ console.warn(`Connection failed on ${port} for ${baudRate}/${parity}/${dataBits}/${stopBits}: ${errorMessage}`);
139
+ }
140
+ // Still update progress for skipped combinations
141
+ currentIndex += groupCombinations.length;
142
+ onProgress?.(currentIndex, total, discovered.length);
143
+ }
144
+ }
145
+ return discovered;
146
+ }
147
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../../src/discovery/scanner.ts"],"names":[],"mappings":";;AAiGA,wCAyHC;;AA1ND,0EAAqC;AAErC,iEAAwF;AACxF,iFAA2E;AAC3E,qEAIiC;AAuCjC;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,mBAAmB,CAChC,OAAe,EACf,OAAe,EACf,WAAoB,EACpB,cAAuB;IAEvB,oDAAoD;IACpD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAM;IACR,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,kDAAkD;QAClD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,qEAAqE;QACrE,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,cAAc,CAClC,gBAAkC,EAClC,WAAwB;IAExB,MAAM,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,UAAU,GAAG,CAAC,EACd,OAAO,GAAG,KAAK,EACf,UAAU,EACV,aAAa,EACb,aAAa,GACd,GAAG,WAAW,CAAA;IAEf,gEAAgE;IAChE,MAAM,KAAK,GAAG,IAAA,yDAA0B,EAAC,gBAAgB,CAAC,CAAA;IAE1D,MAAM,UAAU,GAAuB,EAAE,CAAA;IACzC,IAAI,YAAY,GAAG,CAAC,CAAA;IAEpB,mCAAmC;IACnC,iEAAiE;IACjE,KAAK,MAAM,KAAK,IAAI,IAAA,gDAAuB,EAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9D,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAA;QAC/D,qCAAqC;QACrC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACtD,MAAK;QACP,CAAC;QAED,+BAA+B;QAC/B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAA;QAE7D,IAAI,CAAC;YACH,wDAAwD;YACxD,MAAM,MAAM,GAAG,IAAI,uBAAS,EAAE,CAAA;YAC9B,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE;gBACpC,QAAQ;gBACR,MAAM;gBACN,QAAQ;gBACR,QAAQ;aACT,CAAC,CAAA;YAEF,uCAAuC;YACvC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YAE1B,IAAI,CAAC;gBACH,oDAAoD;gBACpD,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE,CAAC;oBAC5C,qCAAqC;oBACrC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;wBACtD,MAAK;oBACP,CAAC;oBAED,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAA;oBAE/B,IAAI,CAAC;wBACH,0BAA0B;wBAC1B,aAAa,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;wBAEvC,yCAAyC;wBACzC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;wBAErB,yBAAyB;wBACzB,MAAM,cAAc,GAAG,MAAM,IAAA,qCAAc,EAAC,MAAM,CAAC,CAAA;wBAEnD,kCAAkC;wBAClC,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;4BAC3B,MAAM,MAAM,GAAqB;gCAC/B,GAAG,WAAW;gCACd,cAAc;6BACf,CAAA;4BAED,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;4BACvB,aAAa,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;4BACrC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAA;4BAEvB,gDAAgD;4BAChD,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAA;4BACtE,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,CAAA;wBAClE,CAAC;6BAAM,CAAC;4BACN,aAAa,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;4BACzC,+DAA+D;4BAC/D,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;wBAC1D,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,mDAAmD;wBACnD,aAAa,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;wBACzC,qEAAqE;wBACrE,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;oBAC1D,CAAC;oBAED,kBAAkB;oBAClB,YAAY,EAAE,CAAA;oBACd,UAAU,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;gBACtD,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,+CAA+C;gBAC/C,2FAA2F;gBAC3F,MAAM,aAAa,GAAG,MAAM,CAAA;gBAC5B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;YACpE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qEAAqE;YACrE,+EAA+E;YAE/E,qEAAqE;YACrE,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC3E,OAAO,CAAC,IAAI,CACV,wBAAwB,IAAI,QAAQ,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAClG,CAAA;YACH,CAAC;YAED,iDAAiD;YACjD,YAAY,IAAI,iBAAiB,CAAC,MAAM,CAAA;YACxC,UAAU,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-results.d.ts","sourceRoot":"","sources":["../../../../src/formatters/discovery-results.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE/D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAqCxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAkBvE"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatDiscoveryTable = formatDiscoveryTable;
4
+ exports.formatDiscoveryJSON = formatDiscoveryJSON;
5
+ const tslib_1 = require("tslib");
6
+ const cli_table3_1 = tslib_1.__importDefault(require("cli-table3"));
7
+ /**
8
+ * Format discovered devices as a table
9
+ */
10
+ function formatDiscoveryTable(devices) {
11
+ if (devices.length === 0) {
12
+ return 'No devices found.';
13
+ }
14
+ const table = new cli_table3_1.default({
15
+ head: ['Slave ID', 'Baud Rate', 'Parity', 'Data/Stop', 'Response', 'Vendor', 'Model'],
16
+ style: {
17
+ head: ['cyan'],
18
+ },
19
+ });
20
+ // Sort by slave ID
21
+ const sorted = [...devices].sort((a, b) => a.slaveId - b.slaveId);
22
+ for (const device of sorted) {
23
+ const { slaveId, baudRate, parity, dataBits, stopBits, identification } = device;
24
+ const parityChar = parity === 'none' ? 'N' : parity === 'even' ? 'E' : 'O';
25
+ const dataStop = `${dataBits}${parityChar}${stopBits}`;
26
+ const vendor = identification.vendorName ?? '-';
27
+ const model = identification.modelName ?? identification.productCode ?? '-';
28
+ const responseTime = `${Math.round(identification.responseTimeMs)}ms`;
29
+ table.push([
30
+ slaveId.toString(),
31
+ baudRate.toString(),
32
+ parityChar,
33
+ dataStop,
34
+ responseTime,
35
+ vendor,
36
+ model,
37
+ ]);
38
+ }
39
+ return table.toString();
40
+ }
41
+ /**
42
+ * Format discovered devices as JSON
43
+ */
44
+ function formatDiscoveryJSON(devices) {
45
+ const formatted = devices.map((device) => ({
46
+ slaveId: device.slaveId,
47
+ baudRate: device.baudRate,
48
+ parity: device.parity,
49
+ dataBits: device.dataBits,
50
+ stopBits: device.stopBits,
51
+ responseTimeMs: device.identification.responseTimeMs,
52
+ identification: {
53
+ vendorName: device.identification.vendorName,
54
+ productCode: device.identification.productCode,
55
+ modelName: device.identification.modelName,
56
+ revision: device.identification.revision,
57
+ supportsFC43: device.identification.supportsFC43,
58
+ },
59
+ }));
60
+ return JSON.stringify(formatted, null, 2);
61
+ }
62
+ //# sourceMappingURL=discovery-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-results.js","sourceRoot":"","sources":["../../../../src/formatters/discovery-results.ts"],"names":[],"mappings":";;AAOA,oDAqCC;AAKD,kDAkBC;;AAnED,oEAA8B;AAI9B;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAA2B;IAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;QACrF,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,MAAM,CAAC;SACf;KACF,CAAC,CAAA;IAEF,mBAAmB;IACnB,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;IAEjE,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAA;QAEhF,MAAM,UAAU,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QAC1E,MAAM,QAAQ,GAAG,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,EAAE,CAAA;QAEtD,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,IAAI,GAAG,CAAA;QAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,IAAI,cAAc,CAAC,WAAW,IAAI,GAAG,CAAA;QAC3E,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAA;QAErE,KAAK,CAAC,IAAI,CAAC;YACT,OAAO,CAAC,QAAQ,EAAE;YAClB,QAAQ,CAAC,QAAQ,EAAE;YACnB,UAAU;YACV,QAAQ;YACR,YAAY;YACZ,MAAM;YACN,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,OAA2B;IAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,cAAc;QACpD,cAAc,EAAE;YACd,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU;YAC5C,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW;YAC9C,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,SAAS;YAC1C,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ;YACxC,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC,YAAY;SACjD;KACF,CAAC,CAAC,CAAA;IAEH,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAC3C,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../src/formatters/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,yBAAyB;IACzB,UAAU,CAAC,EACP;QACE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,GACD,SAAS,CAAA;IACb,0BAA0B;IAC1B,WAAW,CAAC,EACR;QACE,cAAc,EAAE,MAAM,CAAA;QACtB,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;KACf,GACD,SAAS,CAAA;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,YAAY,GACrB,MAAM,CAyBR"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatJSON = formatJSON;
4
+ /**
5
+ * Format data point results as JSON
6
+ *
7
+ * @param dataPoints - Data point definitions
8
+ * @param values - Data point values (keyed by ID)
9
+ * @param metadata - Additional metadata to include
10
+ * @returns Formatted JSON string with 2-space indentation
11
+ */
12
+ function formatJSON(dataPoints, values, metadata) {
13
+ // Build data points array with values
14
+ const dataPointsWithValues = dataPoints
15
+ .filter((dp) => dp.id in values)
16
+ .map((dp) => ({
17
+ id: dp.id,
18
+ name: dp.name,
19
+ value: values[dp.id],
20
+ type: dp.type,
21
+ unit: dp.unit,
22
+ access: dp.access,
23
+ pollType: dp.pollType,
24
+ }));
25
+ // Build output object
26
+ const output = {
27
+ timestamp: new Date().toISOString(),
28
+ ...(metadata.driver && { driver: metadata.driver }),
29
+ ...(metadata.connection && { connection: metadata.connection }),
30
+ dataPoints: dataPointsWithValues,
31
+ ...(metadata.performance && { performance: metadata.performance }),
32
+ };
33
+ // Return pretty-printed JSON with 2-space indentation
34
+ return JSON.stringify(output, null, 2);
35
+ }
36
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../../src/formatters/json.ts"],"names":[],"mappings":";;AAkCA,gCA6BC;AArCD;;;;;;;GAOG;AACH,SAAgB,UAAU,CACxB,UAAoC,EACpC,MAA+B,EAC/B,QAAsB;IAEtB,sCAAsC;IACtC,MAAM,oBAAoB,GAAG,UAAU;SACpC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,MAAM,CAAC;SAC/B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACZ,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACpB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ;KACtB,CAAC,CAAC,CAAA;IAEL,sBAAsB;IACtB,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnD,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC/D,UAAU,EAAE,oBAAoB;QAChC,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;KACnE,CAAA;IAED,sDAAsD;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../../../src/formatters/performance.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,cAAc,EAAE,MAAM,CAAA;IACtB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAiBrE"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatPerformance = formatPerformance;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
+ /**
7
+ * Format performance metrics for display
8
+ *
9
+ * @param metrics - Performance metrics
10
+ * @returns Formatted string with performance info
11
+ */
12
+ function formatPerformance(metrics) {
13
+ const { responseTimeMs, operations, errors } = metrics;
14
+ const lines = [
15
+ chalk_1.default.bold('\nPerformance:'),
16
+ ` Response time: ${responseTimeMs.toFixed(1)}ms`,
17
+ ` Operations: ${operations}`,
18
+ ];
19
+ // Highlight errors if present
20
+ if (errors > 0) {
21
+ lines.push(chalk_1.default.red(` Errors: ${errors}`));
22
+ }
23
+ else {
24
+ lines.push(chalk_1.default.green(` Errors: ${errors}`));
25
+ }
26
+ return lines.join('\n');
27
+ }
28
+ //# sourceMappingURL=performance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../../src/formatters/performance.ts"],"names":[],"mappings":";;AAoBA,8CAiBC;;AArCD,0DAAyB;AAczB;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAEtD,MAAM,KAAK,GAAG;QACZ,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC5B,oBAAoB,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACjD,iBAAiB,UAAU,EAAE;KAC9B,CAAA;IAED,8BAA8B;IAC9B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAA;IAC9C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../src/formatters/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AA0ExD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAuBR"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatTable = formatTable;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
+ const cli_table3_1 = tslib_1.__importDefault(require("cli-table3"));
7
+ /**
8
+ * Convert unknown value to string representation
9
+ *
10
+ * @param value - Value to stringify
11
+ * @returns String representation
12
+ */
13
+ function stringifyValue(value) {
14
+ if (typeof value === 'string') {
15
+ return value;
16
+ }
17
+ if (typeof value === 'number' || typeof value === 'boolean') {
18
+ return String(value);
19
+ }
20
+ if (value instanceof Date) {
21
+ return value.toISOString();
22
+ }
23
+ // For objects/arrays, use JSON to avoid '[object Object]'
24
+ return JSON.stringify(value);
25
+ }
26
+ /**
27
+ * Format a value based on data point metadata
28
+ *
29
+ * @param value - Raw value
30
+ * @param dataPoint - Data point definition
31
+ * @returns Formatted string
32
+ */
33
+ function formatValue(value, dataPoint) {
34
+ // Handle null/undefined
35
+ if (value === null || value === undefined) {
36
+ return chalk_1.default.gray('N/A');
37
+ }
38
+ // Format based on type
39
+ switch (dataPoint.type) {
40
+ case 'float': {
41
+ const num = value;
42
+ const decimals = dataPoint.decimals ?? 2;
43
+ return num.toFixed(decimals);
44
+ }
45
+ case 'integer':
46
+ return stringifyValue(value);
47
+ case 'boolean':
48
+ return value ? chalk_1.default.green('true') : chalk_1.default.red('false');
49
+ case 'enum': {
50
+ if (dataPoint.enumValues) {
51
+ const enumKey = stringifyValue(value);
52
+ return dataPoint.enumValues[enumKey] ?? stringifyValue(value);
53
+ }
54
+ return stringifyValue(value);
55
+ }
56
+ case 'timestamp': {
57
+ if (value instanceof Date) {
58
+ return value.toISOString();
59
+ }
60
+ return stringifyValue(value);
61
+ }
62
+ case 'string':
63
+ return stringifyValue(value);
64
+ default:
65
+ return stringifyValue(value);
66
+ }
67
+ }
68
+ /**
69
+ * Format data point results as a table
70
+ *
71
+ * @param dataPoints - Data point definitions
72
+ * @param values - Data point values (keyed by ID)
73
+ * @returns Formatted table string
74
+ */
75
+ function formatTable(dataPoints, values) {
76
+ // Create table with headers
77
+ const table = new cli_table3_1.default({
78
+ head: [chalk_1.default.bold('Data Point'), chalk_1.default.bold('Value'), chalk_1.default.bold('Unit')],
79
+ style: {
80
+ head: ['cyan'],
81
+ },
82
+ });
83
+ // Add rows for each data point that has a value
84
+ for (const dp of dataPoints) {
85
+ if (!(dp.id in values)) {
86
+ continue;
87
+ }
88
+ const displayName = dp.name ?? dp.id;
89
+ const formattedValue = formatValue(values[dp.id], dp);
90
+ const unit = dp.unit ?? '';
91
+ table.push([displayName, formattedValue, unit]);
92
+ }
93
+ return table.toString();
94
+ }
95
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../src/formatters/table.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,OAAO,EAAE,MAAM,WAAW,CAAA;AAmEnC,QAAA,MAAM,OAAO,SAAgB,CAAA;AAqI7B,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.program = void 0;
5
+ const commander_1 = require("commander");
6
+ const discover_js_1 = require("./commands/discover.js");
7
+ const list_devices_js_1 = require("./commands/list-devices.js");
8
+ const read_js_1 = require("./commands/read.js");
9
+ const show_defaults_js_1 = require("./commands/show-defaults.js");
10
+ const write_js_1 = require("./commands/write.js");
11
+ /**
12
+ * Add common connection and driver options to a command
13
+ *
14
+ * @param command - Commander.js command instance
15
+ * @returns The command with connection options added
16
+ */
17
+ function addConnectionOptions(command) {
18
+ return (command
19
+ // Driver Options
20
+ .optionsGroup('Driver Options:')
21
+ .option('-d, --driver <package>', 'Driver package name (e.g., ya-modbus-driver-xymd1). Use "show-defaults" to see driver config')
22
+ .option('--device <key>', 'Device key for multi-device drivers. Use "list-devices" to see available devices')
23
+ // Connection Options
24
+ .optionsGroup('Connection Options:')
25
+ .requiredOption('-s, --slave-id <id>', 'Modbus slave ID (1-247). May use driver default if available', parseInt)
26
+ .option('--timeout <ms>', 'Response timeout in milliseconds (default: 1000)', parseInt)
27
+ // RTU Connection
28
+ .optionsGroup('RTU Connection (choose this OR TCP):')
29
+ .option('-p, --port <path>', 'Serial port for RTU (e.g., /dev/ttyUSB0, COM3)')
30
+ .option('-b, --baud-rate <rate>', 'Baud rate (RTU only). Uses driver default if not specified', parseInt)
31
+ .option('--parity <type>', 'Parity: none, even, odd (RTU only). Uses driver default if not specified')
32
+ .option('--data-bits <bits>', 'Data bits: 7 or 8 (RTU only). Uses driver default if not specified', parseInt)
33
+ .option('--stop-bits <bits>', 'Stop bits: 1 or 2 (RTU only). Uses driver default if not specified', parseInt)
34
+ // TCP Connection
35
+ .optionsGroup('TCP Connection (choose this OR RTU):')
36
+ .option('-h, --host <host>', 'TCP host for Modbus TCP (e.g., 192.168.1.100)')
37
+ .option('--tcp-port <port>', 'TCP port (default: 502)', parseInt));
38
+ }
39
+ const program = new commander_1.Command();
40
+ exports.program = program;
41
+ program
42
+ .name('ya-modbus')
43
+ .description('CLI tool for testing and developing Modbus device drivers')
44
+ .version('0.0.0')
45
+ .addHelpText('after', `
46
+ Examples:
47
+ $ ya-modbus read --port /dev/ttyUSB0 --slave-id 1 --driver ya-modbus-driver-xymd1 --all
48
+ $ ya-modbus write --host 192.168.1.100 --slave-id 1 --data-point voltage --value 220
49
+ $ ya-modbus discover --port /dev/ttyUSB0 --strategy quick
50
+ $ ya-modbus show-defaults --driver ya-modbus-driver-xymd1
51
+ `);
52
+ // Device Operations
53
+ program.commandsGroup('Device Operations:');
54
+ // Read command
55
+ addConnectionOptions(program.command('read').description('Read data points from device'))
56
+ .optionsGroup('Data Selection:')
57
+ .option('--data-point <id...>', 'Data point ID(s) to read')
58
+ .option('--all', 'Read all readable data points')
59
+ .optionsGroup('Output Options:')
60
+ .option('-f, --format <type>', 'Output format: table or json (default: table)', 'table')
61
+ .action(async (options) => {
62
+ try {
63
+ // tcpPort is parsed by Commander but not used by readCommand (transport layer handles it).
64
+ // Destructure it out to avoid passing undefined (exactOptionalPropertyTypes requirement).
65
+ const { tcpPort: _tcpPort, ...commandOptions } = options;
66
+ await (0, read_js_1.readCommand)(commandOptions);
67
+ }
68
+ catch (error) {
69
+ console.error(`Error: ${error.message}`);
70
+ process.exit(1);
71
+ }
72
+ });
73
+ // Write command
74
+ addConnectionOptions(program.command('write').description('Write data point to device'))
75
+ .optionsGroup('Data Options:')
76
+ .requiredOption('--data-point <id>', 'Data point ID to write')
77
+ .requiredOption('--value <value>', 'Value to write')
78
+ .optionsGroup('Write Options:')
79
+ .option('-y, --yes', 'Skip confirmation prompt')
80
+ .option('--verify', 'Read back and verify written value')
81
+ .action(async (options) => {
82
+ try {
83
+ // tcpPort is parsed by Commander but not used by writeCommand (transport layer handles it).
84
+ // Destructure it out to avoid passing undefined (exactOptionalPropertyTypes requirement).
85
+ const { tcpPort: _tcpPort, ...commandOptions } = options;
86
+ await (0, write_js_1.writeCommand)(commandOptions);
87
+ }
88
+ catch (error) {
89
+ console.error(`Error: ${error.message}`);
90
+ process.exit(1);
91
+ }
92
+ });
93
+ // Device Discovery
94
+ program.commandsGroup('Device Discovery:');
95
+ // Discover command
96
+ program
97
+ .command('discover')
98
+ .description('Discover Modbus devices on serial port by scanning slave IDs and parameters')
99
+ .optionsGroup('Connection:')
100
+ .requiredOption('-p, --port <path>', 'Serial port for RTU (e.g., /dev/ttyUSB0, COM3)')
101
+ .optionsGroup('Driver Options:')
102
+ .option('-d, --driver <package>', 'Driver package (auto-detects from cwd if not specified)')
103
+ .optionsGroup('Discovery Options:')
104
+ .option('--strategy <type>', 'Discovery strategy: quick (driver params) or thorough (all params)', 'quick')
105
+ .option('--timeout <ms>', 'Response timeout in milliseconds (default: 1000)', parseInt)
106
+ .option('--delay <ms>', 'Delay between attempts in milliseconds (default: 100)', parseInt)
107
+ .option('--max-devices <count>', 'Maximum number of devices to find (default: 1, use 0 for unlimited)', parseInt)
108
+ .optionsGroup('Output Options:')
109
+ .option('--verbose', 'Show detailed progress with current parameters being tested')
110
+ .option('--silent', 'Suppress all output except final result (useful for scripts)')
111
+ .option('-f, --format <type>', 'Output format: table or json (default: table)', 'table')
112
+ .action(async (options) => {
113
+ try {
114
+ await (0, discover_js_1.discoverCommand)(options);
115
+ }
116
+ catch (error) {
117
+ console.error(`Error: ${error.message}`);
118
+ process.exit(1);
119
+ }
120
+ });
121
+ // Driver Utilities
122
+ program.commandsGroup('Driver Utilities:');
123
+ // List devices command
124
+ program
125
+ .command('list-devices')
126
+ .description('List supported devices from driver DEVICES registry')
127
+ .optionsGroup('Driver Options:')
128
+ .option('-d, --driver <package>', 'Driver package (auto-detects from cwd if not specified)')
129
+ .optionsGroup('Output Options:')
130
+ .option('-f, --format <type>', 'Output format: table or json (default: table)', 'table')
131
+ .action(async (options) => {
132
+ try {
133
+ await (0, list_devices_js_1.listDevicesCommand)(options);
134
+ }
135
+ catch (error) {
136
+ console.error(`Error: ${error.message}`);
137
+ process.exit(1);
138
+ }
139
+ });
140
+ // Show defaults command
141
+ program
142
+ .command('show-defaults')
143
+ .description('Show driver DEFAULT_CONFIG and SUPPORTED_CONFIG')
144
+ .optionsGroup('Driver Options:')
145
+ .option('-d, --driver <package>', 'Driver package (auto-detects from cwd if not specified)')
146
+ .optionsGroup('Output Options:')
147
+ .option('-f, --format <type>', 'Output format: table or json (default: table)', 'table')
148
+ .action(async (options) => {
149
+ try {
150
+ await (0, show_defaults_js_1.showDefaultsCommand)(options);
151
+ }
152
+ catch (error) {
153
+ console.error(`Error: ${error.message}`);
154
+ process.exit(1);
155
+ }
156
+ });
157
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/utils/commands.ts"],"names":[],"mappings":"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"}