@@ -92,20 +92,39 @@ final class NPMPackageManager: PackageManagerProtocol {
9292 // MARK: - NPM Install
9393
9494 func runNpmInstall( _ source: PackageSource , in packagePath: URL ) -> PackageManagerInstallStep {
95- PackageManagerInstallStep (
95+ let qualifiedSourceName = " \( source. pkgName) @ \( source. version) "
96+ let otherPackages = source. options [ " extraPackages " ] ?
97+ . split ( separator: " , " )
98+ . map { $0. trimmingCharacters ( in: . whitespacesAndNewlines) } ?? [ ]
99+
100+ var packageList = ( [ qualifiedSourceName] + otherPackages)
101+
102+ // FIXME: This will break with localization. Use real Foundation APIs for pluralizing lists.
103+ let plural = packageList. count > 1
104+ if plural, var last = packageList. last {
105+ // Oxford comma
106+ last = " and " + last
107+ packageList [ packageList. count - 1 ] = last
108+ }
109+ let packagesDescription = packageList. joined ( separator: " , " )
110+
111+ let sSuffix = packageList. count > 1 ? " s " : " "
112+ let suffix = plural ? " these packages " : " this package "
113+
114+ return PackageManagerInstallStep (
96115 name: " Install Package Using npm " ,
97- // TODO: Confirm
98- confirmation: . required( message: " " )
116+ confirmation: . required(
117+ message: " Package requires npm package \( sSuffix) \( packagesDescription) . "
118+ + " \n Allow CodeEdit to install \( suffix) ? "
119+ )
99120 ) { model in
100121 do {
101- var installArgs = [ " npm " , " install " , " \( source . pkgName ) @ \( source . version ) " ]
122+ var installArgs = [ " npm " , " install " , qualifiedSourceName ]
102123 if let dev = source. options [ " dev " ] , dev. lowercased ( ) == " true " {
103124 installArgs. append ( " --save-dev " )
104125 }
105- if let extraPackages = source. options [ " extraPackages " ] ? . split ( separator: " , " ) {
106- for pkg in extraPackages {
107- installArgs. append ( String ( pkg) . trimmingCharacters ( in: . whitespacesAndNewlines) )
108- }
126+ for extraPackage in otherPackages {
127+ installArgs. append ( extraPackage)
109128 }
110129
111130 _ = try await model. executeInDirectory ( in: packagePath. path, installArgs)
0 commit comments