bare-module-traverse 1.5.1 → 1.6.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 (3) hide show
  1. package/index.js +26 -4
  2. package/lib/errors.js +24 -6
  3. package/package.json +1 -1
package/index.js CHANGED
@@ -123,7 +123,10 @@ exports.module = function* (
123
123
  source = yield { module: url }
124
124
 
125
125
  if (source === null) {
126
- throw errors.MODULE_NOT_FOUND(`Cannot find module '${url.href}'`)
126
+ throw errors.MODULE_NOT_FOUND(
127
+ `Cannot find module '${url.href}'`,
128
+ url.href
129
+ )
127
130
  }
128
131
  }
129
132
 
@@ -307,6 +310,7 @@ exports.imports = function* (
307
310
  matchedConditions.push(condition)
308
311
 
309
312
  const resolver = resolve(entry, parentURL, { ...opts, matchedConditions })
313
+ const candidates = []
310
314
 
311
315
  let next = resolver.next()
312
316
  let resolutions = 0
@@ -319,6 +323,8 @@ exports.imports = function* (
319
323
  } else {
320
324
  const url = value.resolution
321
325
 
326
+ candidates.push(url)
327
+
322
328
  let resolved = false
323
329
 
324
330
  if (
@@ -391,19 +397,35 @@ exports.imports = function* (
391
397
 
392
398
  matchedConditions.pop()
393
399
 
400
+ let message = `Cannot find ${condition === 'default' ? 'module' : condition} '${specifier}' imported from '${parentURL.href}'`
401
+
402
+ if (candidates.length > 0) {
403
+ message += '\nCandidates:'
404
+ message += '\n' + candidates.map((url) => '- ' + url.href).join('\n')
405
+ }
406
+
394
407
  if (resolutions === 0) {
395
408
  switch (condition) {
396
409
  case 'addon':
397
410
  throw errors.ADDON_NOT_FOUND(
398
- `Cannot find addon '${specifier}' imported from '${parentURL.href}'`
411
+ message,
412
+ specifier,
413
+ parentURL,
414
+ candidates
399
415
  )
400
416
  case 'asset':
401
417
  throw errors.ASSET_NOT_FOUND(
402
- `Cannot find asset '${specifier}' imported from '${parentURL.href}'`
418
+ message,
419
+ specifier,
420
+ parentURL,
421
+ candidates
403
422
  )
404
423
  default:
405
424
  throw errors.MODULE_NOT_FOUND(
406
- `Cannot find module '${specifier}' imported from '${parentURL.href}'`
425
+ message,
426
+ specifier,
427
+ parentURL,
428
+ candidates
407
429
  )
408
430
  }
409
431
  }
package/lib/errors.js CHANGED
@@ -12,28 +12,46 @@ module.exports = class ModuleTraverseError extends Error {
12
12
  return 'ModuleTraverseError'
13
13
  }
14
14
 
15
- static MODULE_NOT_FOUND(msg) {
16
- return new ModuleTraverseError(
15
+ static MODULE_NOT_FOUND(msg, specifier, referrer = null, candidates = []) {
16
+ const err = new ModuleTraverseError(
17
17
  msg,
18
18
  'MODULE_NOT_FOUND',
19
19
  ModuleTraverseError.MODULE_NOT_FOUND
20
20
  )
21
+
22
+ err.specifier = specifier
23
+ err.referrer = referrer
24
+ err.candidates = candidates
25
+
26
+ return err
21
27
  }
22
28
 
23
- static ADDON_NOT_FOUND(msg) {
24
- return new ModuleTraverseError(
29
+ static ADDON_NOT_FOUND(msg, specifier, referrer = null, candidates = []) {
30
+ const err = new ModuleTraverseError(
25
31
  msg,
26
32
  'ADDON_NOT_FOUND',
27
33
  ModuleTraverseError.ADDON_NOT_FOUND
28
34
  )
35
+
36
+ err.specifier = specifier
37
+ err.referrer = referrer
38
+ err.candidates = candidates
39
+
40
+ return err
29
41
  }
30
42
 
31
- static ASSET_NOT_FOUND(msg) {
32
- return new ModuleTraverseError(
43
+ static ASSET_NOT_FOUND(msg, specifier, referrer = null, candidates = []) {
44
+ const err = new ModuleTraverseError(
33
45
  msg,
34
46
  'ASSET_NOT_FOUND',
35
47
  ModuleTraverseError.ASSET_NOT_FOUND
36
48
  )
49
+
50
+ err.specifier = specifier
51
+ err.referrer = referrer
52
+ err.candidates = candidates
53
+
54
+ return err
37
55
  }
38
56
 
39
57
  static INVALID_IMPORTS_MAP(msg) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-module-traverse",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "Low-level module graph traversal for Bare",
5
5
  "exports": {
6
6
  ".": {