1
- import type { Dep , DepRaw , Deps , InstallFileResult } from "../types" ;
1
+ import type { Dep , DepRaw , Deps , InstallAllResult , InstallFileResult , InstallPackageResult } from "../types" ;
2
2
import path from "node:path" ;
3
3
import { execa } from "execa" ;
4
4
import { ooPackageName } from "../const" ;
@@ -35,9 +35,10 @@ export interface InstallPackageOptions extends InstallBasicOptions {
35
35
36
36
export type InstallOptions = InstallAllOptions | InstallFileOptions | InstallPackageOptions ;
37
37
38
- export async function install ( options : InstallAllOptions | InstallPackageOptions ) : Promise < void > ;
38
+ export async function install ( options : InstallAllOptions ) : Promise < InstallAllResult > ;
39
+ export async function install ( options : InstallPackageOptions ) : Promise < InstallPackageResult > ;
39
40
export async function install ( options : InstallFileOptions ) : Promise < InstallFileResult > ;
40
- export async function install ( options : InstallOptions ) : Promise < InstallFileResult | void > {
41
+ export async function install ( options : InstallOptions ) : Promise < InstallFileResult | InstallPackageResult | InstallAllResult > {
41
42
if ( "file" in options ) {
42
43
return await installFile ( options ) ;
43
44
}
@@ -97,7 +98,7 @@ export async function installFile(options: InstallFileOptions): Promise<InstallF
97
98
98
99
// oopm install foo
99
100
100
- export async function installPackage ( options : InstallPackageOptions ) {
101
+ export async function installPackage ( options : InstallPackageOptions ) : Promise < InstallPackageResult > {
101
102
const libraryMeta = await generatePackageJson ( options . workdir , false ) ;
102
103
103
104
const alreadyInstalled : Deps = [ ] ;
@@ -144,18 +145,22 @@ export async function installPackage(options: InstallPackageOptions) {
144
145
await Promise . all ( p ) ;
145
146
}
146
147
147
- await _install ( {
148
+ const deps = await _install ( {
148
149
alreadyInstalled,
149
150
needInstall,
150
151
save : options . save ,
151
152
workdir : options . workdir ,
152
153
distDir : options . distDir ,
153
154
token : options . token ,
154
155
} ) ;
156
+
157
+ return {
158
+ deps,
159
+ } ;
155
160
}
156
161
157
162
// oopm install
158
- export async function installAll ( options : InstallAllOptions ) {
163
+ export async function installAll ( options : InstallAllOptions ) : Promise < InstallAllResult > {
159
164
const libraryMeta = await generatePackageJson ( options . workdir , false ) ;
160
165
161
166
const alreadyInstalled : Deps = [ ] ;
@@ -180,14 +185,18 @@ export async function installAll(options: InstallAllOptions) {
180
185
await Promise . all ( p ) ;
181
186
}
182
187
183
- await _install ( {
188
+ const deps = await _install ( {
184
189
alreadyInstalled,
185
190
needInstall,
186
191
save : false ,
187
192
workdir : options . workdir ,
188
193
distDir : options . distDir ,
189
194
token : options . token ,
190
195
} ) ;
196
+
197
+ return {
198
+ deps,
199
+ } ;
191
200
}
192
201
193
202
interface _InstallOptions {
@@ -199,7 +208,7 @@ interface _InstallOptions {
199
208
needInstall : Deps ;
200
209
}
201
210
202
- async function _install ( options : _InstallOptions ) {
211
+ async function _install ( options : _InstallOptions ) : Promise < InstallPackageResult [ "deps" ] > {
203
212
const temp = await tempDir ( ) ;
204
213
await initPackageJson ( temp , options . needInstall , options . token ) ;
205
214
@@ -218,6 +227,20 @@ async function _install(options: _InstallOptions) {
218
227
219
228
await mkdir ( options . distDir ) ;
220
229
230
+ const targets : InstallPackageResult [ "deps" ] = { } ;
231
+
232
+ for ( const dep of options . alreadyInstalled ) {
233
+ const target = path . join ( options . distDir , `${ dep . name } -${ dep . version } ` ) ;
234
+
235
+ targets [ `${ dep . name } -${ dep . version } ` ] = {
236
+ name : dep . name ,
237
+ version : dep . version ,
238
+ target,
239
+ isAlreadyExist : true ,
240
+ meta : await generatePackageJson ( target , false ) ,
241
+ } ;
242
+ }
243
+
221
244
const ps = info
222
245
. filter ( ( i ) => {
223
246
if ( options . alreadyInstalled . length === 0 ) {
@@ -230,7 +253,17 @@ async function _install(options: _InstallOptions) {
230
253
} )
231
254
. map ( async ( i ) => {
232
255
const target = path . join ( options . distDir , `${ i . name } -${ i . version } ` ) ;
233
- if ( ! await exists ( target ) ) {
256
+ const isAlreadyExist = await exists ( target ) ;
257
+
258
+ targets [ `${ i . name } -${ i . version } ` ] = {
259
+ name : i . name ,
260
+ version : i . version ,
261
+ target,
262
+ isAlreadyExist,
263
+ meta : await generatePackageJson ( i . source , false ) ,
264
+ } ;
265
+
266
+ if ( ! isAlreadyExist ) {
234
267
return copyDir ( i . source , target ) ;
235
268
}
236
269
} ) ;
@@ -242,4 +275,6 @@ async function _install(options: _InstallOptions) {
242
275
await Promise . all ( ps ) ;
243
276
244
277
await remove ( temp ) ;
278
+
279
+ return targets ;
245
280
}
0 commit comments