@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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DriverNotFoundError } from './errors.js';
|
|
2
|
+
import { isMissingPackageError } from './module-errors.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 async function importDriverPackage(name, candidates, deps) {
|
|
16
|
+
for (const packageName of candidates) {
|
|
17
|
+
try {
|
|
18
|
+
return { packageName, driverModule: await deps.importModule(packageName) };
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (!isMissingPackageError(error, packageName)) {
|
|
22
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
23
|
+
throw new DriverNotFoundError(`Failed to load driver package ${packageName}: ${reason}`, packageName, { cause: error });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const [preferred] = candidates;
|
|
28
|
+
const tried = candidates.length > 1 ? `\nTried: ${candidates.join(', ')}` : '';
|
|
29
|
+
throw new DriverNotFoundError(`Driver package not found: ${name}${tried}\nInstall it with: npm install ${preferred}`, preferred);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=driver-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-import.js","sourceRoot":"","sources":["../../../src/driver-import.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,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,qBAAqB,CAAC,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,mBAAmB,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,mBAAmB,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,18 @@
|
|
|
1
|
+
const SCOPED_PREFIX = '@ya-modbus/driver-';
|
|
2
|
+
const UNSCOPED_PREFIX = 'ya-modbus-driver-';
|
|
3
|
+
/** An unscoped npm package name that is not already a full driver package name */
|
|
4
|
+
const SHORT_NAME = /^[a-z0-9][a-z0-9._-]*$/;
|
|
5
|
+
/**
|
|
6
|
+
* Packages to try, in order, for a driver name given by the user
|
|
7
|
+
*
|
|
8
|
+
* A short name such as `xymd1` stands for `@ya-modbus/driver-xymd1`, then
|
|
9
|
+
* `ya-modbus-driver-xymd1`, then a package called `xymd1`. Anything else is a full
|
|
10
|
+
* package name or a path and is used as given.
|
|
11
|
+
*/
|
|
12
|
+
export function getDriverPackageCandidates(name) {
|
|
13
|
+
if (!SHORT_NAME.test(name) || name.startsWith(UNSCOPED_PREFIX)) {
|
|
14
|
+
return [name];
|
|
15
|
+
}
|
|
16
|
+
return [`${SCOPED_PREFIX}${name}`, `${UNSCOPED_PREFIX}${name}`, name];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=driver-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-name.js","sourceRoot":"","sources":["../../../src/driver-name.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,oBAAoB,CAAA;AAC1C,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAE3C,kFAAkF;AAClF,MAAM,UAAU,GAAG,wBAAwB,CAAA;AAK3C;;;;;;GAMG;AACH,MAAM,UAAU,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/esm/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/esm/src/errors.js
CHANGED
|
@@ -32,6 +32,8 @@ export class ValidationError extends Error {
|
|
|
32
32
|
/**
|
|
33
33
|
* Error thrown when a driver package cannot be found or loaded
|
|
34
34
|
*
|
|
35
|
+
* `cause` is set when the package is installed but fails to load.
|
|
36
|
+
*
|
|
35
37
|
* @example
|
|
36
38
|
* ```typescript
|
|
37
39
|
* import { loadDriver, DriverNotFoundError } from '@ya-modbus/driver-loader'
|
|
@@ -40,15 +42,19 @@ export class ValidationError extends Error {
|
|
|
40
42
|
* await loadDriver({ driverPackage: 'missing-driver' })
|
|
41
43
|
* } catch (error) {
|
|
42
44
|
* if (error instanceof DriverNotFoundError) {
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
+
* if (error.cause) {
|
|
46
|
+
* console.error(`Failed to load ${error.packageName}:`, error.cause)
|
|
47
|
+
* } else {
|
|
48
|
+
* console.error(`Package not found: ${error.packageName}`)
|
|
49
|
+
* console.error(`Install with: npm install ${error.packageName}`)
|
|
50
|
+
* }
|
|
45
51
|
* }
|
|
46
52
|
* }
|
|
47
53
|
* ```
|
|
48
54
|
*/
|
|
49
55
|
export class DriverNotFoundError extends Error {
|
|
50
|
-
constructor(message, packageName) {
|
|
51
|
-
super(message);
|
|
56
|
+
constructor(message, packageName, options) {
|
|
57
|
+
super(message, options);
|
|
52
58
|
this.packageName = packageName;
|
|
53
59
|
this.name = 'DriverNotFoundError';
|
|
54
60
|
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,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
|
|
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;;;;;;;;;;;;;;;;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"}
|
package/dist/esm/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/esm/src/loader.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { readFile } from 'fs/promises';
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { crossValidateConfigs, outputConfigWarnings, validateDefaultConfig, validateDevices, validateSupportedConfig, } from './config-validator.js';
|
|
4
|
+
import { importDriverPackage } from './driver-import.js';
|
|
5
|
+
import { getDriverPackageCandidates } from './driver-name.js';
|
|
4
6
|
import { DriverNotFoundError, PackageJsonError, ValidationError } from './errors.js';
|
|
5
7
|
/**
|
|
6
8
|
* Default system dependencies using Node.js built-ins
|
|
@@ -127,19 +129,18 @@ export async function loadDriver(options = {}, deps = defaultDeps) {
|
|
|
127
129
|
let packageName;
|
|
128
130
|
let driverModule;
|
|
129
131
|
if (driverPackage) {
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
const candidates = getDriverPackageCandidates(driverPackage);
|
|
133
|
+
for (const candidate of candidates) {
|
|
134
|
+
const cached = driverCache.get(candidate);
|
|
135
|
+
if (cached) {
|
|
136
|
+
cacheStats.hits++;
|
|
137
|
+
return cached;
|
|
138
|
+
}
|
|
135
139
|
}
|
|
136
140
|
cacheStats.misses++;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
catch {
|
|
141
|
-
throw new DriverNotFoundError(`Driver package not found: ${driverPackage}\nInstall it with: npm install ${driverPackage}`, driverPackage);
|
|
142
|
-
}
|
|
141
|
+
const imported = await importDriverPackage(driverPackage, candidates, deps);
|
|
142
|
+
packageName = imported.packageName;
|
|
143
|
+
driverModule = imported.driverModule;
|
|
143
144
|
}
|
|
144
145
|
else {
|
|
145
146
|
packageName = await detectLocalPackage(deps);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAS3B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
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,19 @@
|
|
|
1
|
+
const NOT_FOUND_CODES = new Set(['ERR_MODULE_NOT_FOUND', 'MODULE_NOT_FOUND']);
|
|
2
|
+
/**
|
|
3
|
+
* Check if an import failed because the package itself is not installed
|
|
4
|
+
*
|
|
5
|
+
* A package that is installed but fails to load (syntax error, missing dependency)
|
|
6
|
+
* is not reported as missing, so the real problem is not hidden by a later candidate.
|
|
7
|
+
* Node names the package in quotes, in both the ESM and the CommonJS wording.
|
|
8
|
+
*/
|
|
9
|
+
export function isMissingPackageError(error, packageName) {
|
|
10
|
+
if (typeof error !== 'object' || error === null) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const { code, message } = error;
|
|
14
|
+
return (typeof code === 'string' &&
|
|
15
|
+
NOT_FOUND_CODES.has(code) &&
|
|
16
|
+
typeof message === 'string' &&
|
|
17
|
+
message.includes(`'${packageName}'`));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=module-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-errors.js","sourceRoot":"","sources":["../../../src/module-errors.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAC,CAAA;AAE7E;;;;;;GAMG;AACH,MAAM,UAAU,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"}
|