@@ -88,9 +88,8 @@ export class PackageManager {
8888 const config = ProjectConfig . localConfig ( ) ;
8989 if ( ! config . packagesInstalled ) {
9090 let command : string ;
91- let managerCommand : string ;
91+ const managerCommand = this . getManager ( ) ;
9292
93- managerCommand = this . getManager ( ) ;
9493 switch ( managerCommand ) {
9594 case "npm" :
9695 /* passes through */
@@ -125,47 +124,50 @@ export class PackageManager {
125124 public static removePackage ( packageName : string , verbose : boolean = false ) : boolean {
126125 let command : string ;
127126 const managerCommand = this . getManager ( ) ;
127+ const sanitizePackage = Util . sanitizeShellArg ( packageName ) ;
128128 switch ( managerCommand ) {
129129 case "npm" :
130130 /* passes through */
131131 default :
132- command = `${ managerCommand } uninstall ${ packageName } --quiet --save` ;
132+ command = `${ managerCommand } uninstall ${ sanitizePackage } --quiet --save` ;
133133 break ;
134134 }
135135 try {
136136 // tslint:disable-next-line:object-literal-sort-keys
137137 Util . execSync ( command , { stdio : "pipe" , encoding : "utf8" } ) ;
138138 } catch ( error ) {
139- Util . log ( `Error uninstalling package ${ packageName } with ${ managerCommand } ` ) ;
139+ Util . log ( `Error uninstalling package ${ sanitizePackage } with ${ managerCommand } ` ) ;
140140 if ( verbose ) {
141141 Util . log ( error . message ) ;
142142 }
143143 return false ;
144144 }
145145
146- Util . log ( `Package ${ packageName } uninstalled successfully` ) ;
146+ Util . log ( `Package ${ sanitizePackage } uninstalled successfully` ) ;
147147 return true ;
148148 }
149149
150150 public static addPackage ( packageName : string , verbose : boolean = false ) : boolean {
151151 const managerCommand = this . getManager ( ) ;
152- const command = this . getInstallCommand ( managerCommand , packageName ) ;
152+ const sanitizePackage = Util . sanitizeShellArg ( packageName ) ;
153+ const command = this . getInstallCommand ( managerCommand , sanitizePackage ) ;
153154 try {
154155 // tslint:disable-next-line:object-literal-sort-keys
155156 Util . execSync ( command , { stdio : "pipe" , encoding : "utf8" } ) ;
156157 } catch ( error ) {
157- Util . log ( `Error installing package ${ packageName } with ${ managerCommand } ` ) ;
158+ Util . log ( `Error installing package ${ sanitizePackage } with ${ managerCommand } ` ) ;
158159 if ( verbose ) {
159160 Util . log ( error . message ) ;
160161 }
161162 return false ;
162163 }
163- Util . log ( `Package ${ packageName } installed successfully` ) ;
164+ Util . log ( `Package ${ sanitizePackage } installed successfully` ) ;
164165 return true ;
165166 }
166167
167168 public static async queuePackage ( packageName : string , verbose = false ) {
168- const command = this . getInstallCommand ( this . getManager ( ) , packageName ) . replace ( "--save" , "--no-save" ) ;
169+ const command = this . getInstallCommand ( this . getManager ( ) , Util . sanitizeShellArg ( packageName ) )
170+ . replace ( "--save" , "--no-save" ) ;
169171 const [ packName , version ] = packageName . split ( / @ (? = [ ^ \/ ] + $ ) / ) ;
170172 const packageJSON = this . getPackageJSON ( ) ;
171173 if ( ! packageJSON . dependencies ) {
@@ -222,7 +224,7 @@ export class PackageManager {
222224 }
223225
224226 public static ensureRegistryUser ( config : Config , message : string ) : boolean {
225- const fullPackageRegistry = config . igPackageRegistry ;
227+ const fullPackageRegistry = Util . sanitizeShellArg ( config . igPackageRegistry ) ;
226228 try {
227229 // tslint:disable-next-line:object-literal-sort-keys
228230 Util . execSync ( `npm whoami --registry=${ fullPackageRegistry } ` , { stdio : "pipe" , encoding : "utf8" } ) ;
@@ -281,7 +283,7 @@ export class PackageManager {
281283 }
282284 }
283285
284- private static getManager ( /*config:Config*/ ) : string {
286+ private static getManager ( /*config:Config*/ ) : 'npm' {
285287 //stub to potentially swap out managers
286288 return "npm" ;
287289 }
0 commit comments