@@ -15,21 +15,8 @@ const internals = {};
1515internals . log = Debug ( 'detect-node-support' ) ;
1616
1717
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-
2918internals . resolve = async ( { packageJson, lockfile } , options ) => {
3019
31- const { deep, dev } = options ;
32-
3320 const tmpDir = Tmp . dirSync ( { unsafeCleanup : true } ) ;
3421 const path = tmpDir . name ;
3522
@@ -39,47 +26,26 @@ internals.resolve = async ({ packageJson, lockfile }, options) => {
3926 Fs . writeFileSync ( Path . join ( path , 'package-lock.json' ) , JSON . stringify ( lockfile , null , ' ' ) ) ;
4027 }
4128
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-
5229 const arborist = new Arborist ( { path } ) ;
5330
5431 await arborist . buildIdealTree ( ) ;
5532
5633 const map = { } ;
5734
58- internals . walk ( arborist . idealTree , ( node ) => {
59-
60- if ( node . isRoot ) {
61- return ;
62- }
35+ for ( const dep of arborist . idealTree . inventory . values ( ) ) {
6336
64- if ( ! dev && node . dev ) {
37+ if ( ! options . dev && dep . dev ) {
6538 // 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 ;
7240 }
7341
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 ;
7844 }
7945
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+ }
8349
8450 const result = { } ;
8551
0 commit comments