@ya-modbus/driver-loader 0.9.0 → 0.11.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 (69) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +61 -11
  3. package/dist/cjs/src/driver-import.d.ts +32 -0
  4. package/dist/cjs/src/driver-import.d.ts.map +1 -0
  5. package/dist/cjs/src/driver-import.js +82 -0
  6. package/dist/cjs/src/driver-import.js.map +1 -0
  7. package/dist/cjs/src/driver-name.d.ts +11 -0
  8. package/dist/cjs/src/driver-name.d.ts.map +1 -0
  9. package/dist/cjs/src/driver-name.js +21 -0
  10. package/dist/cjs/src/driver-name.js.map +1 -0
  11. package/dist/cjs/src/entry-point.d.ts +20 -0
  12. package/dist/cjs/src/entry-point.d.ts.map +1 -0
  13. package/dist/cjs/src/entry-point.js +63 -0
  14. package/dist/cjs/src/entry-point.js.map +1 -0
  15. package/dist/cjs/src/errors.d.ts +32 -3
  16. package/dist/cjs/src/errors.d.ts.map +1 -1
  17. package/dist/cjs/src/errors.js +39 -5
  18. package/dist/cjs/src/errors.js.map +1 -1
  19. package/dist/cjs/src/index.d.ts +1 -1
  20. package/dist/cjs/src/index.d.ts.map +1 -1
  21. package/dist/cjs/src/index.js +2 -1
  22. package/dist/cjs/src/index.js.map +1 -1
  23. package/dist/cjs/src/loader.d.ts +9 -2
  24. package/dist/cjs/src/loader.d.ts.map +1 -1
  25. package/dist/cjs/src/loader.js +34 -78
  26. package/dist/cjs/src/loader.js.map +1 -1
  27. package/dist/cjs/src/local-package.d.ts +19 -0
  28. package/dist/cjs/src/local-package.d.ts.map +1 -0
  29. package/dist/cjs/src/local-package.js +50 -0
  30. package/dist/cjs/src/local-package.js.map +1 -0
  31. package/dist/cjs/src/module-errors.d.ts +33 -0
  32. package/dist/cjs/src/module-errors.d.ts.map +1 -0
  33. package/dist/cjs/src/module-errors.js +77 -0
  34. package/dist/cjs/src/module-errors.js.map +1 -0
  35. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  36. package/dist/esm/src/driver-import.d.ts +32 -0
  37. package/dist/esm/src/driver-import.d.ts.map +1 -0
  38. package/dist/esm/src/driver-import.js +78 -0
  39. package/dist/esm/src/driver-import.js.map +1 -0
  40. package/dist/esm/src/driver-name.d.ts +11 -0
  41. package/dist/esm/src/driver-name.d.ts.map +1 -0
  42. package/dist/esm/src/driver-name.js +18 -0
  43. package/dist/esm/src/driver-name.js.map +1 -0
  44. package/dist/esm/src/entry-point.d.ts +20 -0
  45. package/dist/esm/src/entry-point.d.ts.map +1 -0
  46. package/dist/esm/src/entry-point.js +59 -0
  47. package/dist/esm/src/entry-point.js.map +1 -0
  48. package/dist/esm/src/errors.d.ts +32 -3
  49. package/dist/esm/src/errors.d.ts.map +1 -1
  50. package/dist/esm/src/errors.js +37 -4
  51. package/dist/esm/src/errors.js.map +1 -1
  52. package/dist/esm/src/index.d.ts +1 -1
  53. package/dist/esm/src/index.d.ts.map +1 -1
  54. package/dist/esm/src/index.js +1 -1
  55. package/dist/esm/src/index.js.map +1 -1
  56. package/dist/esm/src/loader.d.ts +9 -2
  57. package/dist/esm/src/loader.d.ts.map +1 -1
  58. package/dist/esm/src/loader.js +35 -79
  59. package/dist/esm/src/loader.js.map +1 -1
  60. package/dist/esm/src/local-package.d.ts +19 -0
  61. package/dist/esm/src/local-package.d.ts.map +1 -0
  62. package/dist/esm/src/local-package.js +47 -0
  63. package/dist/esm/src/local-package.js.map +1 -0
  64. package/dist/esm/src/module-errors.d.ts +33 -0
  65. package/dist/esm/src/module-errors.d.ts.map +1 -0
  66. package/dist/esm/src/module-errors.js +73 -0
  67. package/dist/esm/src/module-errors.js.map +1 -0
  68. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  69. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
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.11.0](https://github.com/groupsky/ya-modbus/compare/@ya-modbus/driver-loader@0.10.0...@ya-modbus/driver-loader@0.11.0) (2026-10-12)
7
+
8
+ ### Features
9
+
10
+ - **driver-loader:** load local drivers from their package.json entry point ([#581](https://github.com/groupsky/ya-modbus/issues/581)) ([177bb89](https://github.com/groupsky/ya-modbus/commit/177bb89eab449a4ed55fe7ce37695e314cfdd358)), closes [#24](https://github.com/groupsky/ya-modbus/issues/24)
11
+
12
+ # [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)
13
+
14
+ ### Features
15
+
16
+ - **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)
17
+
6
18
  # [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
19
 
8
20
  ### Features
package/README.md CHANGED
@@ -18,6 +18,10 @@ import { loadDriver } from '@ya-modbus/driver-loader'
18
18
  const driver = await loadDriver({})
19
19
  ```
20
20
 
21
+ The current directory must hold a package with the `ya-modbus-driver` keyword. The loader imports the file that Node loads for `import` of that package: `exports["."]` (conditions `node`, `import`, `module-sync`, `default`), else `main`, else `index.js`. The entry must name the file with its extension, and Node's `--conditions` flag is not used.
22
+
23
+ The driver must be built, and built again after each change to its source. If the entry file is missing (no `dist` directory), or it is TypeScript source that Node cannot run, `loadDriver` throws a `DriverNotBuiltError`: build the driver first (`npm run build`), or run with Node's built-in type stripping (Node 22.18+ or 24).
24
+
21
25
  ### Load specific driver package
22
26
 
23
27
  ```typescript
@@ -26,6 +30,21 @@ import { loadDriver } from '@ya-modbus/driver-loader'
26
30
  const driver = await loadDriver({ driverPackage: '@ya-modbus/driver-xymd1' })
27
31
  ```
28
32
 
33
+ ### Load a driver by short name
34
+
35
+ 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:
36
+
37
+ 1. `@ya-modbus/driver-<name>`
38
+ 2. `ya-modbus-driver-<name>`
39
+ 3. `<name>`, the name as given
40
+
41
+ ```typescript
42
+ // Loads @ya-modbus/driver-xymd1
43
+ const driver = await loadDriver({ driverPackage: 'xymd1' })
44
+ ```
45
+
46
+ 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>`).
47
+
29
48
  ### Error Handling
30
49
 
31
50
  The driver-loader exports custom error classes for type-safe error handling:
@@ -35,6 +54,7 @@ import {
35
54
  loadDriver,
36
55
  ValidationError,
37
56
  DriverNotFoundError,
57
+ DriverNotBuiltError,
38
58
  PackageJsonError,
39
59
  } from '@ya-modbus/driver-loader'
40
60
 
@@ -43,8 +63,15 @@ try {
43
63
  } catch (error) {
44
64
  // Type-safe error handling with instanceof
45
65
  if (error instanceof DriverNotFoundError) {
46
- console.error(`Package not found: ${error.packageName}`)
47
- console.error(`Install with: npm install ${error.packageName}`)
66
+ if (error.cause) {
67
+ // The package is installed but failed to load
68
+ console.error(`Failed to load ${error.packageName}:`, error.cause)
69
+ } else {
70
+ console.error(`Package not found: ${error.packageName}`)
71
+ console.error(`Install with: npm install ${error.packageName}`)
72
+ }
73
+ } else if (error instanceof DriverNotBuiltError) {
74
+ console.error(`${error.packageName} is not built: run npm run build`)
48
75
  } else if (error instanceof ValidationError) {
49
76
  console.error(`Validation failed for field: ${error.field}`)
50
77
  console.error(`Error: ${error.message}`)
@@ -63,11 +90,17 @@ try {
63
90
  - Example: Invalid DEFAULT_CONFIG, missing createDriver function
64
91
 
65
92
  - **`DriverNotFoundError`**: Driver package not found or cannot be loaded
66
- - `packageName: string` - The package that couldn't be found
67
- - Example: Package not installed, wrong package name
93
+ - `packageName: string` - The package that could not be found or loaded. For a package that is not installed this is the package to install
94
+ - `cause?: unknown` - Set when the package is installed but fails to load: the original error
95
+ - Example: Package not installed, wrong package name, syntax error in the driver
96
+
97
+ - **`DriverNotBuiltError`**: Driver package is installed but not built
98
+ - `packageName: string` - The package that cannot be loaded
99
+ - `cause?: unknown` - The error Node reported
100
+ - Example: Missing `dist` directory, TypeScript source that Node cannot run
68
101
 
69
102
  - **`PackageJsonError`**: package.json not found or invalid
70
- - Example: Missing package.json, invalid JSON, missing ya-modbus-driver keyword
103
+ - Example: Missing package.json, invalid JSON, missing ya-modbus-driver keyword, `exports` without an entry for `import`
71
104
 
72
105
  ### Custom Logging
73
106
 
@@ -95,7 +128,7 @@ Loads a ya-modbus driver package and validates its exports.
95
128
 
96
129
  **Options:**
97
130
 
98
- - `driverPackage` (optional): Name of the driver package to load. If omitted, auto-detects from current directory's package.json.
131
+ - `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
132
 
100
133
  **Returns:**
101
134
 
@@ -107,7 +140,8 @@ Loads a ya-modbus driver package and validates its exports.
107
140
 
108
141
  **Throws:**
109
142
 
110
- - Error if driver package is not found
143
+ - `DriverNotFoundError` if driver package is not found or fails to load
144
+ - `DriverNotBuiltError` if the driver is not built
111
145
  - Error if driver exports are invalid
112
146
  - Error if configuration validation fails
113
147
 
@@ -148,7 +182,7 @@ Returns cache statistics including hits, misses, and current cache size.
148
182
  **Cache Behavior:**
149
183
 
150
184
  - **Automatic caching:** Drivers are cached by package name after first load
151
- - **Cache key:** Package name (e.g., '@ya-modbus/driver-xymd1')
185
+ - **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
186
  - **Cache lifetime:** Persists for the lifetime of the Node.js process
153
187
  - **Auto-detect mode:** Even auto-detected drivers are cached by their package name
154
188
  - **No cache on errors:** Failed loads are not cached, allowing retry
@@ -267,19 +301,35 @@ If you encounter `Driver package not found` errors:
267
301
  1. **Verify the package is installed:**
268
302
 
269
303
  ```bash
270
- npm list ya-modbus-driver-<name>
304
+ npm list @ya-modbus/driver-<name>
271
305
  ```
272
306
 
273
307
  2. **Install the driver package:**
274
308
 
275
309
  ```bash
276
- npm install ya-modbus-driver-<name>
310
+ npm install @ya-modbus/driver-<name>
277
311
  ```
278
312
 
279
313
  3. **Check the package name:**
280
314
  - Ensure the package name in your code matches the actual npm package name
281
315
  - Driver packages follow the naming rule described under `isValidDriverPackageName` (for example `ya-modbus-driver-<device>` or `@<scope>/ya-modbus-driver-<device>`)
282
316
 
317
+ 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.
318
+
319
+ ### Driver Not Built
320
+
321
+ If you encounter `DriverNotBuiltError` (message `Cannot load driver <name>: ...`):
322
+
323
+ 1. **Build the driver:**
324
+
325
+ ```bash
326
+ npm run build
327
+ ```
328
+
329
+ 2. **Check the entry point:** `exports["."]` (or `main`) in package.json must name the built JavaScript file with its extension, for example `./dist/esm/index.js`.
330
+
331
+ 3. **TypeScript source:** Node 22.18+ and 24 run `.ts` files themselves, but only outside `node_modules`, and only if the source uses erasable TypeScript syntax (no enums) and imports files with their `.ts` extension. Build the driver otherwise.
332
+
283
333
  ### Module Resolution Issues
284
334
 
285
335
  If TypeScript or Node.js can't find `@ya-modbus/driver-loader`:
@@ -301,7 +351,7 @@ If TypeScript or Node.js can't find `@ya-modbus/driver-loader`:
301
351
  - Check that `"types"` field isn't excluding driver-loader
302
352
 
303
353
  4. **For local driver development:**
304
- - The loader tries multiple import paths: `src/index.js`, `src/index.ts`, `dist/index.js`
354
+ - The loader imports the entry file from `exports` or `main` in package.json
305
355
  - Build your driver before testing: `npm run build`
306
356
 
307
357
  ### Validation Failures
@@ -0,0 +1,32 @@
1
+ import type { DriverPackageCandidates } from './driver-name.js';
2
+ import type { SystemDependencies } from './loader.js';
3
+ type ImportDeps = Pick<SystemDependencies, 'importModule'>;
4
+ /**
5
+ * Import the first installed package of a list of candidates
6
+ *
7
+ * Moves on to the next candidate only when the package is not installed. A package that
8
+ * is installed but fails to load stops the search, so its error is not replaced by a later one.
9
+ *
10
+ * @param name - Driver name as given by the user
11
+ * @param candidates - Package names to try, in order
12
+ * @param deps - System dependencies
13
+ * @returns The imported module and the name of the package it came from
14
+ * @throws DriverNotBuiltError if the installed package is not built
15
+ * @throws DriverNotFoundError if no candidate is installed or the installed one fails to load
16
+ */
17
+ export declare function importDriverPackage(name: string, candidates: DriverPackageCandidates, deps: ImportDeps): Promise<{
18
+ packageName: string;
19
+ driverModule: unknown;
20
+ }>;
21
+ /**
22
+ * Import the entry file of the driver package in the current directory
23
+ *
24
+ * @param packageName - Name from package.json
25
+ * @param entryPoint - Absolute path of the entry file
26
+ * @param deps - System dependencies
27
+ * @returns The imported module
28
+ * @throws DriverNotBuiltError if the entry file is missing or is TypeScript that Node cannot run
29
+ */
30
+ export declare function importLocalDriver(packageName: string, entryPoint: string, deps: ImportDeps): Promise<unknown>;
31
+ export {};
32
+ //# 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":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD,KAAK,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAA;AAmC1D;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,uBAAuB,EACnC,IAAI,EAAE,UAAU,GACf,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CA0BzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC,CAWlB"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.importDriverPackage = importDriverPackage;
4
+ exports.importLocalDriver = importLocalDriver;
5
+ const node_url_1 = require("node:url");
6
+ const errors_js_1 = require("./errors.js");
7
+ const module_errors_js_1 = require("./module-errors.js");
8
+ const NOT_BUILT_HINTS = {
9
+ 'missing-file': 'Drivers are loaded as built JavaScript. Build the driver first (npm run build).',
10
+ typescript: 'Drivers are loaded as built JavaScript. Build the driver first (npm run build), ' +
11
+ "or run with Node's built-in type stripping (Node 22.18+ or 24) to load TypeScript source.",
12
+ 'typescript-unsupported': 'Drivers are loaded as built JavaScript. Build the driver first (npm run build). ' +
13
+ "Node's type stripping needs erasable syntax (no enums) and imports that name files with their .ts extension.",
14
+ 'typescript-in-node-modules': 'Node does not run TypeScript from node_modules, so a package must ship built JavaScript.',
15
+ };
16
+ /**
17
+ * Error for a driver that cannot be loaded because it is not built
18
+ *
19
+ * Shows what Node reported. The "imported from" part is left out when `hideImporter` is set,
20
+ * because then it only names the loader.
21
+ */
22
+ function createNotBuiltError(packageName, cause, notBuilt, hideImporter = false) {
23
+ const firstLine = cause.message.replace(/\n[\s\S]*/, '');
24
+ const reason = hideImporter ? firstLine.replace(/ imported from .*$/, '') : firstLine;
25
+ return new errors_js_1.DriverNotBuiltError(`Cannot load driver ${packageName}: ${reason}\n${NOT_BUILT_HINTS[notBuilt]}`, packageName, { cause });
26
+ }
27
+ /**
28
+ * Import the first installed package of a list of candidates
29
+ *
30
+ * Moves on to the next candidate only when the package is not installed. A package that
31
+ * is installed but fails to load stops the search, so its error is not replaced by a later one.
32
+ *
33
+ * @param name - Driver name as given by the user
34
+ * @param candidates - Package names to try, in order
35
+ * @param deps - System dependencies
36
+ * @returns The imported module and the name of the package it came from
37
+ * @throws DriverNotBuiltError if the installed package is not built
38
+ * @throws DriverNotFoundError if no candidate is installed or the installed one fails to load
39
+ */
40
+ async function importDriverPackage(name, candidates, deps) {
41
+ for (const packageName of candidates) {
42
+ try {
43
+ return { packageName, driverModule: await deps.importModule(packageName) };
44
+ }
45
+ catch (error) {
46
+ const notBuilt = (0, module_errors_js_1.getNotBuiltCause)(error);
47
+ if (notBuilt) {
48
+ throw createNotBuiltError(packageName, error, notBuilt);
49
+ }
50
+ if (!(0, module_errors_js_1.isMissingPackageError)(error, packageName)) {
51
+ const reason = error instanceof Error ? error.message : String(error);
52
+ throw new errors_js_1.DriverNotFoundError(`Failed to load driver package ${packageName}: ${reason}`, packageName, { cause: error });
53
+ }
54
+ }
55
+ }
56
+ const [preferred] = candidates;
57
+ const tried = candidates.length > 1 ? `\nTried: ${candidates.join(', ')}` : '';
58
+ throw new errors_js_1.DriverNotFoundError(`Driver package not found: ${name}${tried}\nInstall it with: npm install ${preferred}`, preferred);
59
+ }
60
+ /**
61
+ * Import the entry file of the driver package in the current directory
62
+ *
63
+ * @param packageName - Name from package.json
64
+ * @param entryPoint - Absolute path of the entry file
65
+ * @param deps - System dependencies
66
+ * @returns The imported module
67
+ * @throws DriverNotBuiltError if the entry file is missing or is TypeScript that Node cannot run
68
+ */
69
+ async function importLocalDriver(packageName, entryPoint, deps) {
70
+ try {
71
+ return await deps.importModule((0, node_url_1.pathToFileURL)(entryPoint).href);
72
+ }
73
+ catch (error) {
74
+ const notBuilt = (0, module_errors_js_1.getNotBuiltCause)(error, entryPoint);
75
+ if (notBuilt === undefined) {
76
+ throw error;
77
+ }
78
+ // The missing entry file is reported as imported by the loader, which is no help
79
+ throw createNotBuiltError(packageName, error, notBuilt, notBuilt === 'missing-file');
80
+ }
81
+ }
82
+ //# sourceMappingURL=driver-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-import.js","sourceRoot":"","sources":["../../../src/driver-import.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Conditions Node uses for `import()` when it resolves package `exports`.
3
+ * Other runtimes use other conditions (for example `deno` or `bun`).
4
+ */
5
+ export declare const IMPORT_CONDITIONS: readonly string[];
6
+ /** The package.json fields that decide where a package is entered */
7
+ export interface PackageEntryFields {
8
+ main?: unknown;
9
+ exports?: unknown;
10
+ }
11
+ /**
12
+ * Find the file that `import('<package>')` loads, from a package.json
13
+ *
14
+ * Uses `exports["."]` when the package has `exports`, otherwise `main`, otherwise `index.js`,
15
+ * like Node does. Paths are relative to the package directory.
16
+ *
17
+ * @returns The relative path, or undefined if `exports` has no entry for these conditions
18
+ */
19
+ export declare function resolvePackageEntry(packageJson: PackageEntryFields, conditions?: readonly string[]): string | undefined;
20
+ //# sourceMappingURL=entry-point.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-point.d.ts","sourceRoot":"","sources":["../../../src/entry-point.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAiD,CAAA;AAEhG,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAwCD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,kBAAkB,EAC/B,UAAU,GAAE,SAAS,MAAM,EAAsB,GAChD,MAAM,GAAG,SAAS,CAoBpB"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMPORT_CONDITIONS = void 0;
4
+ exports.resolvePackageEntry = resolvePackageEntry;
5
+ /**
6
+ * Conditions Node uses for `import()` when it resolves package `exports`.
7
+ * Other runtimes use other conditions (for example `deno` or `bun`).
8
+ */
9
+ exports.IMPORT_CONDITIONS = ['node', 'import', 'module-sync', 'default'];
10
+ /**
11
+ * Resolve a conditional `exports` target to a file path
12
+ *
13
+ * Follows the Node rules: the first key that matches a condition and leads somewhere wins.
14
+ * A `null` condition blocks the path, so the search stops there. In an array, a `null`
15
+ * result is skipped and the next item is tried.
16
+ */
17
+ function resolveTarget(target, conditions) {
18
+ if (target === null) {
19
+ return null;
20
+ }
21
+ if (typeof target === 'string') {
22
+ return target.startsWith('./') ? target : undefined;
23
+ }
24
+ if (Array.isArray(target)) {
25
+ for (const item of target) {
26
+ const resolved = resolveTarget(item, conditions);
27
+ if (typeof resolved === 'string') {
28
+ return resolved;
29
+ }
30
+ }
31
+ return undefined;
32
+ }
33
+ if (typeof target === 'object') {
34
+ for (const [condition, value] of Object.entries(target)) {
35
+ const resolved = conditions.includes(condition) ? resolveTarget(value, conditions) : undefined;
36
+ if (resolved !== undefined) {
37
+ return resolved;
38
+ }
39
+ }
40
+ }
41
+ return undefined;
42
+ }
43
+ /**
44
+ * Find the file that `import('<package>')` loads, from a package.json
45
+ *
46
+ * Uses `exports["."]` when the package has `exports`, otherwise `main`, otherwise `index.js`,
47
+ * like Node does. Paths are relative to the package directory.
48
+ *
49
+ * @returns The relative path, or undefined if `exports` has no entry for these conditions
50
+ */
51
+ function resolvePackageEntry(packageJson, conditions = exports.IMPORT_CONDITIONS) {
52
+ // Not destructured as `exports`: in the CommonJS build that would shadow the module's own exports
53
+ const { main, exports: exportsField } = packageJson;
54
+ if (exportsField === undefined || exportsField === null) {
55
+ return typeof main === 'string' ? main : 'index.js';
56
+ }
57
+ // `exports` is either a map of subpaths ("." and "./x") or the target of "." itself
58
+ const isSubpathMap = typeof exportsField === 'object' &&
59
+ !Array.isArray(exportsField) &&
60
+ Object.keys(exportsField).some((key) => key.startsWith('.'));
61
+ return (resolveTarget(isSubpathMap ? exportsField['.'] : exportsField, conditions) ?? undefined);
62
+ }
63
+ //# sourceMappingURL=entry-point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-point.js","sourceRoot":"","sources":["../../../src/entry-point.ts"],"names":[],"mappings":";;;AA0DA,kDAuBC;AAjFD;;;GAGG;AACU,QAAA,iBAAiB,GAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAA;AAQhG;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,MAAe,EAAE,UAA6B;IACnE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IACrD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAmB,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;YAChD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,QAAQ,CAAA;YACjB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;YACnF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC9F,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,QAAQ,CAAA;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CACjC,WAA+B,EAC/B,aAAgC,yBAAiB;IAEjD,kGAAkG;IAClG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,WAAW,CAAA;IAEnD,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAA;IACrD,CAAC;IAED,oFAAoF;IACpF,MAAM,YAAY,GAChB,OAAO,YAAY,KAAK,QAAQ;QAChC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IAE9D,OAAO,CACL,aAAa,CACX,YAAY,CAAC,CAAC,CAAE,YAAwC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,EAC5E,UAAU,CACX,IAAI,SAAS,CACf,CAAA;AACH,CAAC"}
@@ -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,42 @@ export declare class ValidationError extends Error {
36
38
  * await loadDriver({ driverPackage: 'missing-driver' })
37
39
  * } catch (error) {
38
40
  * if (error instanceof DriverNotFoundError) {
39
- * console.error(`Package not found: ${error.packageName}`)
40
- * console.error(`Install with: npm install ${error.packageName}`)
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);
54
+ }
55
+ /**
56
+ * Error thrown when a driver package is installed but cannot be loaded because it is not built
57
+ *
58
+ * Drivers are loaded as built JavaScript. This covers a missing entry file (for example
59
+ * no `dist` directory) and TypeScript source that Node cannot run.
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * import { loadDriver, DriverNotBuiltError } from '@ya-modbus/driver-loader'
64
+ *
65
+ * try {
66
+ * await loadDriver({}) // Auto-detect from current directory
67
+ * } catch (error) {
68
+ * if (error instanceof DriverNotBuiltError) {
69
+ * console.error(`Build ${error.packageName} first: npm run build`)
70
+ * }
71
+ * }
72
+ * ```
73
+ */
74
+ export declare class DriverNotBuiltError extends Error {
75
+ readonly packageName: string;
76
+ constructor(message: string, packageName: string, options?: ErrorOptions);
48
77
  }
49
78
  /**
50
79
  * 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;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,WAAW,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM;CAMtC;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;;;;;;;;;;;;;;;;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"}
@@ -6,7 +6,7 @@
6
6
  * compared to string-based error detection.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.PackageJsonError = exports.DriverNotFoundError = exports.ValidationError = void 0;
9
+ exports.PackageJsonError = exports.DriverNotBuiltError = exports.DriverNotFoundError = exports.ValidationError = void 0;
10
10
  /**
11
11
  * Error thrown when driver configuration validation fails
12
12
  *
@@ -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,21 +46,53 @@ exports.ValidationError = ValidationError;
44
46
  * await loadDriver({ driverPackage: 'missing-driver' })
45
47
  * } catch (error) {
46
48
  * if (error instanceof DriverNotFoundError) {
47
- * console.error(`Package not found: ${error.packageName}`)
48
- * console.error(`Install with: npm install ${error.packageName}`)
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);
59
65
  }
60
66
  }
61
67
  exports.DriverNotFoundError = DriverNotFoundError;
68
+ /**
69
+ * Error thrown when a driver package is installed but cannot be loaded because it is not built
70
+ *
71
+ * Drivers are loaded as built JavaScript. This covers a missing entry file (for example
72
+ * no `dist` directory) and TypeScript source that Node cannot run.
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * import { loadDriver, DriverNotBuiltError } from '@ya-modbus/driver-loader'
77
+ *
78
+ * try {
79
+ * await loadDriver({}) // Auto-detect from current directory
80
+ * } catch (error) {
81
+ * if (error instanceof DriverNotBuiltError) {
82
+ * console.error(`Build ${error.packageName} first: npm run build`)
83
+ * }
84
+ * }
85
+ * ```
86
+ */
87
+ class DriverNotBuiltError extends Error {
88
+ constructor(message, packageName, options) {
89
+ super(message, options);
90
+ this.packageName = packageName;
91
+ this.name = 'DriverNotBuiltError';
92
+ Object.setPrototypeOf(this, DriverNotBuiltError.prototype);
93
+ }
94
+ }
95
+ exports.DriverNotBuiltError = DriverNotBuiltError;
62
96
  /**
63
97
  * Error thrown when package.json is not found or invalid
64
98
  *
@@ -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;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YACE,OAAe,EACC,WAAmB;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,gBAAW,GAAX,WAAW,CAAQ;QAGnC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAC5D,CAAC;CACF;AATD,kDASC;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"}
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;;;;;;;;;;;;;;;;;;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"}
@@ -2,7 +2,7 @@ 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
4
  export { DRIVER_PACKAGE_NAME_RULE, assertValidDriverPackageName, isValidDriverPackageName, } from './driver-package-name.js';
5
- export { ValidationError, DriverNotFoundError, PackageJsonError } from './errors.js';
5
+ export { ValidationError, DriverNotFoundError, DriverNotBuiltError, PackageJsonError, } from './errors.js';
6
6
  export { getCallerPackageInfo } from './package-info.js';
7
7
  export type { PackageInfo } from './package-info.js';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -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,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACpF,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,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,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCallerPackageInfo = exports.PackageJsonError = 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.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; } });
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "isValidDriverPackageName", { enumerable: true, g
17
17
  var errors_js_1 = require("./errors.js");
18
18
  Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_js_1.ValidationError; } });
19
19
  Object.defineProperty(exports, "DriverNotFoundError", { enumerable: true, get: function () { return errors_js_1.DriverNotFoundError; } });
20
+ Object.defineProperty(exports, "DriverNotBuiltError", { enumerable: true, get: function () { return errors_js_1.DriverNotBuiltError; } });
20
21
  Object.defineProperty(exports, "PackageJsonError", { enumerable: true, get: function () { return errors_js_1.PackageJsonError; } });
21
22
  var package_info_js_1 = require("./package-info.js");
22
23
  Object.defineProperty(exports, "getCallerPackageInfo", { enumerable: true, get: function () { return package_info_js_1.getCallerPackageInfo; } });
@@ -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,yCAAoF;AAA3E,4GAAA,eAAe,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAC/D,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,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"}