1
1
import { selectPrompt } from './prompts' ;
2
- import preferredPackageManager from 'preferred-pm' ;
2
+ import { detect } from 'package-manager-detector' ;
3
+ import { COMMANDS } from 'package-manager-detector/agents' ;
3
4
import { spinner } from '@svelte-add/clack-prompts' ;
4
5
import { executeCli } from './cli.js' ;
5
6
7
+ type PackageManager = ( typeof packageManagers ) [ number ] | undefined ;
8
+ const packageManagers = [ 'npm' , 'pnpm' , 'yarn' , 'bun' ] as const ;
9
+
6
10 /**
7
11
* @param workingDirectory
8
12
* @returns the install status of dependencies
9
13
*/
10
14
export async function suggestInstallingDependencies (
11
15
workingDirectory : string ,
12
16
) : Promise < 'installed' | 'skipped' > {
13
- type PackageManager = keyof typeof packageManagers | undefined ;
14
- const packageManagers = {
15
- npm : 'npm install' ,
16
- pnpm : 'pnpm install' ,
17
- yarn : 'yarn' ,
18
- bun : 'bun install' ,
19
- } ;
20
-
21
- // Note: The return type for this is incorrect. If a PM is not found, it returns `null`.
22
- const detectedPm = await preferredPackageManager ( workingDirectory ) ;
23
- let selectedPm : PackageManager ;
24
- if ( ! detectedPm ) {
17
+ const detectedPm = await detect ( { cwd : workingDirectory } ) ;
18
+ let selectedPm = detectedPm . agent ;
19
+ if ( ! selectedPm ) {
25
20
selectedPm = await selectPrompt (
26
21
'Which package manager do you want to install dependencies with?' ,
27
22
undefined ,
@@ -30,27 +25,24 @@ export async function suggestInstallingDependencies(
30
25
label : 'None' ,
31
26
value : undefined ,
32
27
} ,
33
- ...Object . keys ( packageManagers ) . map ( ( x ) => {
28
+ ...packageManagers . map ( ( x ) => {
34
29
return { label : x , value : x as PackageManager } ;
35
30
} ) ,
36
31
] ,
37
32
) ;
38
- } else {
39
- selectedPm = detectedPm . name ;
40
33
}
41
34
42
- if ( ! selectedPm || ! packageManagers [ selectedPm ] ) {
35
+ if ( ! selectedPm || ! COMMANDS [ selectedPm ] ) {
43
36
return 'skipped' ;
44
37
}
45
38
46
- const selectedCommand = packageManagers [ selectedPm ] ;
47
- const args = selectedCommand . split ( ' ' ) ;
48
- const command = args [ 0 ] ;
49
- args . splice ( 0 , 1 ) ;
50
-
51
39
const loadingSpinner = spinner ( ) ;
52
40
loadingSpinner . start ( 'Installing dependencies...' ) ;
53
- await installDependencies ( command , args , workingDirectory ) ;
41
+
42
+ const installCommand = COMMANDS [ selectedPm ] . install ;
43
+ const [ pm , install ] = installCommand . split ( ' ' ) ;
44
+ await installDependencies ( pm , [ install ] , workingDirectory ) ;
45
+
54
46
loadingSpinner . stop ( 'Successfully installed dependencies' ) ;
55
47
return 'installed' ;
56
48
}
0 commit comments