@@ -16,15 +16,6 @@ import path from 'path';
16
16
17
17
const win32 = process . platform === 'win32' ;
18
18
19
- function shortFromAlias ( alias ) {
20
- // alias = fs-promise or @types/node
21
- if ( alias [ 0 ] === '@' ) {
22
- return alias . match ( / ^ ( [ ^ \\ / ] + [ \\ / ] [ ^ \\ / ] + ) / ) [ 0 ] ;
23
- } else {
24
- return alias . match ( / ^ [ ^ \\ / ] + / ) [ 0 ] ;
25
- }
26
- }
27
-
28
19
function isPublic ( config ) {
29
20
if ( config . private ) return false ;
30
21
let { license, licenses } = config ;
@@ -414,28 +405,29 @@ class Walker {
414
405
}
415
406
416
407
async stepDerivatives_ALIAS_AS_RESOLVABLE ( record , marker , derivative ) { // eslint-disable-line camelcase
417
- const catcher = { } ;
418
408
let stage = 0 ;
419
409
let newPackage ;
420
410
let newMarker ;
421
411
422
- catcher . readFileSync = ( file ) => {
423
- // only first occurence from loadNodeModulesSync
424
- if ( stage === 2 ) return ;
425
- assert ( stage === 0 ) ;
412
+ // was taken from resolve/lib/sync.js
413
+ const isNear = / ^ (?: \. \. ? (?: \/ | $ ) | \/ | ( [ A - Z a - z ] : ) ? [ \\ / ] ) / ;
414
+ const near = isNear . test ( derivative . alias ) ;
415
+
416
+ const catchReadFile = ( file ) => {
417
+ if ( near ) return ;
418
+ if ( stage !== 0 ) return ;
426
419
assert ( isPackageJson ( file ) , 'walker: ' +
427
420
file + ' must be package.json' ) ;
428
421
newPackage = file ;
429
422
newMarker = undefined ;
430
423
stage = 1 ;
431
- return fs . readFileSync ( file ) ;
432
424
} ;
433
425
434
- catcher . packageFilter = ( config , base ) => {
435
- assert ( stage === 1 ) ;
426
+ const catchPackageFilter = ( config , base ) => {
427
+ if ( near ) return ;
428
+ if ( stage !== 1 ) return ;
436
429
newMarker = { config, configPath : newPackage , base } ;
437
430
stage = 2 ;
438
- return config ;
439
431
} ;
440
432
441
433
let newFile , failure ;
@@ -448,42 +440,13 @@ class Walker {
448
440
// is not taken in require('./typos')
449
441
// in 'normalize-package-data/lib/fixer.js'
450
442
extensions : [ '.js' , '.json' , '.node' ] ,
451
- readFileSync : catcher . readFileSync ,
452
- packageFilter : catcher . packageFilter
443
+ readFile : catchReadFile ,
444
+ packageFilter : catchPackageFilter
453
445
} ) ;
454
446
} catch ( error ) {
455
447
failure = error ;
456
448
}
457
449
458
- // was taken from resolve/lib/sync.js
459
- const isNear = / ^ (?: \. \. ? (?: \/ | $ ) | \/ | ( [ A - Z a - z ] : ) ? [ \\ / ] ) / ;
460
- let mainNotFound = false ;
461
-
462
- if ( ! isNear . test ( derivative . alias ) ) {
463
- const short = shortFromAlias ( derivative . alias ) ;
464
- // 'npm' !== 'npm/bin/npm-cli.js'
465
- if ( short !== derivative . alias ) {
466
- try {
467
- await follow ( short , {
468
- basedir : path . dirname ( record . file ) ,
469
- extensions : [ '.js' , '.json' , '.node' ] ,
470
- readFileSync : catcher . readFileSync ,
471
- packageFilter : catcher . packageFilter
472
- } ) ;
473
- } catch ( error ) {
474
- // the purpose is to fire 'packageFilter'
475
- // in cases like require('npm/bin/npm-cli.js')
476
- // because otherwise it will not be fired
477
- // (only loadAsFileSync is executed)
478
- }
479
- }
480
- // 'babel-runtime' === 'babel-runtime'
481
- if ( short === derivative . alias ) {
482
- mainNotFound = failure && newMarker &&
483
- newMarker . config && ! newMarker . config . main ;
484
- }
485
- }
486
-
487
450
assert ( ( newPackage && newMarker ) ||
488
451
( ! newPackage && ! newMarker ) , 'Probably, package.json is malformed' ) ;
489
452
@@ -498,6 +461,7 @@ class Walker {
498
461
499
462
if ( failure ) {
500
463
const { toplevel } = marker ;
464
+ const mainNotFound = ! newFile && newMarker ;
501
465
const debug = ! toplevel || derivative . mayExclude ||
502
466
( mainNotFound && derivative . fromDependencies ) ;
503
467
const level = debug ? 'debug' : 'warn' ;
0 commit comments