@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.
Files changed (37) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +32 -2
  3. package/dist/cjs/src/driver-defaults.d.ts +63 -0
  4. package/dist/cjs/src/driver-defaults.d.ts.map +1 -0
  5. package/dist/cjs/src/driver-defaults.js +117 -0
  6. package/dist/cjs/src/driver-defaults.js.map +1 -0
  7. package/dist/cjs/src/errors.d.ts +8 -2
  8. package/dist/cjs/src/errors.d.ts.map +1 -1
  9. package/dist/cjs/src/errors.js +8 -2
  10. package/dist/cjs/src/errors.js.map +1 -1
  11. package/dist/cjs/src/index.d.ts +3 -0
  12. package/dist/cjs/src/index.d.ts.map +1 -1
  13. package/dist/cjs/src/index.js +6 -1
  14. package/dist/cjs/src/index.js.map +1 -1
  15. package/dist/cjs/src/serial-validation.d.ts +61 -0
  16. package/dist/cjs/src/serial-validation.d.ts.map +1 -0
  17. package/dist/cjs/src/serial-validation.js +152 -0
  18. package/dist/cjs/src/serial-validation.js.map +1 -0
  19. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  20. package/dist/esm/src/driver-defaults.d.ts +63 -0
  21. package/dist/esm/src/driver-defaults.d.ts.map +1 -0
  22. package/dist/esm/src/driver-defaults.js +111 -0
  23. package/dist/esm/src/driver-defaults.js.map +1 -0
  24. package/dist/esm/src/errors.d.ts +8 -2
  25. package/dist/esm/src/errors.d.ts.map +1 -1
  26. package/dist/esm/src/errors.js +8 -2
  27. package/dist/esm/src/errors.js.map +1 -1
  28. package/dist/esm/src/index.d.ts +3 -0
  29. package/dist/esm/src/index.d.ts.map +1 -1
  30. package/dist/esm/src/index.js +2 -0
  31. package/dist/esm/src/index.js.map +1 -1
  32. package/dist/esm/src/serial-validation.d.ts +61 -0
  33. package/dist/esm/src/serial-validation.d.ts.map +1 -0
  34. package/dist/esm/src/serial-validation.js +144 -0
  35. package/dist/esm/src/serial-validation.js.map +1 -0
  36. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  37. package/package.json +2 -2
@@ -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,111 @@
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
+ /**
6
+ * Get the effective default config for a device
7
+ *
8
+ * Returns device-specific config if available, otherwise driver-level config.
9
+ *
10
+ * @param driverMetadata - Loaded driver metadata
11
+ * @param device - Optional device key
12
+ * @returns Effective default config or undefined
13
+ */
14
+ export function getEffectiveDefaultConfig(driverMetadata, device) {
15
+ if (!driverMetadata) {
16
+ return undefined;
17
+ }
18
+ // Check for device-specific config first
19
+ if (device && driverMetadata.devices?.[device]?.defaultConfig) {
20
+ const deviceConfig = driverMetadata.devices[device].defaultConfig;
21
+ if (deviceConfig && 'baudRate' in deviceConfig) {
22
+ return deviceConfig;
23
+ }
24
+ }
25
+ // Fall back to driver-level config
26
+ const driverConfig = driverMetadata.defaultConfig;
27
+ if (driverConfig && 'baudRate' in driverConfig) {
28
+ return driverConfig;
29
+ }
30
+ return undefined;
31
+ }
32
+ /**
33
+ * Get the effective supported config for a device
34
+ *
35
+ * Returns device-specific constraints if available, otherwise driver-level constraints.
36
+ *
37
+ * @param driverMetadata - Loaded driver metadata
38
+ * @param device - Optional device key
39
+ * @returns Effective supported config or undefined
40
+ */
41
+ export function getEffectiveSupportedConfig(driverMetadata, device) {
42
+ if (!driverMetadata) {
43
+ return undefined;
44
+ }
45
+ // Check for device-specific config first
46
+ if (device && driverMetadata.devices?.[device]?.supportedConfig) {
47
+ return driverMetadata.devices[device].supportedConfig;
48
+ }
49
+ // Fall back to driver-level config
50
+ return driverMetadata.supportedConfig;
51
+ }
52
+ /**
53
+ * Create an effective driver metadata with device-specific configs resolved
54
+ *
55
+ * This creates a view of the driver metadata where defaultConfig and supportedConfig
56
+ * are resolved based on the selected device. This allows validation and other
57
+ * functions to work with device-specific settings transparently.
58
+ *
59
+ * @param driverMetadata - Loaded driver metadata
60
+ * @param device - Optional device key
61
+ * @returns Driver metadata with effective configs for the selected device
62
+ */
63
+ export function getEffectiveDriverMetadata(driverMetadata, device) {
64
+ const effectiveDefaultConfig = getEffectiveDefaultConfig(driverMetadata, device);
65
+ const effectiveSupportedConfig = getEffectiveSupportedConfig(driverMetadata, device);
66
+ // Build result conditionally to satisfy exactOptionalPropertyTypes
67
+ const result = {
68
+ createDriver: driverMetadata.createDriver,
69
+ };
70
+ if (driverMetadata.devices) {
71
+ result.devices = driverMetadata.devices;
72
+ }
73
+ if (effectiveDefaultConfig) {
74
+ result.defaultConfig = effectiveDefaultConfig;
75
+ }
76
+ if (effectiveSupportedConfig) {
77
+ result.supportedConfig = effectiveSupportedConfig;
78
+ }
79
+ return result;
80
+ }
81
+ /**
82
+ * Apply driver defaults to transport options
83
+ *
84
+ * Uses device-specific defaults if a device is selected, otherwise driver-level defaults.
85
+ *
86
+ * @param options - Transport options (may be incomplete)
87
+ * @param driverMetadata - Loaded driver metadata with defaults
88
+ * @param device - Optional device key for multi-device drivers
89
+ * @returns Transport options with defaults applied
90
+ */
91
+ export function applyDriverDefaults(options, driverMetadata, device) {
92
+ // For TCP connections, no serial defaults apply
93
+ if (options.host) {
94
+ return options;
95
+ }
96
+ // Get effective config (device-specific or driver-level)
97
+ const defaultConfig = getEffectiveDefaultConfig(driverMetadata, device);
98
+ if (!defaultConfig) {
99
+ return options;
100
+ }
101
+ // Apply defaults for unspecified options
102
+ return {
103
+ ...options,
104
+ baudRate: options.baudRate ?? defaultConfig.baudRate,
105
+ dataBits: options.dataBits ?? defaultConfig.dataBits,
106
+ stopBits: options.stopBits ?? defaultConfig.stopBits,
107
+ parity: options.parity ?? defaultConfig.parity,
108
+ slaveId: options.slaveId ?? defaultConfig.defaultAddress,
109
+ };
110
+ }
111
+ //# sourceMappingURL=driver-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-defaults.js","sourceRoot":"","sources":["../../../src/driver-defaults.ts"],"names":[],"mappings":"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"}
@@ -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
- constructor(message: string, field?: string | undefined);
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;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,KAAK,CAAC,EAAE,MAAM;gBAD9B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,MAAM,YAAA;CAMjC;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"}
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"}
@@ -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
@@ -22,9 +26,11 @@
22
26
  * ```
23
27
  */
24
28
  export class ValidationError extends Error {
25
- constructor(message, field) {
29
+ constructor(message, field, value, validValues) {
26
30
  super(message);
27
31
  this.field = field;
32
+ this.value = value;
33
+ this.validValues = validValues;
28
34
  this.name = 'ValidationError';
29
35
  Object.setPrototypeOf(this, ValidationError.prototype);
30
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YACE,OAAe,EACC,KAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,UAAK,GAAL,KAAK,CAAS;QAG9B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACxD,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,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;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,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;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,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;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,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;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,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;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,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"}
@@ -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"}
@@ -1,5 +1,7 @@
1
1
  export { loadDriver, clearDriverCache, getDriverCacheStats } from './loader.js';
2
2
  export { validateDefaultConfig, validateSupportedConfig, validateDevices, crossValidateConfigs, } from './config-validator.js';
3
+ export { applyDriverDefaults, getEffectiveDriverMetadata } from './driver-defaults.js';
4
+ export { validateSerialOptions } from './serial-validation.js';
3
5
  export { DRIVER_PACKAGE_NAME_RULE, assertValidDriverPackageName, isValidDriverPackageName, } from './driver-package-name.js';
4
6
  export { ValidationError, DriverNotFoundError, DriverNotBuiltError, PackageJsonError, } from './errors.js';
5
7
  export { getCallerPackageInfo } from './package-info.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAQ/E,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAQ/E,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AAEtF,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"}
@@ -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,144 @@
1
+ /**
2
+ * Validation of serial connection options against a driver's SUPPORTED_CONFIG
3
+ */
4
+ import { ValidationError } from './errors.js';
5
+ /**
6
+ * Check if config is a serial config (has validBaudRates)
7
+ */
8
+ function isSerialConfig(config) {
9
+ return (config !== null &&
10
+ config !== undefined &&
11
+ typeof config === 'object' &&
12
+ 'validBaudRates' in config);
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 function validateBaudRate(baudRate, driverMetadata) {
22
+ if (baudRate === undefined) {
23
+ return; // No validation needed if not specified
24
+ }
25
+ const supportedConfig = driverMetadata?.supportedConfig;
26
+ if (!isSerialConfig(supportedConfig) || !supportedConfig.validBaudRates) {
27
+ return; // No driver-specific constraints
28
+ }
29
+ const validRates = supportedConfig.validBaudRates;
30
+ if (!validRates.includes(baudRate)) {
31
+ const rateList = validRates.join(', ');
32
+ const defaultConfig = driverMetadata?.defaultConfig;
33
+ const defaultRate = defaultConfig && 'baudRate' in defaultConfig ? defaultConfig.baudRate : undefined;
34
+ throw new ValidationError(`Invalid baud rate ${baudRate}. This driver supports: ${rateList}${defaultRate ? ` (default: ${defaultRate})` : ''}`, 'baudRate', baudRate, validRates);
35
+ }
36
+ }
37
+ /**
38
+ * Validate parity against driver constraints
39
+ *
40
+ * @param parity - User-specified parity
41
+ * @param driverMetadata - Loaded driver metadata
42
+ * @throws ValidationError if invalid
43
+ */
44
+ export function validateParity(parity, driverMetadata) {
45
+ if (parity === undefined) {
46
+ return;
47
+ }
48
+ const supportedConfig = driverMetadata?.supportedConfig;
49
+ if (!isSerialConfig(supportedConfig) || !supportedConfig.validParity) {
50
+ return;
51
+ }
52
+ const validParity = supportedConfig.validParity;
53
+ if (!validParity.includes(parity)) {
54
+ const parityList = validParity.join(', ');
55
+ const defaultConfig = driverMetadata?.defaultConfig;
56
+ const defaultParity = defaultConfig && 'parity' in defaultConfig ? defaultConfig.parity : undefined;
57
+ throw new ValidationError(`Invalid parity '${parity}'. This driver supports: ${parityList}${defaultParity ? ` (default: ${defaultParity})` : ''}`, 'parity', parity, validParity);
58
+ }
59
+ }
60
+ /**
61
+ * Validate data bits against driver constraints
62
+ *
63
+ * @param dataBits - User-specified data bits
64
+ * @param driverMetadata - Loaded driver metadata
65
+ * @throws ValidationError if invalid
66
+ */
67
+ export function validateDataBits(dataBits, driverMetadata) {
68
+ if (dataBits === undefined) {
69
+ return;
70
+ }
71
+ const supportedConfig = driverMetadata?.supportedConfig;
72
+ if (!isSerialConfig(supportedConfig) || !supportedConfig.validDataBits) {
73
+ return;
74
+ }
75
+ const validDataBits = supportedConfig.validDataBits;
76
+ if (!validDataBits.includes(dataBits)) {
77
+ const bitsList = validDataBits.join(', ');
78
+ const defaultConfig = driverMetadata?.defaultConfig;
79
+ const defaultBits = defaultConfig && 'dataBits' in defaultConfig ? defaultConfig.dataBits : undefined;
80
+ throw new ValidationError(`Invalid data bits ${dataBits}. This driver supports: ${bitsList}${defaultBits ? ` (default: ${defaultBits})` : ''}`, 'dataBits', dataBits, validDataBits);
81
+ }
82
+ }
83
+ /**
84
+ * Validate stop bits against driver constraints
85
+ *
86
+ * @param stopBits - User-specified stop bits
87
+ * @param driverMetadata - Loaded driver metadata
88
+ * @throws ValidationError if invalid
89
+ */
90
+ export function validateStopBits(stopBits, driverMetadata) {
91
+ if (stopBits === undefined) {
92
+ return;
93
+ }
94
+ const supportedConfig = driverMetadata?.supportedConfig;
95
+ if (!isSerialConfig(supportedConfig) || !supportedConfig.validStopBits) {
96
+ return;
97
+ }
98
+ const validStopBits = supportedConfig.validStopBits;
99
+ if (!validStopBits.includes(stopBits)) {
100
+ const bitsList = validStopBits.join(', ');
101
+ const defaultConfig = driverMetadata?.defaultConfig;
102
+ const defaultBits = defaultConfig && 'stopBits' in defaultConfig ? defaultConfig.stopBits : undefined;
103
+ throw new ValidationError(`Invalid stop bits ${stopBits}. This driver supports: ${bitsList}${defaultBits ? ` (default: ${defaultBits})` : ''}`, 'stopBits', stopBits, validStopBits);
104
+ }
105
+ }
106
+ /**
107
+ * Validate slave ID/address against driver constraints
108
+ *
109
+ * @param slaveId - User-specified slave ID
110
+ * @param driverMetadata - Loaded driver metadata
111
+ * @throws ValidationError if invalid
112
+ */
113
+ export function validateSlaveId(slaveId, driverMetadata) {
114
+ if (slaveId === undefined) {
115
+ return;
116
+ }
117
+ const supportedConfig = driverMetadata?.supportedConfig;
118
+ if (!isSerialConfig(supportedConfig) || !supportedConfig.validAddressRange) {
119
+ return;
120
+ }
121
+ const [min, max] = supportedConfig.validAddressRange;
122
+ if (slaveId < min || slaveId > max) {
123
+ const defaultConfig = driverMetadata?.defaultConfig;
124
+ const defaultAddress = defaultConfig && 'defaultAddress' in defaultConfig ? defaultConfig.defaultAddress : undefined;
125
+ throw new ValidationError(`Invalid slave ID ${slaveId}. This driver supports: ${min}-${max}${defaultAddress ? ` (default: ${defaultAddress})` : ''}`, 'slaveId', slaveId, [min, max]);
126
+ }
127
+ }
128
+ /**
129
+ * Validate all serial connection parameters
130
+ *
131
+ * Validates baudRate, parity, dataBits, stopBits, and slaveId against driver constraints.
132
+ *
133
+ * @param options - Connection options to validate
134
+ * @param driverMetadata - Loaded driver metadata
135
+ * @throws ValidationError if any parameter is invalid
136
+ */
137
+ export function validateSerialOptions(options, driverMetadata) {
138
+ validateBaudRate(options.baudRate, driverMetadata);
139
+ validateParity(options.parity, driverMetadata);
140
+ validateDataBits(options.dataBits, driverMetadata);
141
+ validateStopBits(options.stopBits, driverMetadata);
142
+ validateSlaveId(options.slaveId, driverMetadata);
143
+ }
144
+ //# 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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"}