@@ -15,21 +15,8 @@ const internals = {};
15
15
internals . log = Debug ( 'detect-node-support' ) ;
16
16
17
17
18
- internals . walk = ( node , callback ) => {
19
-
20
- callback ( node ) ;
21
-
22
- node . children . forEach ( ( child ) => {
23
-
24
- internals . walk ( child , callback ) ;
25
- } ) ;
26
- } ;
27
-
28
-
29
18
internals . resolve = async ( { packageJson, lockfile } , options ) => {
30
19
31
- const { deep, dev } = options ;
32
-
33
20
const tmpDir = Tmp . dirSync ( { unsafeCleanup : true } ) ;
34
21
const path = tmpDir . name ;
35
22
@@ -39,47 +26,26 @@ internals.resolve = async ({ packageJson, lockfile }, options) => {
39
26
Fs . writeFileSync ( Path . join ( path , 'package-lock.json' ) , JSON . stringify ( lockfile , null , ' ' ) ) ;
40
27
}
41
28
42
- const direct = new Set ( ) ;
43
- [ 'dependencies' , 'devDependencies' , 'peerDependencies' , 'optionalDependencies' ] . forEach ( ( depType ) => {
44
-
45
- if ( ! packageJson [ depType ] ) {
46
- return ;
47
- }
48
-
49
- Object . keys ( packageJson [ depType ] ) . forEach ( ( dep ) => direct . add ( dep ) ) ;
50
- } ) ;
51
-
52
29
const arborist = new Arborist ( { path } ) ;
53
30
54
31
await arborist . buildIdealTree ( ) ;
55
32
56
33
const map = { } ;
57
34
58
- internals . walk ( arborist . idealTree , ( node ) => {
59
-
60
- if ( node . isRoot ) {
61
- return ;
62
- }
35
+ for ( const dep of arborist . idealTree . inventory . values ( ) ) {
63
36
64
- if ( ! dev && node . dev ) {
37
+ if ( ! options . dev && dep . dev ) {
65
38
// only include dev deps when `options.dev` flag is set
66
- return ;
67
- }
68
-
69
- if ( ! deep && ! node . parent . isRoot ) {
70
- // only include deep deps when `options.deep` flag is set
71
- return ;
39
+ continue ;
72
40
}
73
41
74
- if ( ! deep && ! direct . has ( node . name ) ) {
75
- // only include deep deps when `options.deep` flag is set
76
- // workaround for https://github.com/npm/arborist/issues/60
77
- return ;
42
+ if ( ! options . deep && ! [ ...dep . edgesIn ] . some ( ( { from } ) => from === arborist . idealTree ) ) {
43
+ continue ;
78
44
}
79
45
80
- map [ node . name ] = map [ node . name ] || new Set ( ) ;
81
- map [ node . name ] . add ( node . package . version ) ;
82
- } ) ;
46
+ map [ dep . name ] = map [ dep . name ] || new Set ( ) ;
47
+ map [ dep . name ] . add ( dep . package . version ) ;
48
+ }
83
49
84
50
const result = { } ;
85
51
0 commit comments