@ya-modbus/cli 0.4.1-refactor-scope-driver-packages.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 (85) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +674 -0
  3. package/README.md +612 -0
  4. package/dist/bin/ya-modbus.d.ts +9 -0
  5. package/dist/bin/ya-modbus.d.ts.map +1 -0
  6. package/dist/bin/ya-modbus.js +10 -0
  7. package/dist/bin/ya-modbus.js.map +1 -0
  8. package/dist/src/commands/discover.d.ts +25 -0
  9. package/dist/src/commands/discover.d.ts.map +1 -0
  10. package/dist/src/commands/discover.js +160 -0
  11. package/dist/src/commands/discover.js.map +1 -0
  12. package/dist/src/commands/list-devices.d.ts +21 -0
  13. package/dist/src/commands/list-devices.d.ts.map +1 -0
  14. package/dist/src/commands/list-devices.js +75 -0
  15. package/dist/src/commands/list-devices.js.map +1 -0
  16. package/dist/src/commands/read.d.ts +25 -0
  17. package/dist/src/commands/read.d.ts.map +1 -0
  18. package/dist/src/commands/read.js +76 -0
  19. package/dist/src/commands/read.js.map +1 -0
  20. package/dist/src/commands/show-defaults.d.ts +21 -0
  21. package/dist/src/commands/show-defaults.d.ts.map +1 -0
  22. package/dist/src/commands/show-defaults.js +48 -0
  23. package/dist/src/commands/show-defaults.js.map +1 -0
  24. package/dist/src/commands/write.d.ts +26 -0
  25. package/dist/src/commands/write.d.ts.map +1 -0
  26. package/dist/src/commands/write.js +61 -0
  27. package/dist/src/commands/write.js.map +1 -0
  28. package/dist/src/discovery/constants.d.ts +37 -0
  29. package/dist/src/discovery/constants.d.ts.map +1 -0
  30. package/dist/src/discovery/constants.js +45 -0
  31. package/dist/src/discovery/constants.js.map +1 -0
  32. package/dist/src/discovery/device-identifier.d.ts +52 -0
  33. package/dist/src/discovery/device-identifier.d.ts.map +1 -0
  34. package/dist/src/discovery/device-identifier.js +193 -0
  35. package/dist/src/discovery/device-identifier.js.map +1 -0
  36. package/dist/src/discovery/parameter-generator-utils.d.ts +29 -0
  37. package/dist/src/discovery/parameter-generator-utils.d.ts.map +1 -0
  38. package/dist/src/discovery/parameter-generator-utils.js +59 -0
  39. package/dist/src/discovery/parameter-generator-utils.js.map +1 -0
  40. package/dist/src/discovery/parameter-generator.d.ts +97 -0
  41. package/dist/src/discovery/parameter-generator.d.ts.map +1 -0
  42. package/dist/src/discovery/parameter-generator.js +184 -0
  43. package/dist/src/discovery/parameter-generator.js.map +1 -0
  44. package/dist/src/discovery/progress.d.ts +24 -0
  45. package/dist/src/discovery/progress.d.ts.map +1 -0
  46. package/dist/src/discovery/progress.js +57 -0
  47. package/dist/src/discovery/progress.js.map +1 -0
  48. package/dist/src/discovery/scanner.d.ts +46 -0
  49. package/dist/src/discovery/scanner.d.ts.map +1 -0
  50. package/dist/src/discovery/scanner.js +143 -0
  51. package/dist/src/discovery/scanner.js.map +1 -0
  52. package/dist/src/formatters/discovery-results.d.ts +10 -0
  53. package/dist/src/formatters/discovery-results.d.ts.map +1 -0
  54. package/dist/src/formatters/discovery-results.js +57 -0
  55. package/dist/src/formatters/discovery-results.js.map +1 -0
  56. package/dist/src/formatters/json.d.ts +30 -0
  57. package/dist/src/formatters/json.d.ts.map +1 -0
  58. package/dist/src/formatters/json.js +33 -0
  59. package/dist/src/formatters/json.js.map +1 -0
  60. package/dist/src/formatters/performance.d.ts +19 -0
  61. package/dist/src/formatters/performance.d.ts.map +1 -0
  62. package/dist/src/formatters/performance.js +24 -0
  63. package/dist/src/formatters/performance.js.map +1 -0
  64. package/dist/src/formatters/table.d.ts +10 -0
  65. package/dist/src/formatters/table.d.ts.map +1 -0
  66. package/dist/src/formatters/table.js +91 -0
  67. package/dist/src/formatters/table.js.map +1 -0
  68. package/dist/src/index.d.ts +5 -0
  69. package/dist/src/index.d.ts.map +1 -0
  70. package/dist/src/index.js +154 -0
  71. package/dist/src/index.js.map +1 -0
  72. package/dist/src/utils/commands.d.ts +191 -0
  73. package/dist/src/utils/commands.d.ts.map +1 -0
  74. package/dist/src/utils/commands.js +400 -0
  75. package/dist/src/utils/commands.js.map +1 -0
  76. package/dist/src/utils/object-utils.d.ts +20 -0
  77. package/dist/src/utils/object-utils.d.ts.map +1 -0
  78. package/dist/src/utils/object-utils.js +28 -0
  79. package/dist/src/utils/object-utils.js.map +1 -0
  80. package/dist/src/utils/validation.d.ts +70 -0
  81. package/dist/src/utils/validation.d.ts.map +1 -0
  82. package/dist/src/utils/validation.js +158 -0
  83. package/dist/src/utils/validation.js.map +1 -0
  84. package/dist/tsconfig.tsbuildinfo +1 -0
  85. package/package.json +63 -0
@@ -0,0 +1,400 @@
1
+ import readline from 'readline/promises';
2
+ import { loadDriver } from '@ya-modbus/driver-loader';
3
+ import { createTransport } from '@ya-modbus/transport';
4
+ import { omitUndefined } from './object-utils.js';
5
+ import { validateSerialOptions } from './validation.js';
6
+ /**
7
+ * Default RTU transport configuration values
8
+ */
9
+ export const DEFAULT_RTU_CONFIG = {
10
+ port: '/dev/ttyUSB0',
11
+ baudRate: 9600,
12
+ dataBits: 8,
13
+ parity: 'even',
14
+ stopBits: 1,
15
+ };
16
+ /**
17
+ * Default TCP port for Modbus TCP
18
+ */
19
+ export const DEFAULT_TCP_PORT = 502;
20
+ /**
21
+ * Check if a data point is readable
22
+ */
23
+ export function isReadable(dataPoint) {
24
+ const access = dataPoint.access ?? 'r';
25
+ return access === 'r' || access === 'rw';
26
+ }
27
+ /**
28
+ * Check if a data point is writable
29
+ */
30
+ export function isWritable(dataPoint) {
31
+ const access = dataPoint.access ?? 'r';
32
+ return access === 'w' || access === 'rw';
33
+ }
34
+ /**
35
+ * Find a data point by ID
36
+ *
37
+ * @param driver - Device driver instance
38
+ * @param id - Data point ID
39
+ * @returns Data point definition
40
+ * @throws Error if data point not found
41
+ */
42
+ export function findDataPoint(driver, id) {
43
+ const dataPoint = driver.dataPoints.find((dp) => dp.id === id);
44
+ if (!dataPoint) {
45
+ throw new Error(`Data point not found: ${id}`);
46
+ }
47
+ return dataPoint;
48
+ }
49
+ /**
50
+ * Find and validate a readable data point
51
+ *
52
+ * @param driver - Device driver instance
53
+ * @param id - Data point ID
54
+ * @returns Data point definition
55
+ * @throws Error if data point not found or not readable
56
+ */
57
+ export function findReadableDataPoint(driver, id) {
58
+ const dataPoint = findDataPoint(driver, id);
59
+ if (!isReadable(dataPoint)) {
60
+ throw new Error(`Data point is write-only: ${id}`);
61
+ }
62
+ return dataPoint;
63
+ }
64
+ /**
65
+ * Find and validate a writable data point
66
+ *
67
+ * @param driver - Device driver instance
68
+ * @param id - Data point ID
69
+ * @returns Data point definition
70
+ * @throws Error if data point not found or not writable
71
+ */
72
+ export function findWritableDataPoint(driver, id) {
73
+ const dataPoint = findDataPoint(driver, id);
74
+ if (!isWritable(dataPoint)) {
75
+ throw new Error(`Data point is read-only: ${id}`);
76
+ }
77
+ return dataPoint;
78
+ }
79
+ /**
80
+ * Compare two floating point numbers for approximate equality
81
+ *
82
+ * Uses relative error to handle both very small and very large values correctly.
83
+ * Also checks absolute error to handle values near zero.
84
+ *
85
+ * @param a - First value
86
+ * @param b - Second value
87
+ * @param relativeEpsilon - Relative error tolerance (default: 1e-6, or 0.0001%)
88
+ * @param absoluteEpsilon - Absolute error tolerance for values near zero (default: 1e-9)
89
+ * @returns True if values are approximately equal
90
+ */
91
+ export function floatsEqual(a, b, relativeEpsilon = 1e-6, absoluteEpsilon = 1e-9) {
92
+ const absoluteError = Math.abs(a - b);
93
+ // Check absolute error first (handles values near zero)
94
+ if (absoluteError < absoluteEpsilon) {
95
+ return true;
96
+ }
97
+ // Check relative error (handles large and small values)
98
+ const largestMagnitude = Math.max(Math.abs(a), Math.abs(b));
99
+ const relativeError = absoluteError / largestMagnitude;
100
+ return relativeError < relativeEpsilon;
101
+ }
102
+ /**
103
+ * Parse value string based on data point type
104
+ */
105
+ export function parseValue(valueStr, dataPoint) {
106
+ switch (dataPoint.type) {
107
+ case 'float':
108
+ return parseFloat(valueStr);
109
+ case 'integer':
110
+ return parseInt(valueStr, 10);
111
+ case 'boolean':
112
+ return valueStr.toLowerCase() === 'true' || valueStr === '1';
113
+ case 'string':
114
+ return valueStr;
115
+ case 'enum': {
116
+ // Try to parse as number first, otherwise use string
117
+ const num = parseInt(valueStr, 10);
118
+ return isNaN(num) ? valueStr : num;
119
+ }
120
+ default:
121
+ return valueStr;
122
+ }
123
+ }
124
+ /**
125
+ * Validate value against data point constraints
126
+ */
127
+ export function validateValue(value, dataPoint) {
128
+ // Check min/max for numeric types
129
+ if ((dataPoint.type === 'float' || dataPoint.type === 'integer') && typeof value === 'number') {
130
+ if (dataPoint.min !== undefined && value < dataPoint.min) {
131
+ throw new Error(`Value ${value} is outside valid range [${dataPoint.min}, ${dataPoint.max ?? '∞'}]`);
132
+ }
133
+ if (dataPoint.max !== undefined && value > dataPoint.max) {
134
+ throw new Error(`Value ${value} is outside valid range [${dataPoint.min ?? '-∞'}, ${dataPoint.max}]`);
135
+ }
136
+ }
137
+ // Validate enum values
138
+ if (dataPoint.type === 'enum' && dataPoint.enumValues) {
139
+ const validKeys = Object.keys(dataPoint.enumValues);
140
+ const valueStr = String(value);
141
+ if (!validKeys.includes(valueStr)) {
142
+ throw new Error(`Invalid enum value: ${String(value)}. Valid values: ${validKeys.join(', ')}`);
143
+ }
144
+ }
145
+ }
146
+ /**
147
+ * Prompt user for confirmation
148
+ */
149
+ export async function confirm(message) {
150
+ const rl = readline.createInterface({
151
+ input: process.stdin,
152
+ output: process.stdout,
153
+ });
154
+ try {
155
+ const answer = await rl.question(`${message} (y/N): `);
156
+ return answer.toLowerCase() === 'y';
157
+ }
158
+ finally {
159
+ rl.close();
160
+ }
161
+ }
162
+ /**
163
+ * Execute a function with a transport, ensuring cleanup
164
+ *
165
+ * @param options - Transport configuration options
166
+ * @param fn - Function to execute with the transport
167
+ * @returns Result of the function
168
+ */
169
+ export async function withTransport(options, fn) {
170
+ // Build transport configuration
171
+ const transportConfig = options.host
172
+ ? {
173
+ // TCP configuration
174
+ host: options.host,
175
+ port: typeof options.port === 'number' ? options.port : DEFAULT_TCP_PORT,
176
+ slaveId: options.slaveId,
177
+ timeout: options.timeout,
178
+ }
179
+ : {
180
+ // RTU configuration
181
+ port: options.port ?? DEFAULT_RTU_CONFIG.port,
182
+ baudRate: options.baudRate ?? DEFAULT_RTU_CONFIG.baudRate,
183
+ dataBits: (options.dataBits ?? DEFAULT_RTU_CONFIG.dataBits),
184
+ parity: (options.parity ?? DEFAULT_RTU_CONFIG.parity),
185
+ stopBits: (options.stopBits ?? DEFAULT_RTU_CONFIG.stopBits),
186
+ slaveId: options.slaveId,
187
+ timeout: options.timeout,
188
+ };
189
+ // Create transport
190
+ const transport = await createTransport(transportConfig);
191
+ try {
192
+ return await fn(transport);
193
+ }
194
+ finally {
195
+ // Always close the transport to release resources and allow process to exit
196
+ await transport.close();
197
+ }
198
+ }
199
+ /**
200
+ * Load driver metadata without creating an instance
201
+ *
202
+ * When no driver name is provided, auto-detects from current working directory.
203
+ *
204
+ * @param driverName - Optional driver package name (auto-detects from cwd if not specified)
205
+ * @returns Loaded driver metadata
206
+ */
207
+ export async function loadDriverMetadata(driverName) {
208
+ return await loadDriver(driverName ? { driverPackage: driverName } : {});
209
+ }
210
+ /**
211
+ * Get the effective default config for a device
212
+ *
213
+ * Returns device-specific config if available, otherwise driver-level config.
214
+ *
215
+ * @param driverMetadata - Loaded driver metadata
216
+ * @param device - Optional device key
217
+ * @returns Effective default config or undefined
218
+ */
219
+ export function getEffectiveDefaultConfig(driverMetadata, device) {
220
+ if (!driverMetadata) {
221
+ return undefined;
222
+ }
223
+ // Check for device-specific config first
224
+ if (device && driverMetadata.devices?.[device]?.defaultConfig) {
225
+ const deviceConfig = driverMetadata.devices[device].defaultConfig;
226
+ if (deviceConfig && 'baudRate' in deviceConfig) {
227
+ return deviceConfig;
228
+ }
229
+ }
230
+ // Fall back to driver-level config
231
+ const driverConfig = driverMetadata.defaultConfig;
232
+ if (driverConfig && 'baudRate' in driverConfig) {
233
+ return driverConfig;
234
+ }
235
+ return undefined;
236
+ }
237
+ /**
238
+ * Get the effective supported config for a device
239
+ *
240
+ * Returns device-specific constraints if available, otherwise driver-level constraints.
241
+ *
242
+ * @param driverMetadata - Loaded driver metadata
243
+ * @param device - Optional device key
244
+ * @returns Effective supported config or undefined
245
+ */
246
+ export function getEffectiveSupportedConfig(driverMetadata, device) {
247
+ if (!driverMetadata) {
248
+ return undefined;
249
+ }
250
+ // Check for device-specific config first
251
+ if (device && driverMetadata.devices?.[device]?.supportedConfig) {
252
+ return driverMetadata.devices[device].supportedConfig;
253
+ }
254
+ // Fall back to driver-level config
255
+ return driverMetadata.supportedConfig;
256
+ }
257
+ /**
258
+ * Create an effective driver metadata with device-specific configs resolved
259
+ *
260
+ * This creates a view of the driver metadata where defaultConfig and supportedConfig
261
+ * are resolved based on the selected device. This allows validation and other
262
+ * functions to work with device-specific settings transparently.
263
+ *
264
+ * @param driverMetadata - Loaded driver metadata
265
+ * @param device - Optional device key
266
+ * @returns Driver metadata with effective configs for the selected device
267
+ */
268
+ export function getEffectiveDriverMetadata(driverMetadata, device) {
269
+ const effectiveDefaultConfig = getEffectiveDefaultConfig(driverMetadata, device);
270
+ const effectiveSupportedConfig = getEffectiveSupportedConfig(driverMetadata, device);
271
+ // Build result conditionally to satisfy exactOptionalPropertyTypes
272
+ const result = {
273
+ createDriver: driverMetadata.createDriver,
274
+ };
275
+ if (driverMetadata.devices) {
276
+ result.devices = driverMetadata.devices;
277
+ }
278
+ if (effectiveDefaultConfig) {
279
+ result.defaultConfig = effectiveDefaultConfig;
280
+ }
281
+ if (effectiveSupportedConfig) {
282
+ result.supportedConfig = effectiveSupportedConfig;
283
+ }
284
+ return result;
285
+ }
286
+ /**
287
+ * Apply driver defaults to transport options
288
+ *
289
+ * Uses device-specific defaults if a device is selected, otherwise driver-level defaults.
290
+ *
291
+ * @param options - Transport options (may be incomplete)
292
+ * @param driverMetadata - Loaded driver metadata with defaults
293
+ * @param device - Optional device key for multi-device drivers
294
+ * @returns Transport options with defaults applied
295
+ */
296
+ export function applyDriverDefaults(options, driverMetadata, device) {
297
+ // For TCP connections, no serial defaults apply
298
+ if (options.host) {
299
+ return options;
300
+ }
301
+ // Get effective config (device-specific or driver-level)
302
+ const defaultConfig = getEffectiveDefaultConfig(driverMetadata, device);
303
+ if (!defaultConfig) {
304
+ return options;
305
+ }
306
+ // Apply defaults for unspecified options
307
+ return {
308
+ ...options,
309
+ baudRate: options.baudRate ?? defaultConfig.baudRate,
310
+ dataBits: options.dataBits ?? defaultConfig.dataBits,
311
+ stopBits: options.stopBits ?? defaultConfig.stopBits,
312
+ parity: options.parity ?? defaultConfig.parity,
313
+ slaveId: options.slaveId ?? defaultConfig.defaultAddress,
314
+ };
315
+ }
316
+ /**
317
+ * Execute a function with a driver instance, ensuring cleanup
318
+ *
319
+ * @param transport - Transport to use for driver communication
320
+ * @param driverMetadata - Loaded driver metadata
321
+ * @param slaveId - Modbus slave ID
322
+ * @param device - Optional device key for multi-device drivers
323
+ * @param fn - Function to execute with the driver
324
+ * @returns Result of the function
325
+ */
326
+ export async function withDriverInstance(transport, driverMetadata, slaveId, device, fn) {
327
+ // Validate device key if DEVICES registry exists
328
+ if (driverMetadata.devices) {
329
+ const validDevices = Object.keys(driverMetadata.devices);
330
+ if (device && !validDevices.includes(device)) {
331
+ throw new Error(`Unknown device: ${device}. Valid devices: ${validDevices.join(', ')}`);
332
+ }
333
+ }
334
+ else if (device) {
335
+ // Warn user that --device is ignored for single-device drivers
336
+ console.warn(`Warning: --device '${device}' ignored (driver does not export a DEVICES registry)`);
337
+ }
338
+ // Create driver instance - only include device if defined
339
+ const driverConfig = device ? { transport, slaveId, device } : { transport, slaveId };
340
+ const driver = await driverMetadata.createDriver(driverConfig);
341
+ return await fn(driver);
342
+ }
343
+ /**
344
+ * Execute a function with a driver instance, handling the complete workflow
345
+ *
346
+ * This is a convenience function that:
347
+ * 1. Loads driver metadata (DEFAULT_CONFIG, SUPPORTED_CONFIG)
348
+ * 2. Validates user options against driver constraints (SUPPORTED_CONFIG)
349
+ * 3. Applies driver defaults to user options
350
+ * 4. Validates merged options (catches invalid third-party driver defaults)
351
+ * 5. Creates transport with merged configuration
352
+ * 6. Creates driver instance
353
+ * 7. Executes callback with driver and merged options
354
+ * 8. Ensures cleanup (closes transport)
355
+ *
356
+ * @param options - Combined transport and driver options
357
+ * @param fn - Function to execute with the driver (and optionally merged config)
358
+ * @returns Result of the function
359
+ * @throws ValidationError if user options or driver defaults violate constraints
360
+ */
361
+ export async function withDriver(options, fn) {
362
+ // Load driver metadata first
363
+ const driverMetadata = await loadDriverMetadata(options.driver);
364
+ // Get effective metadata with device-specific configs resolved
365
+ const effectiveMetadata = getEffectiveDriverMetadata(driverMetadata, options.device);
366
+ // Validate user-specified options against device/driver constraints (only for RTU connections)
367
+ if (!options.host) {
368
+ const validationOptions = omitUndefined({
369
+ baudRate: options.baudRate,
370
+ parity: options.parity,
371
+ dataBits: options.dataBits,
372
+ stopBits: options.stopBits,
373
+ slaveId: options.slaveId,
374
+ });
375
+ validateSerialOptions(validationOptions, effectiveMetadata);
376
+ }
377
+ // Apply driver defaults to options (device-specific if selected)
378
+ const mergedOptions = applyDriverDefaults(options, driverMetadata, options.device);
379
+ // Validate merged options to catch invalid defaults from third-party drivers
380
+ // This ensures driver DEFAULT_CONFIG values are valid according to SUPPORTED_CONFIG
381
+ if (!mergedOptions.host) {
382
+ const mergedValidationOptions = omitUndefined({
383
+ baudRate: mergedOptions.baudRate,
384
+ parity: mergedOptions.parity,
385
+ dataBits: mergedOptions.dataBits,
386
+ stopBits: mergedOptions.stopBits,
387
+ slaveId: mergedOptions.slaveId,
388
+ });
389
+ validateSerialOptions(mergedValidationOptions, effectiveMetadata);
390
+ }
391
+ // Create transport with merged options
392
+ return await withTransport(mergedOptions, async (transport) => {
393
+ // Create driver instance
394
+ return await withDriverInstance(transport, driverMetadata, mergedOptions.slaveId, options.device, async (driver) => {
395
+ // Execute callback with driver and merged options
396
+ return await fn(driver, mergedOptions);
397
+ });
398
+ });
399
+ }
400
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/utils/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Object utility functions
3
+ */
4
+ /**
5
+ * Remove undefined properties from an object
6
+ *
7
+ * Creates a new object with all properties that are not undefined.
8
+ * Preserves null, false, 0, empty string, and other falsy values.
9
+ *
10
+ * @param obj - Source object
11
+ * @returns New object without undefined properties
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * omitUndefined({ a: 1, b: undefined, c: 'hello' })
16
+ * // Returns: { a: 1, c: 'hello' }
17
+ * ```
18
+ */
19
+ export declare function omitUndefined<T extends Record<string, unknown>>(obj: T): Partial<T>;
20
+ //# sourceMappingURL=object-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/object-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUnF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Object utility functions
3
+ */
4
+ /**
5
+ * Remove undefined properties from an object
6
+ *
7
+ * Creates a new object with all properties that are not undefined.
8
+ * Preserves null, false, 0, empty string, and other falsy values.
9
+ *
10
+ * @param obj - Source object
11
+ * @returns New object without undefined properties
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * omitUndefined({ a: 1, b: undefined, c: 'hello' })
16
+ * // Returns: { a: 1, c: 'hello' }
17
+ * ```
18
+ */
19
+ export function omitUndefined(obj) {
20
+ const result = {};
21
+ for (const key in obj) {
22
+ if (obj[key] !== undefined) {
23
+ result[key] = obj[key];
24
+ }
25
+ }
26
+ return result;
27
+ }
28
+ //# sourceMappingURL=object-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-utils.js","sourceRoot":"","sources":["../../../src/utils/object-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAAoC,GAAM;IACrE,MAAM,MAAM,GAAe,EAAE,CAAA;IAE7B,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Validation utilities for CLI options using driver SUPPORTED_CONFIG
3
+ */
4
+ import type { LoadedDriver } from '@ya-modbus/driver-loader';
5
+ /**
6
+ * Validation error with helpful context
7
+ */
8
+ export declare class ValidationError extends Error {
9
+ readonly field: string;
10
+ readonly value: unknown;
11
+ readonly validValues?: readonly unknown[] | undefined;
12
+ constructor(message: string, field: string, value: unknown, validValues?: readonly unknown[] | undefined);
13
+ }
14
+ /**
15
+ * Validate baud rate against driver constraints
16
+ *
17
+ * @param baudRate - User-specified baud rate
18
+ * @param driverMetadata - Loaded driver metadata
19
+ * @throws ValidationError if invalid
20
+ */
21
+ export declare function validateBaudRate(baudRate: number | undefined, driverMetadata?: LoadedDriver): void;
22
+ /**
23
+ * Validate parity against driver constraints
24
+ *
25
+ * @param parity - User-specified parity
26
+ * @param driverMetadata - Loaded driver metadata
27
+ * @throws ValidationError if invalid
28
+ */
29
+ export declare function validateParity(parity: string | undefined, driverMetadata?: LoadedDriver): void;
30
+ /**
31
+ * Validate data bits against driver constraints
32
+ *
33
+ * @param dataBits - User-specified data bits
34
+ * @param driverMetadata - Loaded driver metadata
35
+ * @throws ValidationError if invalid
36
+ */
37
+ export declare function validateDataBits(dataBits: number | undefined, driverMetadata?: LoadedDriver): void;
38
+ /**
39
+ * Validate stop bits against driver constraints
40
+ *
41
+ * @param stopBits - User-specified stop bits
42
+ * @param driverMetadata - Loaded driver metadata
43
+ * @throws ValidationError if invalid
44
+ */
45
+ export declare function validateStopBits(stopBits: number | undefined, driverMetadata?: LoadedDriver): void;
46
+ /**
47
+ * Validate slave ID/address against driver constraints
48
+ *
49
+ * @param slaveId - User-specified slave ID
50
+ * @param driverMetadata - Loaded driver metadata
51
+ * @throws ValidationError if invalid
52
+ */
53
+ export declare function validateSlaveId(slaveId: number | undefined, driverMetadata?: LoadedDriver): void;
54
+ /**
55
+ * Validate all serial connection parameters
56
+ *
57
+ * Validates baudRate, parity, dataBits, stopBits, and slaveId against driver constraints.
58
+ *
59
+ * @param options - Connection options to validate
60
+ * @param driverMetadata - Loaded driver metadata
61
+ * @throws ValidationError if any parameter is invalid
62
+ */
63
+ export declare function validateSerialOptions(options: {
64
+ baudRate?: number;
65
+ parity?: string;
66
+ dataBits?: number;
67
+ stopBits?: number;
68
+ slaveId?: number;
69
+ }, driverMetadata?: LoadedDriver): void;
70
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,KAAK,EAAE,MAAM;aACb,KAAK,EAAE,OAAO;aACd,WAAW,CAAC,EAAE,SAAS,OAAO,EAAE;gBAHhD,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,SAAS,OAAO,EAAE,YAAA;CAKnD;AAcD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,CAAC,EAAE,YAAY,GAC5B,IAAI,CAwBN;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,CAAC,EAAE,YAAY,GAAG,IAAI,CAwB9F;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,CAAC,EAAE,YAAY,GAC5B,IAAI,CAwBN;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,CAAC,EAAE,YAAY,GAC5B,IAAI,CAwBN;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,CAAC,EAAE,YAAY,GAAG,IAAI,CAuBhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,EACD,cAAc,CAAC,EAAE,YAAY,GAC5B,IAAI,CAMN"}