@ya-modbus/driver-loader 0.9.0 → 0.10.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 +6 -0
- package/README.md +31 -8
- package/dist/cjs/src/driver-import.d.ts +19 -0
- package/dist/cjs/src/driver-import.d.ts.map +1 -0
- package/dist/cjs/src/driver-import.js +34 -0
- package/dist/cjs/src/driver-import.js.map +1 -0
- package/dist/cjs/src/driver-name.d.ts +11 -0
- package/dist/cjs/src/driver-name.d.ts.map +1 -0
- package/dist/cjs/src/driver-name.js +21 -0
- package/dist/cjs/src/driver-name.js.map +1 -0
- package/dist/cjs/src/errors.d.ts +9 -3
- package/dist/cjs/src/errors.d.ts.map +1 -1
- package/dist/cjs/src/errors.js +10 -4
- package/dist/cjs/src/errors.js.map +1 -1
- package/dist/cjs/src/loader.d.ts +3 -0
- package/dist/cjs/src/loader.d.ts.map +1 -1
- package/dist/cjs/src/loader.js +12 -11
- package/dist/cjs/src/loader.js.map +1 -1
- package/dist/cjs/src/module-errors.d.ts +9 -0
- package/dist/cjs/src/module-errors.d.ts.map +1 -0
- package/dist/cjs/src/module-errors.js +22 -0
- package/dist/cjs/src/module-errors.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/driver-import.d.ts +19 -0
- package/dist/esm/src/driver-import.d.ts.map +1 -0
- package/dist/esm/src/driver-import.js +31 -0
- package/dist/esm/src/driver-import.js.map +1 -0
- package/dist/esm/src/driver-name.d.ts +11 -0
- package/dist/esm/src/driver-name.d.ts.map +1 -0
- package/dist/esm/src/driver-name.js +18 -0
- package/dist/esm/src/driver-name.js.map +1 -0
- package/dist/esm/src/errors.d.ts +9 -3
- package/dist/esm/src/errors.d.ts.map +1 -1
- package/dist/esm/src/errors.js +10 -4
- package/dist/esm/src/errors.js.map +1 -1
- package/dist/esm/src/loader.d.ts +3 -0
- package/dist/esm/src/loader.d.ts.map +1 -1
- package/dist/esm/src/loader.js +12 -11
- package/dist/esm/src/loader.js.map +1 -1
- package/dist/esm/src/module-errors.d.ts +9 -0
- package/dist/esm/src/module-errors.d.ts.map +1 -0
- package/dist/esm/src/module-errors.js +19 -0
- package/dist/esm/src/module-errors.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
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.10.0](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/driver-loader@0.9.0...@ya-modbus/driver-loader@0.10.0) (2026-10-12)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **driver-loader:** resolve short driver names ([#580](https://github.com/groupsky/ya-modbus/issues/580)) ([1050ab8](https://github.com/groupsky/ya-modbus/commit/1050ab8cb51d73826bf72eb2a10a31bffc98d8a7)), closes [#151](https://github.com/groupsky/ya-modbus/issues/151)
|
|
11
|
+
|
|
6
12
|
# [0.9.0](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/driver-loader@0.8.1...@ya-modbus/driver-loader@0.9.0) (2026-10-12)
|
|
7
13
|
|
|
8
14
|
### Features
|
package/README.md
CHANGED
|
@@ -26,6 +26,21 @@ import { loadDriver } from '@ya-modbus/driver-loader'
|
|
|
26
26
|
const driver = await loadDriver({ driverPackage: '@ya-modbus/driver-xymd1' })
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
### Load a driver by short name
|
|
30
|
+
|
|
31
|
+
A plain lowercase name such as `xymd1` is a short name. The loader tries these packages in order and uses the first one that is installed:
|
|
32
|
+
|
|
33
|
+
1. `@ya-modbus/driver-<name>`
|
|
34
|
+
2. `ya-modbus-driver-<name>`
|
|
35
|
+
3. `<name>`, the name as given
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
// Loads @ya-modbus/driver-xymd1
|
|
39
|
+
const driver = await loadDriver({ driverPackage: 'xymd1' })
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Anything else (scoped names, `ya-modbus-driver-*` names, paths) is used as given. If a candidate package is installed but fails to load, the search stops there and the `DriverNotFoundError` message shows the load error (the original error is its `cause`), so a later candidate does not hide it. If no candidate is installed, the message lists every package that was tried, and `packageName` is the preferred one (`@ya-modbus/driver-<name>`).
|
|
43
|
+
|
|
29
44
|
### Error Handling
|
|
30
45
|
|
|
31
46
|
The driver-loader exports custom error classes for type-safe error handling:
|
|
@@ -43,8 +58,13 @@ try {
|
|
|
43
58
|
} catch (error) {
|
|
44
59
|
// Type-safe error handling with instanceof
|
|
45
60
|
if (error instanceof DriverNotFoundError) {
|
|
46
|
-
|
|
47
|
-
|
|
61
|
+
if (error.cause) {
|
|
62
|
+
// The package is installed but failed to load
|
|
63
|
+
console.error(`Failed to load ${error.packageName}:`, error.cause)
|
|
64
|
+
} else {
|
|
65
|
+
console.error(`Package not found: ${error.packageName}`)
|
|
66
|
+
console.error(`Install with: npm install ${error.packageName}`)
|
|
67
|
+
}
|
|
48
68
|
} else if (error instanceof ValidationError) {
|
|
49
69
|
console.error(`Validation failed for field: ${error.field}`)
|
|
50
70
|
console.error(`Error: ${error.message}`)
|
|
@@ -63,8 +83,9 @@ try {
|
|
|
63
83
|
- Example: Invalid DEFAULT_CONFIG, missing createDriver function
|
|
64
84
|
|
|
65
85
|
- **`DriverNotFoundError`**: Driver package not found or cannot be loaded
|
|
66
|
-
- `packageName: string` - The package that
|
|
67
|
-
-
|
|
86
|
+
- `packageName: string` - The package that could not be found or loaded. For a package that is not installed this is the package to install
|
|
87
|
+
- `cause?: unknown` - Set when the package is installed but fails to load: the original error
|
|
88
|
+
- Example: Package not installed, wrong package name, syntax error in the driver
|
|
68
89
|
|
|
69
90
|
- **`PackageJsonError`**: package.json not found or invalid
|
|
70
91
|
- Example: Missing package.json, invalid JSON, missing ya-modbus-driver keyword
|
|
@@ -95,7 +116,7 @@ Loads a ya-modbus driver package and validates its exports.
|
|
|
95
116
|
|
|
96
117
|
**Options:**
|
|
97
118
|
|
|
98
|
-
- `driverPackage` (optional): Name of the driver package to load
|
|
119
|
+
- `driverPackage` (optional): Name of the driver package to load, or a short name such as `xymd1`. If omitted, auto-detects from current directory's package.json.
|
|
99
120
|
|
|
100
121
|
**Returns:**
|
|
101
122
|
|
|
@@ -148,7 +169,7 @@ Returns cache statistics including hits, misses, and current cache size.
|
|
|
148
169
|
**Cache Behavior:**
|
|
149
170
|
|
|
150
171
|
- **Automatic caching:** Drivers are cached by package name after first load
|
|
151
|
-
- **Cache key:**
|
|
172
|
+
- **Cache key:** Name of the package that was loaded (e.g., '@ya-modbus/driver-xymd1'). A short name and the full name share one entry. If two candidates of a short name are installed, a candidate that was loaded earlier in the process is returned
|
|
152
173
|
- **Cache lifetime:** Persists for the lifetime of the Node.js process
|
|
153
174
|
- **Auto-detect mode:** Even auto-detected drivers are cached by their package name
|
|
154
175
|
- **No cache on errors:** Failed loads are not cached, allowing retry
|
|
@@ -267,19 +288,21 @@ If you encounter `Driver package not found` errors:
|
|
|
267
288
|
1. **Verify the package is installed:**
|
|
268
289
|
|
|
269
290
|
```bash
|
|
270
|
-
npm list ya-modbus
|
|
291
|
+
npm list @ya-modbus/driver-<name>
|
|
271
292
|
```
|
|
272
293
|
|
|
273
294
|
2. **Install the driver package:**
|
|
274
295
|
|
|
275
296
|
```bash
|
|
276
|
-
npm install ya-modbus
|
|
297
|
+
npm install @ya-modbus/driver-<name>
|
|
277
298
|
```
|
|
278
299
|
|
|
279
300
|
3. **Check the package name:**
|
|
280
301
|
- Ensure the package name in your code matches the actual npm package name
|
|
281
302
|
- Driver packages follow the naming rule described under `isValidDriverPackageName` (for example `ya-modbus-driver-<device>` or `@<scope>/ya-modbus-driver-<device>`)
|
|
282
303
|
|
|
304
|
+
If the message starts with `Failed to load driver package`, the package is installed but its code failed to load. Read the reason in the message (or `error.cause`) instead of reinstalling.
|
|
305
|
+
|
|
283
306
|
### Module Resolution Issues
|
|
284
307
|
|
|
285
308
|
If TypeScript or Node.js can't find `@ya-modbus/driver-loader`:
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DriverPackageCandidates } from './driver-name.js';
|
|
2
|
+
import type { SystemDependencies } from './loader.js';
|
|
3
|
+
/**
|
|
4
|
+
* Import the first installed package of a list of candidates
|
|
5
|
+
*
|
|
6
|
+
* Moves on to the next candidate only when the package is not installed. A package that
|
|
7
|
+
* is installed but fails to load stops the search, so its error is not replaced by a later one.
|
|
8
|
+
*
|
|
9
|
+
* @param name - Driver name as given by the user
|
|
10
|
+
* @param candidates - Package names to try, in order
|
|
11
|
+
* @param deps - System dependencies
|
|
12
|
+
* @returns The imported module and the name of the package it came from
|
|
13
|
+
* @throws DriverNotFoundError if no candidate is installed or the installed one fails to load
|
|
14
|
+
*/
|
|
15
|
+
export declare function importDriverPackage(name: string, candidates: DriverPackageCandidates, deps: Pick<SystemDependencies, 'importModule'>): Promise<{
|
|
16
|
+
packageName: string;
|
|
17
|
+
driverModule: unknown;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=driver-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-import.d.ts","sourceRoot":"","sources":["../../../src/driver-import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,uBAAuB,EACnC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,GAC7C,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CAsBzD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.importDriverPackage = importDriverPackage;
|
|
4
|
+
const errors_js_1 = require("./errors.js");
|
|
5
|
+
const module_errors_js_1 = require("./module-errors.js");
|
|
6
|
+
/**
|
|
7
|
+
* Import the first installed package of a list of candidates
|
|
8
|
+
*
|
|
9
|
+
* Moves on to the next candidate only when the package is not installed. A package that
|
|
10
|
+
* is installed but fails to load stops the search, so its error is not replaced by a later one.
|
|
11
|
+
*
|
|
12
|
+
* @param name - Driver name as given by the user
|
|
13
|
+
* @param candidates - Package names to try, in order
|
|
14
|
+
* @param deps - System dependencies
|
|
15
|
+
* @returns The imported module and the name of the package it came from
|
|
16
|
+
* @throws DriverNotFoundError if no candidate is installed or the installed one fails to load
|
|
17
|
+
*/
|
|
18
|
+
async function importDriverPackage(name, candidates, deps) {
|
|
19
|
+
for (const packageName of candidates) {
|
|
20
|
+
try {
|
|
21
|
+
return { packageName, driverModule: await deps.importModule(packageName) };
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (!(0, module_errors_js_1.isMissingPackageError)(error, packageName)) {
|
|
25
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
26
|
+
throw new errors_js_1.DriverNotFoundError(`Failed to load driver package ${packageName}: ${reason}`, packageName, { cause: error });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const [preferred] = candidates;
|
|
31
|
+
const tried = candidates.length > 1 ? `\nTried: ${candidates.join(', ')}` : '';
|
|
32
|
+
throw new errors_js_1.DriverNotFoundError(`Driver package not found: ${name}${tried}\nInstall it with: npm install ${preferred}`, preferred);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=driver-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-import.js","sourceRoot":"","sources":["../../../src/driver-import.ts"],"names":[],"mappings":";;AAiBA,kDA0BC;AA1CD,2CAAiD;AAEjD,yDAA0D;AAE1D;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,UAAmC,EACnC,IAA8C;IAE9C,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAA;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAA,wCAAqB,EAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACrE,MAAM,IAAI,+BAAmB,CAC3B,iCAAiC,WAAW,KAAK,MAAM,EAAE,EACzD,WAAW,EACX,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAA;IAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9E,MAAM,IAAI,+BAAmB,CAC3B,6BAA6B,IAAI,GAAG,KAAK,kCAAkC,SAAS,EAAE,EACtF,SAAS,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Package names to try, in order; never empty */
|
|
2
|
+
export type DriverPackageCandidates = [string, ...string[]];
|
|
3
|
+
/**
|
|
4
|
+
* Packages to try, in order, for a driver name given by the user
|
|
5
|
+
*
|
|
6
|
+
* A short name such as `xymd1` stands for `@ya-modbus/driver-xymd1`, then
|
|
7
|
+
* `ya-modbus-driver-xymd1`, then a package called `xymd1`. Anything else is a full
|
|
8
|
+
* package name or a path and is used as given.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getDriverPackageCandidates(name: string): DriverPackageCandidates;
|
|
11
|
+
//# sourceMappingURL=driver-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-name.d.ts","sourceRoot":"","sources":["../../../src/driver-name.ts"],"names":[],"mappings":"AAMA,kDAAkD;AAClD,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;AAE3D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAMhF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDriverPackageCandidates = getDriverPackageCandidates;
|
|
4
|
+
const SCOPED_PREFIX = '@ya-modbus/driver-';
|
|
5
|
+
const UNSCOPED_PREFIX = 'ya-modbus-driver-';
|
|
6
|
+
/** An unscoped npm package name that is not already a full driver package name */
|
|
7
|
+
const SHORT_NAME = /^[a-z0-9][a-z0-9._-]*$/;
|
|
8
|
+
/**
|
|
9
|
+
* Packages to try, in order, for a driver name given by the user
|
|
10
|
+
*
|
|
11
|
+
* A short name such as `xymd1` stands for `@ya-modbus/driver-xymd1`, then
|
|
12
|
+
* `ya-modbus-driver-xymd1`, then a package called `xymd1`. Anything else is a full
|
|
13
|
+
* package name or a path and is used as given.
|
|
14
|
+
*/
|
|
15
|
+
function getDriverPackageCandidates(name) {
|
|
16
|
+
if (!SHORT_NAME.test(name) || name.startsWith(UNSCOPED_PREFIX)) {
|
|
17
|
+
return [name];
|
|
18
|
+
}
|
|
19
|
+
return [`${SCOPED_PREFIX}${name}`, `${UNSCOPED_PREFIX}${name}`, name];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=driver-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-name.js","sourceRoot":"","sources":["../../../src/driver-name.ts"],"names":[],"mappings":";;AAgBA,gEAMC;AAtBD,MAAM,aAAa,GAAG,oBAAoB,CAAA;AAC1C,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAE3C,kFAAkF;AAClF,MAAM,UAAU,GAAG,wBAAwB,CAAA;AAK3C;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,IAAY;IACrD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;IAED,OAAO,CAAC,GAAG,aAAa,GAAG,IAAI,EAAE,EAAE,GAAG,eAAe,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;AACvE,CAAC"}
|
package/dist/cjs/src/errors.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ export declare class ValidationError extends Error {
|
|
|
28
28
|
/**
|
|
29
29
|
* Error thrown when a driver package cannot be found or loaded
|
|
30
30
|
*
|
|
31
|
+
* `cause` is set when the package is installed but fails to load.
|
|
32
|
+
*
|
|
31
33
|
* @example
|
|
32
34
|
* ```typescript
|
|
33
35
|
* import { loadDriver, DriverNotFoundError } from '@ya-modbus/driver-loader'
|
|
@@ -36,15 +38,19 @@ export declare class ValidationError extends Error {
|
|
|
36
38
|
* await loadDriver({ driverPackage: 'missing-driver' })
|
|
37
39
|
* } catch (error) {
|
|
38
40
|
* if (error instanceof DriverNotFoundError) {
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
+
* if (error.cause) {
|
|
42
|
+
* console.error(`Failed to load ${error.packageName}:`, error.cause)
|
|
43
|
+
* } else {
|
|
44
|
+
* console.error(`Package not found: ${error.packageName}`)
|
|
45
|
+
* console.error(`Install with: npm install ${error.packageName}`)
|
|
46
|
+
* }
|
|
41
47
|
* }
|
|
42
48
|
* }
|
|
43
49
|
* ```
|
|
44
50
|
*/
|
|
45
51
|
export declare class DriverNotFoundError extends Error {
|
|
46
52
|
readonly packageName: string;
|
|
47
|
-
constructor(message: string, packageName: string);
|
|
53
|
+
constructor(message: string, packageName: string, options?: ErrorOptions);
|
|
48
54
|
}
|
|
49
55
|
/**
|
|
50
56
|
* Error thrown when package.json is not found or invalid
|
|
@@ -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
|
|
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;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAK5B"}
|
package/dist/cjs/src/errors.js
CHANGED
|
@@ -36,6 +36,8 @@ exports.ValidationError = ValidationError;
|
|
|
36
36
|
/**
|
|
37
37
|
* Error thrown when a driver package cannot be found or loaded
|
|
38
38
|
*
|
|
39
|
+
* `cause` is set when the package is installed but fails to load.
|
|
40
|
+
*
|
|
39
41
|
* @example
|
|
40
42
|
* ```typescript
|
|
41
43
|
* import { loadDriver, DriverNotFoundError } from '@ya-modbus/driver-loader'
|
|
@@ -44,15 +46,19 @@ exports.ValidationError = ValidationError;
|
|
|
44
46
|
* await loadDriver({ driverPackage: 'missing-driver' })
|
|
45
47
|
* } catch (error) {
|
|
46
48
|
* if (error instanceof DriverNotFoundError) {
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
+
* if (error.cause) {
|
|
50
|
+
* console.error(`Failed to load ${error.packageName}:`, error.cause)
|
|
51
|
+
* } else {
|
|
52
|
+
* console.error(`Package not found: ${error.packageName}`)
|
|
53
|
+
* console.error(`Install with: npm install ${error.packageName}`)
|
|
54
|
+
* }
|
|
49
55
|
* }
|
|
50
56
|
* }
|
|
51
57
|
* ```
|
|
52
58
|
*/
|
|
53
59
|
class DriverNotFoundError extends Error {
|
|
54
|
-
constructor(message, packageName) {
|
|
55
|
-
super(message);
|
|
60
|
+
constructor(message, packageName, options) {
|
|
61
|
+
super(message, options);
|
|
56
62
|
this.packageName = packageName;
|
|
57
63
|
this.name = 'DriverNotFoundError';
|
|
58
64
|
Object.setPrototypeOf(this, DriverNotFoundError.prototype);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,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;AATD,0CASC;AAED
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,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;AATD,0CASC;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;;;;;;;;;;;;;;;;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/loader.d.ts
CHANGED
|
@@ -60,6 +60,9 @@ export interface LoadDriverOptions {
|
|
|
60
60
|
/**
|
|
61
61
|
* Explicit driver package name
|
|
62
62
|
* e.g., 'ya-modbus-driver-xymd1' or '@org/ya-modbus-driver-xymd1'
|
|
63
|
+
*
|
|
64
|
+
* A short name such as 'xymd1' is tried as '@ya-modbus/driver-xymd1',
|
|
65
|
+
* then 'ya-modbus-driver-xymd1', then 'xymd1'.
|
|
63
66
|
*/
|
|
64
67
|
driverPackage?: string;
|
|
65
68
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,yBAAyB,CAAA;AAahC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,YAAY,EAAE,oBAAoB,CAAA;IAElC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB,mEAAmE;IACnE,aAAa,CAAC,EAAE,aAAa,CAAA;IAE7B,kEAAkE;IAClE,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,MAAM;IACrB,2BAA2B;IAC3B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,oCAAoC;IACpC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9D,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACtD,MAAM,EAAE,MAAM,MAAM,CAAA;CACrB;AAeD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;CACb;AAeD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAMtD;AAwED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,iBAAsB,EAC/B,IAAI,GAAE,kBAAgC,GACrC,OAAO,CAAC,YAAY,CAAC,CAmHvB"}
|
package/dist/cjs/src/loader.js
CHANGED
|
@@ -39,6 +39,8 @@ exports.loadDriver = loadDriver;
|
|
|
39
39
|
const promises_1 = require("fs/promises");
|
|
40
40
|
const path_1 = require("path");
|
|
41
41
|
const config_validator_js_1 = require("./config-validator.js");
|
|
42
|
+
const driver_import_js_1 = require("./driver-import.js");
|
|
43
|
+
const driver_name_js_1 = require("./driver-name.js");
|
|
42
44
|
const errors_js_1 = require("./errors.js");
|
|
43
45
|
/**
|
|
44
46
|
* Default system dependencies using Node.js built-ins
|
|
@@ -165,19 +167,18 @@ async function loadDriver(options = {}, deps = defaultDeps) {
|
|
|
165
167
|
let packageName;
|
|
166
168
|
let driverModule;
|
|
167
169
|
if (driverPackage) {
|
|
168
|
-
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
const candidates = (0, driver_name_js_1.getDriverPackageCandidates)(driverPackage);
|
|
171
|
+
for (const candidate of candidates) {
|
|
172
|
+
const cached = driverCache.get(candidate);
|
|
173
|
+
if (cached) {
|
|
174
|
+
cacheStats.hits++;
|
|
175
|
+
return cached;
|
|
176
|
+
}
|
|
173
177
|
}
|
|
174
178
|
cacheStats.misses++;
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
catch {
|
|
179
|
-
throw new errors_js_1.DriverNotFoundError(`Driver package not found: ${driverPackage}\nInstall it with: npm install ${driverPackage}`, driverPackage);
|
|
180
|
-
}
|
|
179
|
+
const imported = await (0, driver_import_js_1.importDriverPackage)(driverPackage, candidates, deps);
|
|
180
|
+
packageName = imported.packageName;
|
|
181
|
+
driverModule = imported.driverModule;
|
|
181
182
|
}
|
|
182
183
|
else {
|
|
183
184
|
packageName = await detectLocalPackage(deps);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if an import failed because the package itself is not installed
|
|
3
|
+
*
|
|
4
|
+
* A package that is installed but fails to load (syntax error, missing dependency)
|
|
5
|
+
* is not reported as missing, so the real problem is not hidden by a later candidate.
|
|
6
|
+
* Node names the package in quotes, in both the ESM and the CommonJS wording.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isMissingPackageError(error: unknown, packageName: string): boolean;
|
|
9
|
+
//# sourceMappingURL=module-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-errors.d.ts","sourceRoot":"","sources":["../../../src/module-errors.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAYlF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isMissingPackageError = isMissingPackageError;
|
|
4
|
+
const NOT_FOUND_CODES = new Set(['ERR_MODULE_NOT_FOUND', 'MODULE_NOT_FOUND']);
|
|
5
|
+
/**
|
|
6
|
+
* Check if an import failed because the package itself is not installed
|
|
7
|
+
*
|
|
8
|
+
* A package that is installed but fails to load (syntax error, missing dependency)
|
|
9
|
+
* is not reported as missing, so the real problem is not hidden by a later candidate.
|
|
10
|
+
* Node names the package in quotes, in both the ESM and the CommonJS wording.
|
|
11
|
+
*/
|
|
12
|
+
function isMissingPackageError(error, packageName) {
|
|
13
|
+
if (typeof error !== 'object' || error === null) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const { code, message } = error;
|
|
17
|
+
return (typeof code === 'string' &&
|
|
18
|
+
NOT_FOUND_CODES.has(code) &&
|
|
19
|
+
typeof message === 'string' &&
|
|
20
|
+
message.includes(`'${packageName}'`));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=module-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-errors.js","sourceRoot":"","sources":["../../../src/module-errors.ts"],"names":[],"mappings":";;AASA,sDAYC;AArBD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAC,CAAA;AAE7E;;;;;;GAMG;AACH,SAAgB,qBAAqB,CAAC,KAAc,EAAE,WAAmB;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAA8C,CAAA;IACxE,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,WAAW,GAAG,CAAC,CACrC,CAAA;AACH,CAAC"}
|