@@ -49,11 +49,12 @@ export async function run(
49
49
50
50
// install all modules to ensure we have a consistent state
51
51
reporter . step ( ++ step , totalSteps , "Installing modules" ) ;
52
- await runInstall ( ) ;
52
+ let install = await runInstall ( ) ;
53
53
54
54
// remove
55
55
for ( let name of args ) {
56
56
let loc = path . join ( "node_modules" , name ) ;
57
+ let range ;
57
58
reporter . step ( ++ step , totalSteps , `Removing module ${ name } ` ) ;
58
59
59
60
// check that it's there
@@ -67,24 +68,45 @@ export async function run(
67
68
await fs . unlink ( path . join ( "node_modules" , ".bin" , binName ) ) ;
68
69
}
69
70
70
- // remove entire package
71
- await fs . unlink ( loc ) ;
72
-
73
71
// remove from `package.json`
74
72
for ( let type of [ "devDependencies" , "dependencies" , "optionalDependencies" ] ) {
75
73
let deps = json [ type ] ;
76
- if ( deps ) delete deps [ name ] ;
74
+ if ( deps ) {
75
+ range = deps [ name ] ;
76
+ delete deps [ name ] ;
77
+ }
77
78
}
78
- }
79
79
80
- // TODO remove packages from mirror, this is tricky since we'd also want transitive
81
- // dependencies
80
+ // remove entire package
81
+ let locs = [ ] ;
82
+ if ( range ) {
83
+ // add all transitive dependencies locations
84
+ addSub ( `${ name } @${ range } ` ) ;
85
+
86
+ function addSub ( pattern ) {
87
+ let pkg = install . resolver . getResolvedPattern ( pattern ) ;
88
+ if ( ! pkg ) return ; // TODO could possibly throw an error?
89
+
90
+ locs . push ( config . generateHardModulePath ( pkg . reference ) ) ;
91
+
92
+ for ( let key in pkg . dependencies ) {
93
+ addSub ( `${ key } @${ pkg . dependencies [ key ] } ` ) ;
94
+ }
95
+ }
96
+ } else {
97
+ // doesn't look like this was in package.json so we don't have a pattern to seed
98
+ // the search
99
+ locs. push ( loc ) ;
100
+ }
101
+
102
+ for ( let loc of locs ) await fs . unlink ( loc ) ;
103
+ }
82
104
83
105
// save package.json
84
106
await fs . writeFile ( jsonLoc , stringify ( json ) + "\n" ) ;
85
107
86
108
// reinstall so we can get the updated lockfile
87
- reporter . step ( ++ step , totalSteps , "Regenerating lockfile ") ;
109
+ reporter . step ( ++ step , totalSteps , "Regenerating lockfile and installing missing dependencies " ) ;
88
110
await runInstall ( ) ;
89
111
90
112
//
0 commit comments