@ya-modbus/driver-loader 0.11.2 → 0.12.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.
- package/CHANGELOG.md +10 -0
- package/README.md +32 -2
- package/dist/cjs/src/driver-defaults.d.ts +63 -0
- package/dist/cjs/src/driver-defaults.d.ts.map +1 -0
- package/dist/cjs/src/driver-defaults.js +117 -0
- package/dist/cjs/src/driver-defaults.js.map +1 -0
- package/dist/cjs/src/errors.d.ts +8 -2
- package/dist/cjs/src/errors.d.ts.map +1 -1
- package/dist/cjs/src/errors.js +8 -2
- package/dist/cjs/src/errors.js.map +1 -1
- package/dist/cjs/src/index.d.ts +3 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +6 -1
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/serial-validation.d.ts +61 -0
- package/dist/cjs/src/serial-validation.d.ts.map +1 -0
- package/dist/cjs/src/serial-validation.js +152 -0
- package/dist/cjs/src/serial-validation.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/driver-defaults.d.ts +63 -0
- package/dist/esm/src/driver-defaults.d.ts.map +1 -0
- package/dist/esm/src/driver-defaults.js +111 -0
- package/dist/esm/src/driver-defaults.js.map +1 -0
- package/dist/esm/src/errors.d.ts +8 -2
- package/dist/esm/src/errors.d.ts.map +1 -1
- package/dist/esm/src/errors.js +8 -2
- package/dist/esm/src/errors.js.map +1 -1
- package/dist/esm/src/index.d.ts +3 -0
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +2 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/serial-validation.d.ts +61 -0
- package/dist/esm/src/serial-validation.d.ts.map +1 -0
- package/dist/esm/src/serial-validation.js +144 -0
- package/dist/esm/src/serial-validation.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
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.12.0](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/driver-loader@0.11.2...@ya-modbus/driver-loader@0.12.0) (2026-10-14)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **mqtt-bridge:** use the driver's default serial settings and reject unsupported ones ([#627](https://github.com/groupsky/ya-modbus/issues/627)) ([](https://github.com/groupsky/ya-modbus/commit/)), closes [#609](https://github.com/groupsky/ya-modbus/issues/609)
|
|
11
|
+
|
|
12
|
+
### BREAKING CHANGES
|
|
13
|
+
|
|
14
|
+
- **mqtt-bridge:** in mqtt-bridge, a device config without parity used to get "none" and now gets the driver default. Set "parity": "none" to keep the old behavior. A serial setting the driver does not support now stops startup.
|
|
15
|
+
|
|
6
16
|
## [0.11.2](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/driver-loader@0.11.1...@ya-modbus/driver-loader@0.11.2) (2026-10-12)
|
|
7
17
|
|
|
8
18
|
**Note:** Version bump only for package @ya-modbus/driver-loader
|
package/README.md
CHANGED
|
@@ -85,9 +85,11 @@ try {
|
|
|
85
85
|
|
|
86
86
|
**Error Types:**
|
|
87
87
|
|
|
88
|
-
- **`ValidationError`**: Driver configuration validation failed
|
|
88
|
+
- **`ValidationError`**: Driver configuration validation failed, or a connection option is not in the driver's `SUPPORTED_CONFIG`
|
|
89
89
|
- `field?: string` - The configuration field that failed validation
|
|
90
|
-
-
|
|
90
|
+
- `value?: unknown` - The rejected value, when it is known
|
|
91
|
+
- `validValues?: readonly unknown[]` - The values that the driver supports, when they are known
|
|
92
|
+
- Example: Invalid DEFAULT_CONFIG, missing createDriver function, parity `none` for a driver that supports only `odd`
|
|
91
93
|
|
|
92
94
|
- **`DriverNotFoundError`**: Driver package not found or cannot be loaded
|
|
93
95
|
- `packageName: string` - The package that could not be found or loaded. For a package that is not installed this is the package to install
|
|
@@ -249,6 +251,34 @@ assertValidDriverPackageName(config.driver)
|
|
|
249
251
|
await loadDriver({ driverPackage: config.driver })
|
|
250
252
|
```
|
|
251
253
|
|
|
254
|
+
### `validateSerialOptions(options, driver?: LoadedDriver): void`
|
|
255
|
+
|
|
256
|
+
Checks `baudRate`, `parity`, `dataBits`, `stopBits` and `slaveId` against the driver's `SUPPORTED_CONFIG`. An option that is not set, or that the driver does not limit, passes. A value that the driver does not support throws a `ValidationError` with `field`, `value`, `validValues` and a message such as `Invalid parity 'none'. This driver supports: odd (default: odd)`.
|
|
257
|
+
|
|
258
|
+
### `applyDriverDefaults(options, driver?: LoadedDriver, device?: string)`
|
|
259
|
+
|
|
260
|
+
Returns a copy of `options` where each missing `baudRate`, `parity`, `dataBits`, `stopBits` and `slaveId` is taken from the driver's serial `DEFAULT_CONFIG` (`slaveId` from `defaultAddress`). With `device`, the device's `defaultConfig` from `DEVICES` is used when it has one. Options with a `host` (TCP), and options for a driver without a serial `DEFAULT_CONFIG`, are returned unchanged.
|
|
261
|
+
|
|
262
|
+
### `getEffectiveDriverMetadata(driver: LoadedDriver, device?: string): LoadedDriver`
|
|
263
|
+
|
|
264
|
+
Returns the driver with `defaultConfig` and `supportedConfig` of the selected device from `DEVICES`, or of the driver when the device has none. Pass the result to `validateSerialOptions` to check the options of a device.
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
import {
|
|
268
|
+
applyDriverDefaults,
|
|
269
|
+
getEffectiveDriverMetadata,
|
|
270
|
+
loadDriver,
|
|
271
|
+
validateSerialOptions,
|
|
272
|
+
} from '@ya-modbus/driver-loader'
|
|
273
|
+
|
|
274
|
+
const driver = await loadDriver({ driverPackage: '@ya-modbus/driver-or-we-516' })
|
|
275
|
+
const effective = getEffectiveDriverMetadata(driver, device)
|
|
276
|
+
|
|
277
|
+
validateSerialOptions(options, effective) // the options the user set
|
|
278
|
+
const merged = applyDriverDefaults(options, driver, device)
|
|
279
|
+
validateSerialOptions(merged, effective) // catches defaults that the driver does not support
|
|
280
|
+
```
|
|
281
|
+
|
|
252
282
|
## Testing Utilities
|
|
253
283
|
|
|
254
284
|
The package provides testing utilities for applications using driver-loader.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Driver defaults for connection options: DEFAULT_CONFIG and SUPPORTED_CONFIG of the driver,
|
|
3
|
+
* or of the selected device in its DEVICES registry
|
|
4
|
+
*/
|
|
5
|
+
import type { DefaultSerialConfig } from '@ya-modbus/driver-types';
|
|
6
|
+
import type { LoadedDriver } from './loader.js';
|
|
7
|
+
/**
|
|
8
|
+
* Connection options that driver defaults apply to
|
|
9
|
+
*
|
|
10
|
+
* `host` marks a TCP connection, which serial defaults do not apply to.
|
|
11
|
+
*/
|
|
12
|
+
export interface SerialOptions {
|
|
13
|
+
host?: string;
|
|
14
|
+
baudRate?: number;
|
|
15
|
+
dataBits?: number;
|
|
16
|
+
parity?: string;
|
|
17
|
+
stopBits?: number;
|
|
18
|
+
slaveId?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the effective default config for a device
|
|
22
|
+
*
|
|
23
|
+
* Returns device-specific config if available, otherwise driver-level config.
|
|
24
|
+
*
|
|
25
|
+
* @param driverMetadata - Loaded driver metadata
|
|
26
|
+
* @param device - Optional device key
|
|
27
|
+
* @returns Effective default config or undefined
|
|
28
|
+
*/
|
|
29
|
+
export declare function getEffectiveDefaultConfig(driverMetadata: LoadedDriver | undefined, device: string | undefined): DefaultSerialConfig | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Get the effective supported config for a device
|
|
32
|
+
*
|
|
33
|
+
* Returns device-specific constraints if available, otherwise driver-level constraints.
|
|
34
|
+
*
|
|
35
|
+
* @param driverMetadata - Loaded driver metadata
|
|
36
|
+
* @param device - Optional device key
|
|
37
|
+
* @returns Effective supported config or undefined
|
|
38
|
+
*/
|
|
39
|
+
export declare function getEffectiveSupportedConfig(driverMetadata: LoadedDriver | undefined, device: string | undefined): LoadedDriver['supportedConfig'] | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Create an effective driver metadata with device-specific configs resolved
|
|
42
|
+
*
|
|
43
|
+
* This creates a view of the driver metadata where defaultConfig and supportedConfig
|
|
44
|
+
* are resolved based on the selected device. This allows validation and other
|
|
45
|
+
* functions to work with device-specific settings transparently.
|
|
46
|
+
*
|
|
47
|
+
* @param driverMetadata - Loaded driver metadata
|
|
48
|
+
* @param device - Optional device key
|
|
49
|
+
* @returns Driver metadata with effective configs for the selected device
|
|
50
|
+
*/
|
|
51
|
+
export declare function getEffectiveDriverMetadata(driverMetadata: LoadedDriver, device?: string): LoadedDriver;
|
|
52
|
+
/**
|
|
53
|
+
* Apply driver defaults to transport options
|
|
54
|
+
*
|
|
55
|
+
* Uses device-specific defaults if a device is selected, otherwise driver-level defaults.
|
|
56
|
+
*
|
|
57
|
+
* @param options - Transport options (may be incomplete)
|
|
58
|
+
* @param driverMetadata - Loaded driver metadata with defaults
|
|
59
|
+
* @param device - Optional device key for multi-device drivers
|
|
60
|
+
* @returns Transport options with defaults applied
|
|
61
|
+
*/
|
|
62
|
+
export declare function applyDriverDefaults<T extends SerialOptions>(options: T, driverMetadata?: LoadedDriver, device?: string): T;
|
|
63
|
+
//# sourceMappingURL=driver-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-defaults.d.ts","sourceRoot":"","sources":["../../../src/driver-defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,YAAY,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,mBAAmB,GAAG,SAAS,CAoBjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,YAAY,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,YAAY,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAY7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,YAAY,EAC5B,MAAM,CAAC,EAAE,MAAM,GACd,YAAY,CAsBd;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,aAAa,EACzD,OAAO,EAAE,CAAC,EACV,cAAc,CAAC,EAAE,YAAY,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,CAAC,CAsBH"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Driver defaults for connection options: DEFAULT_CONFIG and SUPPORTED_CONFIG of the driver,
|
|
4
|
+
* or of the selected device in its DEVICES registry
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getEffectiveDefaultConfig = getEffectiveDefaultConfig;
|
|
8
|
+
exports.getEffectiveSupportedConfig = getEffectiveSupportedConfig;
|
|
9
|
+
exports.getEffectiveDriverMetadata = getEffectiveDriverMetadata;
|
|
10
|
+
exports.applyDriverDefaults = applyDriverDefaults;
|
|
11
|
+
/**
|
|
12
|
+
* Get the effective default config for a device
|
|
13
|
+
*
|
|
14
|
+
* Returns device-specific config if available, otherwise driver-level config.
|
|
15
|
+
*
|
|
16
|
+
* @param driverMetadata - Loaded driver metadata
|
|
17
|
+
* @param device - Optional device key
|
|
18
|
+
* @returns Effective default config or undefined
|
|
19
|
+
*/
|
|
20
|
+
function getEffectiveDefaultConfig(driverMetadata, device) {
|
|
21
|
+
if (!driverMetadata) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
// Check for device-specific config first
|
|
25
|
+
if (device && driverMetadata.devices?.[device]?.defaultConfig) {
|
|
26
|
+
const deviceConfig = driverMetadata.devices[device].defaultConfig;
|
|
27
|
+
if (deviceConfig && 'baudRate' in deviceConfig) {
|
|
28
|
+
return deviceConfig;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Fall back to driver-level config
|
|
32
|
+
const driverConfig = driverMetadata.defaultConfig;
|
|
33
|
+
if (driverConfig && 'baudRate' in driverConfig) {
|
|
34
|
+
return driverConfig;
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the effective supported config for a device
|
|
40
|
+
*
|
|
41
|
+
* Returns device-specific constraints if available, otherwise driver-level constraints.
|
|
42
|
+
*
|
|
43
|
+
* @param driverMetadata - Loaded driver metadata
|
|
44
|
+
* @param device - Optional device key
|
|
45
|
+
* @returns Effective supported config or undefined
|
|
46
|
+
*/
|
|
47
|
+
function getEffectiveSupportedConfig(driverMetadata, device) {
|
|
48
|
+
if (!driverMetadata) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
// Check for device-specific config first
|
|
52
|
+
if (device && driverMetadata.devices?.[device]?.supportedConfig) {
|
|
53
|
+
return driverMetadata.devices[device].supportedConfig;
|
|
54
|
+
}
|
|
55
|
+
// Fall back to driver-level config
|
|
56
|
+
return driverMetadata.supportedConfig;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create an effective driver metadata with device-specific configs resolved
|
|
60
|
+
*
|
|
61
|
+
* This creates a view of the driver metadata where defaultConfig and supportedConfig
|
|
62
|
+
* are resolved based on the selected device. This allows validation and other
|
|
63
|
+
* functions to work with device-specific settings transparently.
|
|
64
|
+
*
|
|
65
|
+
* @param driverMetadata - Loaded driver metadata
|
|
66
|
+
* @param device - Optional device key
|
|
67
|
+
* @returns Driver metadata with effective configs for the selected device
|
|
68
|
+
*/
|
|
69
|
+
function getEffectiveDriverMetadata(driverMetadata, device) {
|
|
70
|
+
const effectiveDefaultConfig = getEffectiveDefaultConfig(driverMetadata, device);
|
|
71
|
+
const effectiveSupportedConfig = getEffectiveSupportedConfig(driverMetadata, device);
|
|
72
|
+
// Build result conditionally to satisfy exactOptionalPropertyTypes
|
|
73
|
+
const result = {
|
|
74
|
+
createDriver: driverMetadata.createDriver,
|
|
75
|
+
};
|
|
76
|
+
if (driverMetadata.devices) {
|
|
77
|
+
result.devices = driverMetadata.devices;
|
|
78
|
+
}
|
|
79
|
+
if (effectiveDefaultConfig) {
|
|
80
|
+
result.defaultConfig = effectiveDefaultConfig;
|
|
81
|
+
}
|
|
82
|
+
if (effectiveSupportedConfig) {
|
|
83
|
+
result.supportedConfig = effectiveSupportedConfig;
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Apply driver defaults to transport options
|
|
89
|
+
*
|
|
90
|
+
* Uses device-specific defaults if a device is selected, otherwise driver-level defaults.
|
|
91
|
+
*
|
|
92
|
+
* @param options - Transport options (may be incomplete)
|
|
93
|
+
* @param driverMetadata - Loaded driver metadata with defaults
|
|
94
|
+
* @param device - Optional device key for multi-device drivers
|
|
95
|
+
* @returns Transport options with defaults applied
|
|
96
|
+
*/
|
|
97
|
+
function applyDriverDefaults(options, driverMetadata, device) {
|
|
98
|
+
// For TCP connections, no serial defaults apply
|
|
99
|
+
if (options.host) {
|
|
100
|
+
return options;
|
|
101
|
+
}
|
|
102
|
+
// Get effective config (device-specific or driver-level)
|
|
103
|
+
const defaultConfig = getEffectiveDefaultConfig(driverMetadata, device);
|
|
104
|
+
if (!defaultConfig) {
|
|
105
|
+
return options;
|
|
106
|
+
}
|
|
107
|
+
// Apply defaults for unspecified options
|
|
108
|
+
return {
|
|
109
|
+
...options,
|
|
110
|
+
baudRate: options.baudRate ?? defaultConfig.baudRate,
|
|
111
|
+
dataBits: options.dataBits ?? defaultConfig.dataBits,
|
|
112
|
+
stopBits: options.stopBits ?? defaultConfig.stopBits,
|
|
113
|
+
parity: options.parity ?? defaultConfig.parity,
|
|
114
|
+
slaveId: options.slaveId ?? defaultConfig.defaultAddress,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=driver-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-defaults.js","sourceRoot":"","sources":["../../../src/driver-defaults.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA6BH,8DAuBC;AAWD,kEAeC;AAaD,gEAyBC;AAYD,kDA0BC;AAtID;;;;;;;;GAQG;AACH,SAAgB,yBAAyB,CACvC,cAAwC,EACxC,MAA0B;IAE1B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,yCAAyC;IACzC,IAAI,MAAM,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,CAAA;QACjE,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;YAC/C,OAAO,YAAY,CAAA;QACrB,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,GAAG,cAAc,CAAC,aAAa,CAAA;IACjD,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,2BAA2B,CACzC,cAAwC,EACxC,MAA0B;IAE1B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,yCAAyC;IACzC,IAAI,MAAM,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;QAChE,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAA;IACvD,CAAC;IAED,mCAAmC;IACnC,OAAO,cAAc,CAAC,eAAe,CAAA;AACvC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,0BAA0B,CACxC,cAA4B,EAC5B,MAAe;IAEf,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IAChF,MAAM,wBAAwB,GAAG,2BAA2B,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IAEpF,mEAAmE;IACnE,MAAM,MAAM,GAAiB;QAC3B,YAAY,EAAE,cAAc,CAAC,YAAY;KAC1C,CAAA;IAED,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAA;IACzC,CAAC;IAED,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,CAAC,aAAa,GAAG,sBAAsB,CAAA;IAC/C,CAAC;IAED,IAAI,wBAAwB,EAAE,CAAC;QAC7B,MAAM,CAAC,eAAe,GAAG,wBAAwB,CAAA;IACnD,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CACjC,OAAU,EACV,cAA6B,EAC7B,MAAe;IAEf,gDAAgD;IAChD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,yDAAyD;IACzD,MAAM,aAAa,GAAG,yBAAyB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IAEvE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,yCAAyC;IACzC,OAAO;QACL,GAAG,OAAO;QACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ;QACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ;QACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ;QACpD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM;QAC9C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,cAAc;KACzD,CAAA;AACH,CAAC"}
|
package/dist/cjs/src/errors.d.ts
CHANGED
|
@@ -5,7 +5,11 @@
|
|
|
5
5
|
* compared to string-based error detection.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
* Error thrown when driver configuration validation fails
|
|
8
|
+
* Error thrown when driver configuration validation fails, or when a connection option is not
|
|
9
|
+
* in the driver's SUPPORTED_CONFIG
|
|
10
|
+
*
|
|
11
|
+
* `value` is the rejected value and `validValues` the values that the driver supports, when
|
|
12
|
+
* they are known.
|
|
9
13
|
*
|
|
10
14
|
* @example
|
|
11
15
|
* ```typescript
|
|
@@ -23,7 +27,9 @@
|
|
|
23
27
|
*/
|
|
24
28
|
export declare class ValidationError extends Error {
|
|
25
29
|
readonly field?: string | undefined;
|
|
26
|
-
|
|
30
|
+
readonly value?: unknown | undefined;
|
|
31
|
+
readonly validValues?: readonly unknown[] | undefined;
|
|
32
|
+
constructor(message: string, field?: string | undefined, value?: unknown | undefined, validValues?: readonly unknown[] | undefined);
|
|
27
33
|
}
|
|
28
34
|
/**
|
|
29
35
|
* Error thrown when a driver package cannot be found or loaded
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,KAAK,CAAC,EAAE,MAAM;aACd,KAAK,CAAC,EAAE,OAAO;aACf,WAAW,CAAC,EAAE,SAAS,OAAO,EAAE;gBAHhD,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,KAAK,CAAC,EAAE,OAAO,YAAA,EACf,WAAW,CAAC,EAAE,SAAS,OAAO,EAAE,YAAA;CAMnD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,WAAW,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,EACnC,OAAO,CAAC,EAAE,YAAY;CAMzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,WAAW,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,EACnC,OAAO,CAAC,EAAE,YAAY;CAMzB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAK5B"}
|
package/dist/cjs/src/errors.js
CHANGED
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.PackageJsonError = exports.DriverNotBuiltError = exports.DriverNotFoundError = exports.ValidationError = void 0;
|
|
10
10
|
/**
|
|
11
|
-
* Error thrown when driver configuration validation fails
|
|
11
|
+
* Error thrown when driver configuration validation fails, or when a connection option is not
|
|
12
|
+
* in the driver's SUPPORTED_CONFIG
|
|
13
|
+
*
|
|
14
|
+
* `value` is the rejected value and `validValues` the values that the driver supports, when
|
|
15
|
+
* they are known.
|
|
12
16
|
*
|
|
13
17
|
* @example
|
|
14
18
|
* ```typescript
|
|
@@ -25,9 +29,11 @@ exports.PackageJsonError = exports.DriverNotBuiltError = exports.DriverNotFoundE
|
|
|
25
29
|
* ```
|
|
26
30
|
*/
|
|
27
31
|
class ValidationError extends Error {
|
|
28
|
-
constructor(message, field) {
|
|
32
|
+
constructor(message, field, value, validValues) {
|
|
29
33
|
super(message);
|
|
30
34
|
this.field = field;
|
|
35
|
+
this.value = value;
|
|
36
|
+
this.validValues = validValues;
|
|
31
37
|
this.name = 'ValidationError';
|
|
32
38
|
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
33
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,eAAgB,SAAQ,KAAK;IACxC,YACE,OAAe,EACC,KAAc,EACd,KAAe,EACf,WAAgC;QAEhD,KAAK,CAAC,OAAO,CAAC,CAAA;QAJE,UAAK,GAAL,KAAK,CAAS;QACd,UAAK,GAAL,KAAK,CAAU;QACf,gBAAW,GAAX,WAAW,CAAqB;QAGhD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACxD,CAAC;CACF;AAXD,0CAWC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YACE,OAAe,EACC,WAAmB,EACnC,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAHP,gBAAW,GAAX,WAAW,CAAQ;QAInC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAC5D,CAAC;CACF;AAVD,kDAUC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YACE,OAAe,EACC,WAAmB,EACnC,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAHP,gBAAW,GAAX,WAAW,CAAQ;QAInC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAC5D,CAAC;CACF;AAVD,kDAUC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;IACzD,CAAC;CACF;AAND,4CAMC"}
|
package/dist/cjs/src/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { loadDriver, clearDriverCache, getDriverCacheStats } from './loader.js';
|
|
2
2
|
export type { LoadedDriver, LoadDriverOptions, SystemDependencies, DriverCacheStats, Logger, } from './loader.js';
|
|
3
3
|
export { validateDefaultConfig, validateSupportedConfig, validateDevices, crossValidateConfigs, } from './config-validator.js';
|
|
4
|
+
export { applyDriverDefaults, getEffectiveDriverMetadata } from './driver-defaults.js';
|
|
5
|
+
export type { SerialOptions } from './driver-defaults.js';
|
|
6
|
+
export { validateSerialOptions } from './serial-validation.js';
|
|
4
7
|
export { DRIVER_PACKAGE_NAME_RULE, assertValidDriverPackageName, isValidDriverPackageName, } from './driver-package-name.js';
|
|
5
8
|
export { ValidationError, DriverNotFoundError, DriverNotBuiltError, PackageJsonError, } from './errors.js';
|
|
6
9
|
export { getCallerPackageInfo } from './package-info.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC/E,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,GACP,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC/E,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,GACP,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACtF,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/cjs/src/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getCallerPackageInfo = exports.PackageJsonError = exports.DriverNotBuiltError = exports.DriverNotFoundError = exports.ValidationError = exports.isValidDriverPackageName = exports.assertValidDriverPackageName = exports.DRIVER_PACKAGE_NAME_RULE = exports.crossValidateConfigs = exports.validateDevices = exports.validateSupportedConfig = exports.validateDefaultConfig = exports.getDriverCacheStats = exports.clearDriverCache = exports.loadDriver = void 0;
|
|
3
|
+
exports.getCallerPackageInfo = exports.PackageJsonError = exports.DriverNotBuiltError = exports.DriverNotFoundError = exports.ValidationError = exports.isValidDriverPackageName = exports.assertValidDriverPackageName = exports.DRIVER_PACKAGE_NAME_RULE = exports.validateSerialOptions = exports.getEffectiveDriverMetadata = exports.applyDriverDefaults = exports.crossValidateConfigs = exports.validateDevices = exports.validateSupportedConfig = exports.validateDefaultConfig = exports.getDriverCacheStats = exports.clearDriverCache = exports.loadDriver = void 0;
|
|
4
4
|
var loader_js_1 = require("./loader.js");
|
|
5
5
|
Object.defineProperty(exports, "loadDriver", { enumerable: true, get: function () { return loader_js_1.loadDriver; } });
|
|
6
6
|
Object.defineProperty(exports, "clearDriverCache", { enumerable: true, get: function () { return loader_js_1.clearDriverCache; } });
|
|
@@ -10,6 +10,11 @@ Object.defineProperty(exports, "validateDefaultConfig", { enumerable: true, get:
|
|
|
10
10
|
Object.defineProperty(exports, "validateSupportedConfig", { enumerable: true, get: function () { return config_validator_js_1.validateSupportedConfig; } });
|
|
11
11
|
Object.defineProperty(exports, "validateDevices", { enumerable: true, get: function () { return config_validator_js_1.validateDevices; } });
|
|
12
12
|
Object.defineProperty(exports, "crossValidateConfigs", { enumerable: true, get: function () { return config_validator_js_1.crossValidateConfigs; } });
|
|
13
|
+
var driver_defaults_js_1 = require("./driver-defaults.js");
|
|
14
|
+
Object.defineProperty(exports, "applyDriverDefaults", { enumerable: true, get: function () { return driver_defaults_js_1.applyDriverDefaults; } });
|
|
15
|
+
Object.defineProperty(exports, "getEffectiveDriverMetadata", { enumerable: true, get: function () { return driver_defaults_js_1.getEffectiveDriverMetadata; } });
|
|
16
|
+
var serial_validation_js_1 = require("./serial-validation.js");
|
|
17
|
+
Object.defineProperty(exports, "validateSerialOptions", { enumerable: true, get: function () { return serial_validation_js_1.validateSerialOptions; } });
|
|
13
18
|
var driver_package_name_js_1 = require("./driver-package-name.js");
|
|
14
19
|
Object.defineProperty(exports, "DRIVER_PACKAGE_NAME_RULE", { enumerable: true, get: function () { return driver_package_name_js_1.DRIVER_PACKAGE_NAME_RULE; } });
|
|
15
20
|
Object.defineProperty(exports, "assertValidDriverPackageName", { enumerable: true, get: function () { return driver_package_name_js_1.assertValidDriverPackageName; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA+E;AAAtE,uGAAA,UAAU,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAQ1D,6DAK8B;AAJ5B,4HAAA,qBAAqB,OAAA;AACrB,8HAAA,uBAAuB,OAAA;AACvB,sHAAA,eAAe,OAAA;AACf,2HAAA,oBAAoB,OAAA;AAEtB,mEAIiC;AAH/B,kIAAA,wBAAwB,OAAA;AACxB,sIAAA,4BAA4B,OAAA;AAC5B,kIAAA,wBAAwB,OAAA;AAE1B,yCAKoB;AAJlB,4GAAA,eAAe,OAAA;AACf,gHAAA,mBAAmB,OAAA;AACnB,gHAAA,mBAAmB,OAAA;AACnB,6GAAA,gBAAgB,OAAA;AAElB,qDAAwD;AAA/C,uHAAA,oBAAoB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA+E;AAAtE,uGAAA,UAAU,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAQ1D,6DAK8B;AAJ5B,4HAAA,qBAAqB,OAAA;AACrB,8HAAA,uBAAuB,OAAA;AACvB,sHAAA,eAAe,OAAA;AACf,2HAAA,oBAAoB,OAAA;AAEtB,2DAAsF;AAA7E,yHAAA,mBAAmB,OAAA;AAAE,gIAAA,0BAA0B,OAAA;AAExD,+DAA8D;AAArD,6HAAA,qBAAqB,OAAA;AAC9B,mEAIiC;AAH/B,kIAAA,wBAAwB,OAAA;AACxB,sIAAA,4BAA4B,OAAA;AAC5B,kIAAA,wBAAwB,OAAA;AAE1B,yCAKoB;AAJlB,4GAAA,eAAe,OAAA;AACf,gHAAA,mBAAmB,OAAA;AACnB,gHAAA,mBAAmB,OAAA;AACnB,6GAAA,gBAAgB,OAAA;AAElB,qDAAwD;AAA/C,uHAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation of serial connection options against a driver's SUPPORTED_CONFIG
|
|
3
|
+
*/
|
|
4
|
+
import type { LoadedDriver } from './loader.js';
|
|
5
|
+
/**
|
|
6
|
+
* Validate baud rate against driver constraints
|
|
7
|
+
*
|
|
8
|
+
* @param baudRate - User-specified baud rate
|
|
9
|
+
* @param driverMetadata - Loaded driver metadata
|
|
10
|
+
* @throws ValidationError if invalid
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateBaudRate(baudRate: number | undefined, driverMetadata?: LoadedDriver): void;
|
|
13
|
+
/**
|
|
14
|
+
* Validate parity against driver constraints
|
|
15
|
+
*
|
|
16
|
+
* @param parity - User-specified parity
|
|
17
|
+
* @param driverMetadata - Loaded driver metadata
|
|
18
|
+
* @throws ValidationError if invalid
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateParity(parity: string | undefined, driverMetadata?: LoadedDriver): void;
|
|
21
|
+
/**
|
|
22
|
+
* Validate data bits against driver constraints
|
|
23
|
+
*
|
|
24
|
+
* @param dataBits - User-specified data bits
|
|
25
|
+
* @param driverMetadata - Loaded driver metadata
|
|
26
|
+
* @throws ValidationError if invalid
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateDataBits(dataBits: number | undefined, driverMetadata?: LoadedDriver): void;
|
|
29
|
+
/**
|
|
30
|
+
* Validate stop bits against driver constraints
|
|
31
|
+
*
|
|
32
|
+
* @param stopBits - User-specified stop bits
|
|
33
|
+
* @param driverMetadata - Loaded driver metadata
|
|
34
|
+
* @throws ValidationError if invalid
|
|
35
|
+
*/
|
|
36
|
+
export declare function validateStopBits(stopBits: number | undefined, driverMetadata?: LoadedDriver): void;
|
|
37
|
+
/**
|
|
38
|
+
* Validate slave ID/address against driver constraints
|
|
39
|
+
*
|
|
40
|
+
* @param slaveId - User-specified slave ID
|
|
41
|
+
* @param driverMetadata - Loaded driver metadata
|
|
42
|
+
* @throws ValidationError if invalid
|
|
43
|
+
*/
|
|
44
|
+
export declare function validateSlaveId(slaveId: number | undefined, driverMetadata?: LoadedDriver): void;
|
|
45
|
+
/**
|
|
46
|
+
* Validate all serial connection parameters
|
|
47
|
+
*
|
|
48
|
+
* Validates baudRate, parity, dataBits, stopBits, and slaveId against driver constraints.
|
|
49
|
+
*
|
|
50
|
+
* @param options - Connection options to validate
|
|
51
|
+
* @param driverMetadata - Loaded driver metadata
|
|
52
|
+
* @throws ValidationError if any parameter is invalid
|
|
53
|
+
*/
|
|
54
|
+
export declare function validateSerialOptions(options: {
|
|
55
|
+
baudRate?: number;
|
|
56
|
+
parity?: string;
|
|
57
|
+
dataBits?: number;
|
|
58
|
+
stopBits?: number;
|
|
59
|
+
slaveId?: number;
|
|
60
|
+
}, driverMetadata?: LoadedDriver): void;
|
|
61
|
+
//# sourceMappingURL=serial-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serial-validation.d.ts","sourceRoot":"","sources":["../../../src/serial-validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAc/C;;;;;;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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validation of serial connection options against a driver's SUPPORTED_CONFIG
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateBaudRate = validateBaudRate;
|
|
7
|
+
exports.validateParity = validateParity;
|
|
8
|
+
exports.validateDataBits = validateDataBits;
|
|
9
|
+
exports.validateStopBits = validateStopBits;
|
|
10
|
+
exports.validateSlaveId = validateSlaveId;
|
|
11
|
+
exports.validateSerialOptions = validateSerialOptions;
|
|
12
|
+
const errors_js_1 = require("./errors.js");
|
|
13
|
+
/**
|
|
14
|
+
* Check if config is a serial config (has validBaudRates)
|
|
15
|
+
*/
|
|
16
|
+
function isSerialConfig(config) {
|
|
17
|
+
return (config !== null &&
|
|
18
|
+
config !== undefined &&
|
|
19
|
+
typeof config === 'object' &&
|
|
20
|
+
'validBaudRates' in config);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validate baud rate against driver constraints
|
|
24
|
+
*
|
|
25
|
+
* @param baudRate - User-specified baud rate
|
|
26
|
+
* @param driverMetadata - Loaded driver metadata
|
|
27
|
+
* @throws ValidationError if invalid
|
|
28
|
+
*/
|
|
29
|
+
function validateBaudRate(baudRate, driverMetadata) {
|
|
30
|
+
if (baudRate === undefined) {
|
|
31
|
+
return; // No validation needed if not specified
|
|
32
|
+
}
|
|
33
|
+
const supportedConfig = driverMetadata?.supportedConfig;
|
|
34
|
+
if (!isSerialConfig(supportedConfig) || !supportedConfig.validBaudRates) {
|
|
35
|
+
return; // No driver-specific constraints
|
|
36
|
+
}
|
|
37
|
+
const validRates = supportedConfig.validBaudRates;
|
|
38
|
+
if (!validRates.includes(baudRate)) {
|
|
39
|
+
const rateList = validRates.join(', ');
|
|
40
|
+
const defaultConfig = driverMetadata?.defaultConfig;
|
|
41
|
+
const defaultRate = defaultConfig && 'baudRate' in defaultConfig ? defaultConfig.baudRate : undefined;
|
|
42
|
+
throw new errors_js_1.ValidationError(`Invalid baud rate ${baudRate}. This driver supports: ${rateList}${defaultRate ? ` (default: ${defaultRate})` : ''}`, 'baudRate', baudRate, validRates);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate parity against driver constraints
|
|
47
|
+
*
|
|
48
|
+
* @param parity - User-specified parity
|
|
49
|
+
* @param driverMetadata - Loaded driver metadata
|
|
50
|
+
* @throws ValidationError if invalid
|
|
51
|
+
*/
|
|
52
|
+
function validateParity(parity, driverMetadata) {
|
|
53
|
+
if (parity === undefined) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const supportedConfig = driverMetadata?.supportedConfig;
|
|
57
|
+
if (!isSerialConfig(supportedConfig) || !supportedConfig.validParity) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const validParity = supportedConfig.validParity;
|
|
61
|
+
if (!validParity.includes(parity)) {
|
|
62
|
+
const parityList = validParity.join(', ');
|
|
63
|
+
const defaultConfig = driverMetadata?.defaultConfig;
|
|
64
|
+
const defaultParity = defaultConfig && 'parity' in defaultConfig ? defaultConfig.parity : undefined;
|
|
65
|
+
throw new errors_js_1.ValidationError(`Invalid parity '${parity}'. This driver supports: ${parityList}${defaultParity ? ` (default: ${defaultParity})` : ''}`, 'parity', parity, validParity);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate data bits against driver constraints
|
|
70
|
+
*
|
|
71
|
+
* @param dataBits - User-specified data bits
|
|
72
|
+
* @param driverMetadata - Loaded driver metadata
|
|
73
|
+
* @throws ValidationError if invalid
|
|
74
|
+
*/
|
|
75
|
+
function validateDataBits(dataBits, driverMetadata) {
|
|
76
|
+
if (dataBits === undefined) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const supportedConfig = driverMetadata?.supportedConfig;
|
|
80
|
+
if (!isSerialConfig(supportedConfig) || !supportedConfig.validDataBits) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const validDataBits = supportedConfig.validDataBits;
|
|
84
|
+
if (!validDataBits.includes(dataBits)) {
|
|
85
|
+
const bitsList = validDataBits.join(', ');
|
|
86
|
+
const defaultConfig = driverMetadata?.defaultConfig;
|
|
87
|
+
const defaultBits = defaultConfig && 'dataBits' in defaultConfig ? defaultConfig.dataBits : undefined;
|
|
88
|
+
throw new errors_js_1.ValidationError(`Invalid data bits ${dataBits}. This driver supports: ${bitsList}${defaultBits ? ` (default: ${defaultBits})` : ''}`, 'dataBits', dataBits, validDataBits);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validate stop bits against driver constraints
|
|
93
|
+
*
|
|
94
|
+
* @param stopBits - User-specified stop bits
|
|
95
|
+
* @param driverMetadata - Loaded driver metadata
|
|
96
|
+
* @throws ValidationError if invalid
|
|
97
|
+
*/
|
|
98
|
+
function validateStopBits(stopBits, driverMetadata) {
|
|
99
|
+
if (stopBits === undefined) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const supportedConfig = driverMetadata?.supportedConfig;
|
|
103
|
+
if (!isSerialConfig(supportedConfig) || !supportedConfig.validStopBits) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const validStopBits = supportedConfig.validStopBits;
|
|
107
|
+
if (!validStopBits.includes(stopBits)) {
|
|
108
|
+
const bitsList = validStopBits.join(', ');
|
|
109
|
+
const defaultConfig = driverMetadata?.defaultConfig;
|
|
110
|
+
const defaultBits = defaultConfig && 'stopBits' in defaultConfig ? defaultConfig.stopBits : undefined;
|
|
111
|
+
throw new errors_js_1.ValidationError(`Invalid stop bits ${stopBits}. This driver supports: ${bitsList}${defaultBits ? ` (default: ${defaultBits})` : ''}`, 'stopBits', stopBits, validStopBits);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Validate slave ID/address against driver constraints
|
|
116
|
+
*
|
|
117
|
+
* @param slaveId - User-specified slave ID
|
|
118
|
+
* @param driverMetadata - Loaded driver metadata
|
|
119
|
+
* @throws ValidationError if invalid
|
|
120
|
+
*/
|
|
121
|
+
function validateSlaveId(slaveId, driverMetadata) {
|
|
122
|
+
if (slaveId === undefined) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const supportedConfig = driverMetadata?.supportedConfig;
|
|
126
|
+
if (!isSerialConfig(supportedConfig) || !supportedConfig.validAddressRange) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const [min, max] = supportedConfig.validAddressRange;
|
|
130
|
+
if (slaveId < min || slaveId > max) {
|
|
131
|
+
const defaultConfig = driverMetadata?.defaultConfig;
|
|
132
|
+
const defaultAddress = defaultConfig && 'defaultAddress' in defaultConfig ? defaultConfig.defaultAddress : undefined;
|
|
133
|
+
throw new errors_js_1.ValidationError(`Invalid slave ID ${slaveId}. This driver supports: ${min}-${max}${defaultAddress ? ` (default: ${defaultAddress})` : ''}`, 'slaveId', slaveId, [min, max]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Validate all serial connection parameters
|
|
138
|
+
*
|
|
139
|
+
* Validates baudRate, parity, dataBits, stopBits, and slaveId against driver constraints.
|
|
140
|
+
*
|
|
141
|
+
* @param options - Connection options to validate
|
|
142
|
+
* @param driverMetadata - Loaded driver metadata
|
|
143
|
+
* @throws ValidationError if any parameter is invalid
|
|
144
|
+
*/
|
|
145
|
+
function validateSerialOptions(options, driverMetadata) {
|
|
146
|
+
validateBaudRate(options.baudRate, driverMetadata);
|
|
147
|
+
validateParity(options.parity, driverMetadata);
|
|
148
|
+
validateDataBits(options.dataBits, driverMetadata);
|
|
149
|
+
validateStopBits(options.stopBits, driverMetadata);
|
|
150
|
+
validateSlaveId(options.slaveId, driverMetadata);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=serial-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serial-validation.js","sourceRoot":"","sources":["../../../src/serial-validation.ts"],"names":[],"mappings":"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"}
|